示例#1
0
        public static void CancelStreamRequest()
        {
            _cancelingStream = true;

            if (_quoteStreamRequest != null)
            {
                _quoteStreamRequest.CloseStream();
                _quoteStreamRequest = null;
            }
        }
示例#2
0
        private static void StartStreamingData(QuoteStreamRequest quoteStream, CancellationToken cancelToken, CancellationTokenSource tokenSource)
        {
            Task.Run(() => {
                Console.WriteLine("Starting data stream, press enter to cancel...");

                // Poll on this property if you have to do other cleanup before throwing.
                if (cancelToken.IsCancellationRequested)
                {
                    cancelToken.ThrowIfCancellationRequested();
                }

                quoteStream.Execute((items) => {
                    foreach (var item in items)
                    {
                        var ticker = string.Format("[{0}]", item.Symbol);
                        var time   = DateTime.Now.ToShortTimeString();

                        if (item is Quote)
                        {
                            Quote quote = (Quote)item;
                            int askSz   = Convert.ToInt32(quote.Asksz);
                            int bidSz   = Convert.ToInt32(quote.Bidsz);

                            Console.WriteLine("{0} [Qu] {1} Ask:  {2} Bid: {3} AskSz: {4} BidSz: {5}", time, ticker.PadRight(5, ' '), quote.Ask.PadRight(6, ' '), quote.Bid.PadRight(5, ' '), askSz.ToString("N0").PadRight(9, ' '), bidSz.ToString("N0"));

                            using (var db = DbFactory.GetDbSource())
                            {
                                db.SaveStreamQuote(quote);
                            }
                        }
                        else if (item is Trade)
                        {
                            Trade trade = (Trade)item;
                            Console.WriteLine("{0} [Tr] {1} Last: {2} Vol: {3}", time, ticker.PadRight(6, ' '), trade.Last.PadRight(5, ' '), trade.Vl);

                            using (var db = DbFactory.GetDbSource())
                            {
                                db.SaveStreamTrade(trade);
                            }
                        }
                    }
                });
            });
        }
示例#3
0
        private static void StreamingData_EntryPoint()
        {
            var           tokenSource = new CancellationTokenSource();
            var           ct          = tokenSource.Token;
            List <string> tickers;

            using (var db = DbFactory.GetDbSource())
            {
                tickers = db.GetTickers();
            }

            var quoteStream = new QuoteStreamRequest(tickers);

            var task = Task.Factory.StartNew(() =>
            {
                // Were we already canceled?
                ct.ThrowIfCancellationRequested();

                StartStreamingData(quoteStream, ct, tokenSource);
            }, tokenSource.Token);

            try
            {
                task.Wait();

                var exit = Console.ReadLine();
                if (string.IsNullOrWhiteSpace(exit))
                {
                    Console.WriteLine("Cancel requested");
                    tokenSource.Cancel();
                }
            }
            finally
            {
                tokenSource.Dispose();
            }

            quoteStream.CloseStream();
            quoteStream = null;
        }
示例#4
0
        private void StartStreamingData()
        {
            Task.Run(() => {
                List <string> tickers;
                using (var db = DbFactory.GetDbSource())
                {
                    tickers = db.GetTickers();
                }

                var quoteStream = new QuoteStreamRequest(tickers);
                Console.WriteLine("Starting data stream");

                // Poll on this property if you have to do other cleanup before throwing.

                quoteStream.Execute((items) => {
                    foreach (var item in items)
                    {
                        var ticker = string.Format("[{0}]", item.Symbol);
                        var time   = DateTime.Now.ToShortTimeString();

                        if (item is Quote)
                        {
                            Quote quote = (Quote)item;
                            int askSz   = Convert.ToInt32(quote.Asksz);
                            int bidSz   = Convert.ToInt32(quote.Bidsz);

                            Console.WriteLine("{0} [Qu] {1} Ask:  {2} Bid: {3} AskSz: {4} BidSz: {5}", time, ticker.PadRight(5, ' '), quote.Ask.PadRight(6, ' '), quote.Bid.PadRight(5, ' '), askSz.ToString("N0").PadRight(9, ' '), bidSz.ToString("N0"));

                            if (quote.Symbol == "SSPXF")
                            {
                                App.Current.Dispatcher.Invoke(delegate
                                {
                                    this.SSPXFQuotes.Add(new QuoteDataPoint
                                    {
                                        Ask  = Convert.ToDecimal(quote.Ask),
                                        Bid  = Convert.ToDecimal(quote.Bid),
                                        Time = DateTime.Parse(quote.Datetime)
                                    });
                                });
                            }
                            else if (quote.Symbol == "CANWF")
                            {
                                App.Current.Dispatcher.Invoke(delegate
                                {
                                    this.CANWFQuotes.Add(new QuoteDataPoint
                                    {
                                        Ask  = Convert.ToDecimal(quote.Ask),
                                        Bid  = Convert.ToDecimal(quote.Bid),
                                        Time = DateTime.Parse(quote.Datetime)
                                    });
                                });
                            }

                            using (var db = DbFactory.GetDbSource())
                            {
                                db.SaveStreamQuote(quote);
                            }
                        }
                        else if (item is Trade)
                        {
                            Trade trade = (Trade)item;
                            Console.WriteLine("{0} [Tr] {1} Last: {2} Vol: {3}", time, ticker.PadRight(6, ' '), trade.Last.PadRight(5, ' '), trade.Vl);

                            using (var db = DbFactory.GetDbSource())
                            {
                                db.SaveStreamTrade(trade);
                            }
                        }
                    }
                });
            });
        }
示例#5
0
        //private static CancellationToken _cancelToken;
        //private static CancellationTokenSource _cancelTokenSource;

        public static async void ExecuteStreamRequest(List <string> tickers, Action <List <StreamDataItem> > callback)
        {
            _quoteStreamRequest = new QuoteStreamRequest(tickers);

            try
            {
                _cancelingStream = false;

                await _quoteStreamRequest.Execute(callback);
            }
            catch (WebException ex)
            {
                Console.WriteLine("[Quote Stream] Web exception: " + ex.Message);
                if (_quoteStreamRequest != null)
                {
                    _quoteStreamRequest.CloseStream();
                }

                if (!_cancelingStream)
                {
                    DoRetry(5000, tickers, callback);
                }
            }
            catch (IOException ex)
            {
                // TK API closed the connection, cleanup and retry in 1 second
                Console.WriteLine("[Quote Stream] IO exception: " + ex.Message);
                if (_quoteStreamRequest != null)
                {
                    _quoteStreamRequest.CloseStream();
                }
                if (!_cancelingStream)
                {
                    DoRetry(1000, tickers, callback);
                }
            }
            catch (NullReferenceException ex)
            {
                Console.WriteLine("[Quote Stream] NullReferenceException. StackTrace: " + ex.StackTrace);
                if (_quoteStreamRequest != null)
                {
                    _quoteStreamRequest.CloseStream();
                }
                if (!_cancelingStream)
                {
                    DoRetry(1000, tickers, callback);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(string.Format("[Quote Stream] Unhandled exception: {0} [{1}]", ex.Message, ex.GetType().ToString()));
                Console.WriteLine();
                if (_quoteStreamRequest != null)
                {
                    _quoteStreamRequest.CloseStream();
                }
                if (!_cancelingStream)
                {
                    DoRetry(1000, tickers, callback);
                }
            }
        }