void _client_NewTradesEvent(BinanceEntity.TradeResponse trades) { lock (_newTradesLoker) { if (trades.data == null) { return; } Trade trade = new Trade(); trade.SecurityNameCode = trades.data.s; trade.Price = Convert.ToDecimal( trades.data.p.Replace(".", CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator), CultureInfo.InvariantCulture); trade.Id = trades.data.t.ToString(); trade.Time = new DateTime(1970, 1, 1).AddMilliseconds(Convert.ToDouble(trades.data.T)); trade.Volume = Convert.ToDecimal( trades.data.q.Replace(".", CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator), CultureInfo.InvariantCulture); trade.Side = trades.data.m == true ? Side.Sell : Side.Buy; if (NewTradesEvent != null) { NewTradesEvent(trade); } } }
void _client_NewTradesEvent(BinanceEntity.TradeResponse trades) { lock (_newTradesLoker) { if (trades.data == null) { return; } Trade trade = new Trade(); trade.SecurityNameCode = trades.data.s; trade.Price = trades.data.p.ToDecimal(); trade.Id = trades.data.t.ToString(); trade.Time = new DateTime(1970, 1, 1).AddMilliseconds(Convert.ToDouble(trades.data.T)); trade.Volume = trades.data.q.ToDecimal(); trade.Side = trades.data.m == true ? Side.Sell : Side.Buy; if (NewTradesEvent != null) { NewTradesEvent(trade); } } }
/// <summary> /// пришли новые тики /// </summary> /// <param name="trades"></param> private void NewTrades(TradeResponse trades) { try { lock (_newTradesLoker) { if (trades.data == null) { return; } Trade trade = new Trade(); trade.SecurityNameCode = trades.data.s; trade.Price = Convert.ToDecimal(trades.data.p.Replace(".", CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator), CultureInfo.InvariantCulture); trade.Id = trades.data.t.ToString(); trade.Time = new DateTime(1970, 1, 1).AddMilliseconds(Convert.ToDouble(trades.data.T)); trade.Volume = Convert.ToDecimal(trades.data.q.Replace(".", CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator), CultureInfo.InvariantCulture); trade.Side = trades.data.m == true ? Side.Sell : Side.Buy; // сохраняем if (_allTrades == null) { _allTrades = new List <Trade> [1]; _allTrades[0] = new List <Trade> { trade }; } else { // сортируем сделки по хранилищам List <Trade> myList = null; bool isSave = false; for (int i = 0; i < _allTrades.Length; i++) { if (_allTrades[i] != null && _allTrades[i].Count != 0 && _allTrades[i][0].SecurityNameCode == trade.SecurityNameCode) { // если для этого инструметна уже есть хранилище, сохраняем и всё if (trade.Time < _allTrades[i][_allTrades[i].Count - 1].Time) { return; } _allTrades[i].Add(trade); myList = _allTrades[i]; isSave = true; break; } } if (isSave == false) { // хранилища для инструмента нет List <Trade>[] allTradesNew = new List <Trade> [_allTrades.Length + 1]; for (int i = 0; i < _allTrades.Length; i++) { allTradesNew[i] = _allTrades[i]; } allTradesNew[allTradesNew.Length - 1] = new List <Trade>(); allTradesNew[allTradesNew.Length - 1].Add(trade); myList = allTradesNew[allTradesNew.Length - 1]; _allTrades = allTradesNew; } _tradesToSend.Enqueue(myList); } // перегружаем последним временем тика время сервера ServerTime = trade.Time; } } catch (Exception error) { SendLogMessage(error.ToString(), LogMessageType.Error); } }