Exemple #1
0
        /// <summary>
        /// входящие тики из системы
        /// </summary>
        private void AddTick(OsEngine.Entity.Trade trade)
        {
            try
            {
                BathTradeMarketDepthData(trade);

                // сохраняем
                if (_allTrades == null)
                {
                    _allTrades    = new List <OsEngine.Entity.Trade> [1];
                    _allTrades[0] = new List <OsEngine.Entity.Trade> {
                        trade
                    };
                }
                else
                {
                    // сортируем сделки по хранилищам
                    List <OsEngine.Entity.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)
                        {
                            // если для этого инструметна уже есть хранилище, сохраняем и всё
                            _allTrades[i].Add(trade);
                            myList = _allTrades[i];
                            isSave = true;
                            break;
                        }
                    }

                    if (isSave == false)
                    {
                        // хранилища для инструмента нет
                        List <OsEngine.Entity.Trade>[] allTradesNew = new List <OsEngine.Entity.Trade> [_allTrades.Length + 1];
                        for (int i = 0; i < _allTrades.Length; i++)
                        {
                            allTradesNew[i] = _allTrades[i];
                        }
                        allTradesNew[allTradesNew.Length - 1] = new List <OsEngine.Entity.Trade>();
                        allTradesNew[allTradesNew.Length - 1].Add(trade);
                        myList     = allTradesNew[allTradesNew.Length - 1];
                        _allTrades = allTradesNew;
                    }


                    _tradesToSend.Enqueue(myList);
                }
            }
            catch (Exception error)
            {
                SendLogMessage(error.ToString(), LogMessageType.Error);
            }
        }
Exemple #2
0
// сохранение расширенных данных по трейду

        /// <summary>
        /// прогрузить трейды данными стакана
        /// </summary>
        private void BathTradeMarketDepthData(OsEngine.Entity.Trade trade)
        {
            MarketDepth depth = _marketDepths.Find(d => d.SecurityNameCode == trade.SecurityNameCode);

            if (depth == null ||
                depth.Asks == null || depth.Asks.Count == 0 ||
                depth.Bids == null || depth.Bids.Count == 0)
            {
                return;
            }

            trade.Ask        = depth.Asks[0].Price;
            trade.Bid        = depth.Bids[0].Price;
            trade.BidsVolume = depth.BidSummVolume;
            trade.AsksVolume = depth.AskSummVolume;
        }