public void SubscribingToTradeStream_Should_TriggerWhenTradeStreamMessageIsReceived() { // arrange var socket = new TestSocket(); var client = TestHelpers.CreateSocketClient(socket); BinanceStreamTrade result = null; client.Spot.SubscribeToTradeUpdates("ETHBTC", (test) => result = test); var data = new BinanceCombinedStream <BinanceStreamTrade>() { Stream = "test", Data = new BinanceStreamTrade() { Event = "TestTradeStream", EventTime = new DateTime(2017, 1, 1), Symbol = "ETHBTC", BuyerIsMaker = true, BuyerOrderId = 10000000000000, SellerOrderId = 2000000000000, Price = 1.1m, Quantity = 2.2m, TradeTime = new DateTime(2017, 1, 1) } }; // act socket.InvokeMessage(data); // assert Assert.IsNotNull(result); Assert.IsTrue(TestHelpers.AreEqual(data.Data, result)); }
public AggregateTradeViewModel(BinanceStreamTrade data) { Symbol = data.Symbol; Price = data.Price; Quantity = data.Quantity; FirstTradeID = data.FirstTradeId; LastTradeID = data.LastTradeId; Time = data.TradeTime; BuyerIsMaker = data.BuyerIsMaker; //IsBestMatch = data. }
public BinanceStreamClick(BinanceStreamTrade t) { Symbol = t.Symbol; TradeId = t.TradeId; Price = t.Price; Quantity = t.Quantity; BuyerOrderId = t.BuyerOrderId; SellerOrderId = t.SellerOrderId; TradeTime = t.TradeTime; BuyerIsMaker = t.BuyerIsMaker ? 1 : 0; }
public static Trade ToEntity(this BinanceStreamTrade item) { Trade trade = new Trade(); trade.ExchangeCode = ExchangeCode.BINANCE.Code; trade.Symbol = item.Symbol; trade.Time = item.TradeTime; trade.TradeId = item.TradeId; trade.Price = item.Price; trade.Quantity = item.Quantity; return(trade); }
public static Trade ToTradeModel(this BinanceStreamTrade streamTrade, SymbolPair symbolPair) { return(new Trade() { SymbolPair = symbolPair, TradeId = streamTrade.TradeId, TradeTime = streamTrade.TradeTime, Price = streamTrade.Price, Quantity = streamTrade.Quantity, BuyerOrderId = streamTrade.BuyerOrderId, SellerOrderId = streamTrade.SellerOrderId, }); }
public void ProduceEvent(BinanceStreamTrade e) { try { //Console.WriteLine(e.TradeTime); _producer.BeginProduce("socket", new Message <Null, string> { Value = JsonConvert.SerializeObject(new BinanceStreamClick(e)) }, Void); _producer.Flush(TimeSpan.FromSeconds(42)); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
public void SubscribingToTradeStream_Should_TriggerWhenTradeStreamMessageIsReceived() { // 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); BinanceStreamTrade result = null; var client = new BinanceSocketClient { SocketFactory = factory.Object }; client.SubscribeToTradesStream("test", (test) => result = test); var data = new BinanceCombinedStream <BinanceStreamTrade>() { Stream = "test", Data = new BinanceStreamTrade() { Event = "TestTradeStream", EventTime = new DateTime(2017, 1, 1), Symbol = "test", TradeId = 1000000000000, BuyerIsMaker = true, BuyerOrderId = 10000000000000, SellerOrderId = 2000000000000, Price = 1.1m, Quantity = 2.2m, TradeTime = new DateTime(2017, 1, 1) } }; // act socket.Raise(r => r.OnMessage += null, JsonConvert.SerializeObject(data)); // assert Assert.IsNotNull(result); Assert.IsTrue(TestHelpers.PublicInstancePropertiesEqual(data.Data, result)); }
public void SubscribingToTradeStream_Should_TriggerWhenTradeStreamMessageIsReceived() { // arrange var socket = new Mock <IWebsocket>(); socket.Setup(s => s.Close()); socket.Setup(s => s.Connect()); socket.Setup(s => s.Url).Returns("test"); socket.Setup(s => s.SetEnabledSslProtocols(It.IsAny <System.Security.Authentication.SslProtocols>())); var factory = new Mock <IWebsocketFactory>(); factory.Setup(s => s.CreateWebsocket(It.IsAny <string>())).Returns(socket.Object); BinanceStreamTrade result = null; var client = new BinanceSocketClient { SocketFactory = factory.Object }; client.SubscribeToTradesStream("test", (test) => result = test); var data = new BinanceStreamTrade() { Event = "TestTradeStream", EventTime = new DateTime(2017, 1, 1), Symbol = "test", AggregatedTradeId = 1000000000000, BuyerIsMaker = true, FirstTradeId = 10000000000000, LastTradeId = 2000000000000, Price = 1.1, Quantity = 2.2, TradeTime = new DateTime(2017, 1, 1) }; // act socket.Raise(r => r.OnMessage += null, new MessagedEventArgs(JsonConvert.SerializeObject(data), false, false, true, new byte[2])); // assert Assert.IsNotNull(result); Assert.IsTrue(Compare.PublicInstancePropertiesEqual(data, result)); }
private void OnTradesUpdate(BinanceStreamTrade data) { //var symbol = AllPrices.SingleOrDefault(a => a.Symbol == data.Symbol); //if (symbol == null) return; // //lock (tradeLock) //{ // var trade = symbol?.AggregateTrades?.SingleOrDefault(t => t.AggregateTradeID == data.AggregatedTradeId); // if (trade == null) // { // Application.Current.Dispatcher.Invoke(() => // { // symbol.AddAggregateTrade(new AggregateTradeViewModel(data)); // }); // } // else // { // // Possibly Update Trade if there is new info // } //} }
/// <summary> /// Method used to receive Order socked /// Todo : Migrate external list from Instance class to Orderflow Stats /// </summary> /// <param name="Trade"></param> private async void OrderSocketHandler(BinanceStreamTrade trade) { try { var startTime = DateTime.UtcNow; Stopwatch counter = new Stopwatch(); counter.Start(); MamaBot.GlobalShared.Vars.OrderChannel.Queue.Enqueue(new Order(trade.OrderId, trade.Price, trade.Quantity, trade.BuyerIsMaker ? OrderDirection.Buy : OrderDirection.Sell, trade.TradeTime)); counter.Stop(); //_logger.LogInformation($"StopWatch Queue routing time (including CMPT call) : {counter.Elapsed}"); Debug.WriteLine((DateTime.UtcNow - startTime).TotalMilliseconds + "ms"); //System.Threading.Thread ComputeThread = new Thread(() => { // if (trade.BuyerIsMaker) // { // Task.Run(() => // { // counter.Start(); // BuyerMatcher.Add(trade); // TT2.AddOrder(new Order(trade.OrderId, trade.Price, trade.Quantity, OrderDirection.Buy, trade.TradeTime)); // var filledBuyerQuantity = BuyerMatcher.SumF(y => y.Quantity); // counter.Stop(); // _logger.LogInformation($"StopWatch Buy Trade : {counter.Elapsed}"); // _logger.LogInformation($"FilledBuyerQuantity : {filledBuyerQuantity}"); // _logger.LogInformation($"FilledBuyerPrice : {trade.Price}"); // }); // } // else // { // Task.Run(() => // { // counter.Start(); // SellerMatcher.Add(trade); // TT2.AddOrder(new Order(trade.OrderId, trade.Price, trade.Quantity, OrderDirection.Sell, trade.TradeTime)); // var filledSellerQuantity = SellerMatcher.SumF(y => y.Quantity); // counter.Stop(); // _logger.LogInformation($"StopWatch Seller Trade : {counter.Elapsed}"); // //_logger.LogInformation($"FilledSellerQuantity : {filledSellerQuantity}"); // //_logger.LogInformation($"FilledSellerPrice : {trade.Price}"); // }); // } //}); //ComputeThread.ApartmentState = ApartmentState.MTA; //ComputeThread.Start(); } catch (Exception ex) { MamaBot.GlobalShared.Vars.Logger.LogError("Exception occured on the OrderSocketHandler : " + ex.Message); } }