コード例 #1
0
        public async Task <IWebSocket> GetWebsocketKlines(IEnumerable <string> streamTickers, KlineInterval interval)
        {
            string combined = string.Join("/", streamTickers.Select(s => s.ToLower() + "@" + interval.ToString()));

            return(await api.ConnectWebSocketAsync($"/stream?streams={combined}", (_socket, msg) =>
            {
                string json = msg.ToStringFromUTF8();
                //logger.Trace($"Kline Data:{json}");

                var klinedata = JsonConvert.DeserializeObject <KlineStream>(json);
                DateTime dt = CryptoUtility.ParseTimestamp(klinedata.Data.EventTime, TimestampType.UnixMilliseconds);

                /*
                 * logger.Trace($"EventTime:" + dt);
                 * logger.Trace($"KLineData:{klinedata.Data.kline.kLineClosed}:{klinedata.Data.MarketSymbol}:{klinedata.Data.kline.OpenTimestamp}");
                 * logger.Trace($"KLineData:{klinedata.Data.kline.kLineClosed}:{klinedata.Data.MarketSymbol}:{klinedata.Data.kline.Open}:{klinedata.Data.kline.High}:{klinedata.Data.kline.Low}:{klinedata.Data.kline.Close}");
                 * logger.Trace($"KLineData:{klinedata.Data.kline.kLineClosed}:{klinedata.Data.MarketSymbol}:{klinedata.Data.kline.BaseVolume}:{klinedata.Data.kline.QuoteVolume}");
                 * logger.Trace($"KLineData:{klinedata.Data.kline.kLineClosed}:{klinedata.Data.MarketSymbol}:{klinedata.Data.kline.TakerBaseVolume}:{klinedata.Data.kline.TakerQuoteVolume}");
                 */

                if (klinedata.Data.kline.kLineClosed == true)
                {
                    /*
                     * logger.Trace($"EventTime:" + dt);
                     * logger.Trace($"KLineData:{klinedata.Data.kline.kLineClosed}:{klinedata.Data.MarketSymbol}:{klinedata.Data.kline.OpenTimestamp}");
                     * logger.Trace($"KLineData:{klinedata.Data.kline.kLineClosed}:{klinedata.Data.MarketSymbol}:{klinedata.Data.kline.Open}:{klinedata.Data.kline.High}:{klinedata.Data.kline.Low}:{klinedata.Data.kline.Close}");
                     * logger.Trace($"KLineData:{klinedata.Data.kline.kLineClosed}:{klinedata.Data.MarketSymbol}:{klinedata.Data.kline.BaseVolume}:{klinedata.Data.kline.QuoteVolume}");
                     * logger.Trace($"KLineData:{klinedata.Data.kline.kLineClosed}:{klinedata.Data.MarketSymbol}:{klinedata.Data.kline.TakerBaseVolume}:{klinedata.Data.kline.TakerQuoteVolume}");
                     */
                    MarketCandle candle = new MarketCandle();
                    candle.OpenPrice = klinedata.Data.kline.Open;
                    candle.HighPrice = klinedata.Data.kline.High;
                    candle.LowPrice = klinedata.Data.kline.Low;
                    candle.ClosePrice = klinedata.Data.kline.Close;
                    candle.PeriodSeconds = (int)interval;

                    candle.BaseCurrencyVolume = (double)klinedata.Data.kline.BaseVolume;
                    candle.QuoteCurrencyVolume = (double)klinedata.Data.kline.QuoteVolume;

                    /*
                     * candle.BaseCurrencyVolume = (double)klinedata.Data.kline.TakerBaseVolume;
                     * candle.QuoteCurrencyVolume = (double)klinedata.Data.kline.TakerQuoteVolume;
                     */
                    candle.Timestamp = klinedata.Data.kline.OpenTimestamp;
                    if (!TickerKLines.ContainsKey(klinedata.Data.MarketSymbol))
                    {
                        TickerKLines[klinedata.Data.MarketSymbol] = new List <MarketCandle>();
                    }
                    TickerKLines[klinedata.Data.MarketSymbol].Add(candle);
                }

                /*
                 * string marketSymbol = update.Data.MarketSymbol;
                 * ExchangeOrderBook book = new ExchangeOrderBook { SequenceId = update.Data.FinalUpdate, MarketSymbol = marketSymbol, LastUpdatedUtc = CryptoUtility.UnixTimeStampToDateTimeMilliseconds(update.Data.EventTime) };
                 * foreach (List<object> ask in update.Data.Asks)
                 * {
                 *  var depth = new ExchangeOrderPrice { Price = ask[0].ConvertInvariant<decimal>(), Amount = ask[1].ConvertInvariant<decimal>() };
                 *  book.Asks[depth.Price] = depth;
                 * }
                 * foreach (List<object> bid in update.Data.Bids)
                 * {
                 *  var depth = new ExchangeOrderPrice { Price = bid[0].ConvertInvariant<decimal>(), Amount = bid[1].ConvertInvariant<decimal>() };
                 *  book.Bids[depth.Price] = depth;
                 * }
                 * callback(book);
                 */
                return Task.CompletedTask;
            }, (_sock) =>
            {
                logger.Trace("KLine socket connected");
                return Task.CompletedTask;
            }));
        }