Пример #1
0
        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);
                }
            }
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
        /// <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);
            }
        }