private void CacheTick(BinanceStreamTick data) { var instrument = data.Symbol; lock (_subMgr) { CacheResult(BINANCE, instrument, RtdFields.FIRST_ID, data.FirstTradeId); CacheResult(BINANCE, instrument, RtdFields.LAST_ID, data.LastTradeId); CacheResult(BINANCE, instrument, RtdFields.QUOTE_VOL, data.TotalTradedQuoteAssetVolume); CacheResult(BINANCE, instrument, RtdFields.VOL, data.TotalTradedBaseAssetVolume); CacheResult(BINANCE, instrument, RtdFields.ASK, data.BestAskPrice); CacheResult(BINANCE, instrument, RtdFields.ASK_SIZE, data.BestAskQuantity); CacheResult(BINANCE, instrument, RtdFields.BID, data.BestBidPrice); CacheResult(BINANCE, instrument, RtdFields.BID_SIZE, data.BestBidQuantity); CacheResult(BINANCE, instrument, RtdFields.LOW, data.LowPrice); CacheResult(BINANCE, instrument, RtdFields.HIGH, data.HighPrice); CacheResult(BINANCE, instrument, RtdFields.VWAP, data.WeightedAverage); CacheResult(BINANCE, instrument, RtdFields.PRICE_PCT, data.PriceChangePercentage / 100); CacheResult(BINANCE, instrument, RtdFields.PRICE_CHG, data.PriceChange); CacheResult(BINANCE, instrument, RtdFields.TRADES, data.TotalTrades); CacheResult(BINANCE, instrument, RtdFields.OPEN_TIME, data.StatisticsOpenTime.ToLocalTime()); CacheResult(BINANCE, instrument, RtdFields.CLOSE_TIME, data.StatisticsCloseTime.ToLocalTime()); // A calculated field CacheResult(BINANCE, instrument, RtdFields.SPREAD, data.BestAskPrice - data.BestBidPrice); } }
private void PriceTicksHandler(BinanceStreamTick obj) { var startTime = DateTime.UtcNow; MamaBot.GlobalShared.Vars.TickChannel.Queue.Enqueue(obj); Debug.WriteLine((DateTime.UtcNow - startTime).TotalMilliseconds + "ms"); }
private void TT5(BinanceStreamTick obj) { //TBD Logger.Info(string.Format("CVD : {0}", CurrentCumulativeDelta)); Logger.Info(string.Format("WAP : {0}", obj.WeightedAveragePrice)); CurrentCumulativeDelta -= obj.AskQuantity; CurrentCumulativeDelta += obj.BidQuantity; }
public void SubscribingToSymbolTicker_Should_TriggerWhenSymbolTickerStreamMessageIsReceived() { // arrange var socket = new Mock <IWebsocket>(); socket.Setup(s => s.Close()); socket.Setup(s => s.Connect()).Returns(Task.FromResult(true)); socket.Setup(s => s.SetEnabledSslProtocols(It.IsAny <System.Security.Authentication.SslProtocols>())); var factory = new Mock <IWebsocketFactory>(); factory.Setup(s => s.CreateWebsocket(It.IsAny <Log>(), It.IsAny <string>())).Returns(socket.Object); BinanceStreamTick result = null; var client = new BinanceSocketClient { SocketFactory = factory.Object }; client.SubscribeToSymbolTicker("test", (test) => result = test); var data = new BinanceStreamTick() { BestAskPrice = 0.1m, BestAskQuantity = 0.2m, BestBidPrice = 0.3m, BestBidQuantity = 0.4m, CloseTradesQuantity = 0.5m, CurrentDayClosePrice = 0.6m, FirstTradeId = 1, HighPrice = 0.7m, LastTradeId = 2, LowPrice = 0.8m, OpenPrice = 0.9m, PrevDayClosePrice = 1.0m, PriceChange = 1.1m, PriceChangePercentage = 1.2m, StatisticsCloseTime = new DateTime(2017, 1, 2), StatisticsOpenTime = new DateTime(2017, 1, 1), Symbol = "test", TotalTradedBaseAssetVolume = 1.3m, TotalTradedQuoteAssetVolume = 1.4m, TotalTrades = 3, WeightedAverage = 1.5m }; // act socket.Raise(r => r.OnMessage += null, JsonConvert.SerializeObject(data)); // assert Assert.IsNotNull(result); Assert.IsTrue(TestHelpers.PublicInstancePropertiesEqual(data, result)); }
public void SubscribingToSymbolTicker_Should_TriggerWhenSymbolTickerStreamMessageIsReceived() { // arrange var socket = new TestSocket(); var client = TestHelpers.CreateSocketClient(socket); BinanceStreamTick result = null; client.SubscribeToSymbolTickerUpdates("ETHBTC", (test) => result = test); var data = new BinanceStreamTick() { BestAskPrice = 0.1m, BestAskQuantity = 0.2m, BestBidPrice = 0.3m, BestBidQuantity = 0.4m, CloseTradesQuantity = 0.5m, CurrentDayClosePrice = 0.6m, FirstTradeId = 1, HighPrice = 0.7m, LastTradeId = 2, LowPrice = 0.8m, OpenPrice = 0.9m, PrevDayClosePrice = 1.0m, PriceChange = 1.1m, PriceChangePercentage = 1.2m, StatisticsCloseTime = new DateTime(2017, 1, 2), StatisticsOpenTime = new DateTime(2017, 1, 1), Symbol = "test", TotalTradedBaseAssetVolume = 1.3m, TotalTradedQuoteAssetVolume = 1.4m, TotalTrades = 3, WeightedAverage = 1.5m }; // act socket.InvokeMessage(data); // assert Assert.IsNotNull(result); Assert.IsTrue(TestHelpers.AreEqual(data, result)); }
private object DecodeTick(BinanceStreamTick data, string field) { var instrument = data.Symbol; switch (field) { case RtdFields.FIRST_ID: return(data.FirstTradeId); case RtdFields.LAST_ID: return(data.LastTradeId); case RtdFields.QUOTE_VOL: return(data.TotalTradedQuoteAssetVolume); case RtdFields.VOL: return(data.TotalTradedBaseAssetVolume); case RtdFields.ASK: return(data.BestAskPrice); case RtdFields.ASK_SIZE: return(data.BestAskQuantity); case RtdFields.BID: return(data.BestBidPrice); case RtdFields.BID_SIZE: return(data.BestBidQuantity); case RtdFields.LOW: return(data.LowPrice); case RtdFields.HIGH: return(data.HighPrice); case RtdFields.VWAP: return(data.WeightedAverage); case RtdFields.PRICE_PCT: return(data.PriceChangePercentage / 100); case RtdFields.PRICE_CHG: return(data.PriceChange); case RtdFields.TRADES: return(data.TotalTrades); case RtdFields.SPREAD: return(data.BestAskPrice - data.BestBidPrice); default: return(SubscriptionManager.UnsupportedField); } }
public void SubscribingToSymbolTicker_Should_TriggerWhenSymbolTickerStreamMessageIsReceived() { // arrange var socket = new TestSocket(); var client = TestHelpers.CreateSocketClient(socket, new BinanceSocketClientOptions() { LogVerbosity = LogVerbosity.Debug }); BinanceStreamTick result = null; client.Spot.SubscribeToSymbolTickerUpdates("ETHBTC", (test) => result = test); var data = new BinanceCombinedStream <BinanceStreamTick>() { Stream = "test", Data = new BinanceStreamTick() { FirstTradeId = 1, HighPrice = 0.7m, LastTradeId = 2, LowPrice = 0.8m, OpenPrice = 0.9m, PrevDayClosePrice = 1.0m, PriceChange = 1.1m, Symbol = "test", Volume = 1.3m, TotalTradedAlternateAssetVolume = 1.4m, TotalTrades = 3 } }; // act socket.InvokeMessage(data); // assert Assert.IsNotNull(result); Assert.IsTrue(TestHelpers.AreEqual(data.Data, result)); }
private void CacheTick(BinanceStreamTick data) { var instrument = data.Symbol; CacheResult(BINANCE, instrument, RtdFields.FIRST_ID, data.FirstTradeId); CacheResult(BINANCE, instrument, RtdFields.LAST_ID, data.LastTradeId); CacheResult(BINANCE, instrument, RtdFields.QUOTE_VOL, data.TotalTradedQuoteAssetVolume); CacheResult(BINANCE, instrument, RtdFields.VOL, data.TotalTradedBaseAssetVolume); CacheResult(BINANCE, instrument, RtdFields.ASK, data.BestAskPrice); CacheResult(BINANCE, instrument, RtdFields.ASK_SIZE, data.BestAskQuantity); CacheResult(BINANCE, instrument, RtdFields.BID, data.BestBidPrice); CacheResult(BINANCE, instrument, RtdFields.BID_SIZE, data.BestBidQuantity); CacheResult(BINANCE, instrument, RtdFields.LOW, data.LowPrice); CacheResult(BINANCE, instrument, RtdFields.HIGH, data.HighPrice); CacheResult(BINANCE, instrument, RtdFields.VWAP, data.WeightedAverage); CacheResult(BINANCE, instrument, RtdFields.PRICE_PCT, data.PriceChangePercentage / 100); CacheResult(BINANCE, instrument, RtdFields.PRICE_CHG, data.PriceChange); CacheResult(BINANCE, instrument, RtdFields.TRADES, data.TotalTrades); CacheResult(BINANCE, instrument, RtdFields.SPREAD, data.BestAskPrice - data.BestBidPrice); }