/// <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); } } }
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); } }