Пример #1
0
        /// <summary>
        /// Последние сделки за текущую торговую сессию
        /// </summary>
        /// <param name="today">Дата торговой сессии (без времени)</param>
        /// <param name="instrum">Инструмент</param>
        /// <param name="skip">Сколько сделок пропустить</param>
        /// <returns>Массив сделок для указанного инструмента на текущий момент, если null - ошибка, пустой массив - нет новых сделок</returns>
        public async Task <Tick[]> GetLastTicks(DateTime today, Instrum instrum, int skip)
        {
            var res = await _core.SendMessageAsync(_pipe, Encoding.UTF8.GetBytes("GetLastTicks " + instrum.Ticker + " " + skip.ToString()));

            if (res == null)
            {
                return(null);
            }

            if (res.Length == 1 && res[0] != 0)
            {
                return(null);
            }
            if (res.Length == 1 && res[0] == 0)
            {
                return new Tick[] { }
            }
            ;

            AllTradesEncoding enc = new AllTradesEncoding(instrum.Decimals);

            try
            {
                var list = enc.Decode(res, false);

                return(list.Select(r => new Tick(0, today.Date.AddSeconds(r.Second), instrum.InsID, r.Lots, r.Price)).ToArray());
            }
            catch
            {
                return(null);
            }
        }
    }
Пример #2
0
        public void EncodeDecodeTest_ticks_equalTicks()
        {
            AllTradesEncoding encoding = new AllTradesEncoding(2);

            List <AllTradesTick> ticks = new List <AllTradesTick>();

            ticks.Add(new AllTradesTick()
            {
                Second = 1000, Price = 10000, Lots = 10
            });                                                                         // сразу большая цена
            ticks.Add(new AllTradesTick()
            {
                Second = 1000, Price = 100.01m, Lots = 5
            });
            ticks.Add(new AllTradesTick()
            {
                Second = 1001, Price = 99.01m, Lots = 15
            });
            ticks.Add(new AllTradesTick()
            {
                Second = 1001, Price = 10099.01m, Lots = 15
            });                                                                             // большой скачок цены
            ticks.Add(new AllTradesTick()
            {
                Second = 1002, Price = 99.01m, Lots = 15
            });                                                                          // обратный большой скачок цены
            ticks.Add(new AllTradesTick()
            {
                Second = 1002, Price = 99.01m, Lots = 150000
            });                                                                              // большой лот
            ticks.Add(new AllTradesTick()
            {
                Second = 10000, Price = 99.01m, Lots = 10
            });                                                                           // большой скачок времени
            ticks.Add(new AllTradesTick()
            {
                Second = 10001, Price = 99.01m, Lots = 10
            });

            foreach (var tick in ticks)
            {
                encoding.AddTick(tick.Second, tick.Price, tick.Lots);
            }

            byte[] encoded = encoding.Encode();

            var ticks1 = encoding.Decode(encoded).ToList();

            Assert.Equal(ticks.Count, ticks1.Count);
            for (int i = 0; i < ticks.Count; i++)
            {
                Assert.Equal(ticks[i].Second, ticks1[i].Second);
                Assert.Equal(ticks[i].Price, ticks1[i].Price);
                Assert.Equal(ticks[i].Lots, ticks1[i].Lots);
            }
        }