private void OnAccountUpdate(BinanceStreamAccountInfo data) { Assets = new ObservableCollection <AssetViewModel>(data.Balances.Where(b => b.Free != 0 || b.Locked != 0).Select(b => new AssetViewModel() { Asset = b.Asset, Free = b.Free, Locked = b.Locked }).ToList()); }
private void OnAccountUpdate(BinanceStreamAccountInfo data) { Assets = new ObservableCollection <AssetViewModel>(data.Balances.Where(b => b.Free != 0 || b.Locked != 0).Select(b => new AssetViewModel() { Asset = b.Asset, Free = b.Free, Locked = b.Locked }).ToList()); // Update Ledger foreach (var balance in data.Balances) { var ledge = Ledger.Where(l => balance.Asset == l.Asset).FirstOrDefault(); // Only worth tracking if we have a balance to monitor if (balance.Free != 0 || balance.Locked != 0) { if (ledge == null) { Ledger.Add(new LedgerAssetViewModel() { Asset = balance.Asset, Amount = balance.Total }); } else { ledge.Amount = balance.Total; } } else if (ledge != null) { Ledger.Remove(ledge); // needs to be dispatched } } //GetLedgerTrades(); }
private void InitializeBinanceAccountInfo() { var res = m_client.General.GetAccountInfo(); Console.Write("--- Initializing BINANCE AccountInfo "); int count = 0; if (res.Success) { m_account = Convert(res.Data); /*foreach (var b in res.Data.Balances) * { * //Console.WriteLine("BINANCE AccountInfo {0} free:{1} lock:{2} total:{3}", b.Asset, b.Free, b.Locked, b.Total); * if (count++ % 10 == 0) Console.Write("."); * // Put Balance data into m_balances * //var xbal = new XBalance(b.Asset, b.Free, b.Locked, b.Total); * m_balance[b.Asset] = b; * } * Console.WriteLine(" ({0})", res.Data.Balances.Count);*/ } else { Console.WriteLine("ERROR {0}: {1}", res.Error.Code, res.Error.Message); } }
public void SubscribingToAccountUpdateStream_Should_TriggerWhenAccountUpdateStreamMessageIsReceived() { // 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); BinanceStreamAccountInfo result = null; var client = new BinanceSocketClient { SocketFactory = factory.Object }; client.SubscribeToAccountUpdateStream("test", (test) => result = test); var data = new BinanceStreamAccountInfo() { Event = "outboundAccountInfo", EventTime = new DateTime(2017, 1, 1), BuyerCommission = 1.1, CanDeposit = true, CanTrade = true, CanWithdraw = false, MakerCommission = 2.2, SellerCommission = 3.3, TakerCommission = 4.4, Balances = new List <BinanceStreamBalance>() { new BinanceStreamBalance() { Asset = "test1", Free = 1.1, Locked = 2.2 }, new BinanceStreamBalance() { Asset = "test2", Free = 3.3, Locked = 4.4 }, } }; // 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, "Balances")); Assert.IsTrue(Compare.PublicInstancePropertiesEqual(data.Balances[0], result.Balances[0])); Assert.IsTrue(Compare.PublicInstancePropertiesEqual(data.Balances[1], result.Balances[1])); }
private void OnAccountUpdate(BinanceStreamAccountInfo data) { _logger.LogInfoMessage("OnAccountUpdate: Trying to process buy/sell new opportunities.."); //_logger.LogInfoMessage(JsonConvert.SerializeObject(data)); //process buy as soon as you know any account updates.. if (data != null && data.Balances.Count > 0) { var baseAsset = binanceHelper.GetBaseCurrencySymbol(); var baseBalance = data.Balances.Where(b => b.Asset == baseAsset).FirstOrDefault()?.Free ?? 0; if (binanceHelper.CanUserBuy(baseBalance)) { //ProcessBuy(client, socketClient, tokenSource.Token); } } }
private BinanceStreamAccountInfo Convert(BinanceAccountInfo ai) { var bai = new BinanceStreamAccountInfo(); bai.Balances = Convert(ai.Balances); bai.BuyerCommission = ai.BuyerCommission; bai.CanDeposit = ai.CanDeposit; bai.CanTrade = ai.CanTrade; bai.CanWithdraw = ai.CanWithdraw; bai.MakerCommission = ai.MakerCommission; bai.SellerCommission = ai.SellerCommission; bai.TakerCommission = ai.TakerCommission; bai.EventTime = ai.UpdateTime; //bai.Event = return(bai); }
public void SubscribingToUserStream_Should_TriggerWhenAccountUpdateStreamMessageIsReceived() { // arrange var socket = new TestSocket(); var client = TestHelpers.CreateSocketClient(socket); BinanceStreamAccountInfo result = null; client.Spot.SubscribeToUserDataUpdates("test", (test) => result = test, null, null, null, null); var data = new BinanceStreamAccountInfo() { Event = "outboundAccountInfo", EventTime = new DateTime(2017, 1, 1), BuyerCommission = 1.1m, CanDeposit = true, CanTrade = true, CanWithdraw = false, MakerCommission = 2.2m, SellerCommission = 3.3m, TakerCommission = 4.4m, Balances = new List <BinanceStreamBalance>() { new BinanceStreamBalance() { Asset = "test1", Free = 1.1m, Locked = 2.2m }, new BinanceStreamBalance() { Asset = "test2", Free = 3.3m, Locked = 4.4m }, } }; // act socket.InvokeMessage(data); // assert Assert.IsNotNull(result); var expectedBalances = data.Balances.ToList(); var balances = result.Balances.ToList(); Assert.IsTrue(TestHelpers.AreEqual(data, result, "Balances", "Permissions")); Assert.IsTrue(TestHelpers.AreEqual(expectedBalances[0], balances[0])); Assert.IsTrue(TestHelpers.AreEqual(expectedBalances[1], balances[1])); }
private void UpdateAccount(BinanceStreamAccountInfo accountInfo) { foreach (var b in accountInfo.Balances) { var xbal = new XBalance(b.Asset, b.Free, b.Locked, b.Total); if (m_balance.ContainsKey(b.Asset)) { if (IsUpdated(b)) { m_balance[b.Asset] = xbal; // balance is updated } } else { m_balance[b.Asset] = xbal; // balance is added } } m_account = accountInfo; }