Добрый день.
Имею историю по стаканам. History.zip
Загружаю историю по стакану из локального хранилища. LKOH.txt По времени всё ок. (06:59:46.253, 06:59:46.643... меняется) QuoteChange,T(L)=2019/01/30 03:59:45.114,T(S)=2019/01/30 06:59:45.114 {{ 10 - 10 }} QuoteChange,T(L)=2019/01/31<u>06:59:46.253</u>,T(S)=2019/01/30 06:59:45.114 {{ 10 - 10 }} QuoteChange,T(L)=2019/01/31 <u>06:59:46.643</u>,T(S)=2019/01/30 06:59:45.114 {{ 10 - 10 }}
Гружу историю через HistoryEmulationConnector (аналогично как в S# Shell) и не могу найти свойство отвечающее за QuoteChange в коннекторе и стратегии.
Отображается неизменяемое 06:59:45
WriteLine(FirstSecurity.Code + " " + Connector.CurrentTime) и WriteLine(SecondSecurity.Code + " " + Connector.MarketDataAdapter.CurrentTime) в ProcessMarketDepth(MarketDepth marketDepth) both.txt
Где находится информация о QuoteChange time в HistoryEmulationConnector или стратегии?
Комментарии (22)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Добрый день.
Дополнительный вопрос. Метод Connector.GetMarketDepth(security) работает некорректно. После него теряется большая часть стакана (в both.txt)
GAZP 01/30/2019 06:59:45 +03:00 : 10 - 10 LKOH 01/30/2019 06:59:45 +03:00 : 1 - 0
GAZP 01/30/2019 06:59:45 +03:00 : 10 - 10 LKOH 01/30/2019 06:59:45 +03:00 : 1 - 0
GAZP 01/30/2019 06:59:45 +03:00 : 10 - 10 LKOH 01/30/2019 06:59:45 +03:00 : 1 - 0
GAZP 01/30/2019 06:59:45 +03:00 : 10 - 10 LKOH 01/30/2019 06:59:45 +03:00 : 1 - 0
GAZP 01/30/2019 06:59:45 +03:00 : 10 - 10 LKOH 01/30/2019 06:59:45 +03:00 : 1 - 0
GAZP 01/30/2019 06:59:45 +03:00 : 10 - 10 LKOH 01/30/2019 06:59:45 +03:00 : 1 - 0
GAZP 01/30/2019 06:59:45 +03:00 : 10 - 10 LKOH 01/30/2019 06:59:45 +03:00 : 1 - 0
GAZP 01/30/2019 06:59:45 +03:00 : 10 - 10 LKOH 01/30/2019 06:59:45 +03:00 : 1 - 0
GAZP 01/30/2019 06:59:45 +03:00 : 10 - 10 LKOH 01/30/2019 06:59:45 +03:00 : 1 - 0
GAZP 01/30/2019 06:59:45 +03:00 : 10 - 10 LKOH 01/30/2019 06:59:45 +03:00 : 1 - 0
GAZP 01/30/2019 06:59:45 +03:00 : 10 - 10 LKOH 01/30/2019 06:59:45 +03:00 : 1 - 0
GAZP 01/30/2019 06:59:45 +03:00 : 10 - 10 LKOH 01/30/2019 06:59:45 +03:00 : 1 - 0
GAZP 01/30/2019 06:59:45 +03:00 : 10 - 10 LKOH 01/30/2019 06:59:45 +03:00 : 1 - 0
GAZP 01/30/2019 06:59:45 +03:00 : 10 - 10 LKOH 01/30/2019 06:59:45 +03:00 : 1 - 0
GAZP 01/30/2019 06:59:45 +03:00 : 10 - 10 LKOH 01/30/2019 06:59:45 +03:00 : 1 - 0
И в основном 0
GAZP 01/30/2019 06:59:45 +03:00 : 0 - 0 LKOH 01/30/2019 06:59:45 +03:00 : 10 - 10
GAZP 01/30/2019 06:59:45 +03:00 : 0 - 0 LKOH 01/30/2019 06:59:45 +03:00 : 10 - 10
GAZP 01/30/2019 06:59:45 +03:00 : 0 - 0 LKOH 01/30/2019 06:59:45 +03:00 : 10 - 10
GAZP 01/30/2019 06:59:45 +03:00 : 0 - 0 LKOH 01/30/2019 06:59:45 +03:00 : 10 - 10
GAZP 01/30/2019 06:59:45 +03:00 : 0 - 0 LKOH 01/30/2019 06:59:45 +03:00 : 10 - 10
GAZP 01/30/2019 06:59:45 +03:00 : 0 - 0 LKOH 01/30/2019 06:59:45 +03:00 : 10 - 10
GAZP 01/30/2019 06:59:45 +03:00 : 0 - 0 LKOH 01/30/2019 06:59:45 +03:00 : 10 - 10
GAZP 01/30/2019 06:59:45 +03:00 : 0 - 0 LKOH 01/30/2019 06:59:45 +03:00 : 10 - 10
GAZP 01/30/2019 06:59:45 +03:00 : 0 - 0 LKOH 01/30/2019 06:59:45 +03:00 : 10 - 10
GAZP 01/30/2019 06:59:45 +03:00 : 0 - 0 LKOH 01/30/2019 06:59:45 +03:00 : 10 - 10
GAZP 01/30/2019 06:59:45 +03:00 : 0 - 0 LKOH 01/30/2019 06:59:45 +03:00 : 10 - 10
GAZP 01/30/2019 06:59:45 +03:00 : 0 - 0 LKOH 01/30/2019 06:59:45 +03:00 : 10 - 10
GAZP 01/30/2019 06:59:45 +03:00 : 0 - 0 LKOH 01/30/2019 06:59:45 +03:00 : 10 - 10
GAZP 01/30/2019 06:59:45 +03:00 : 0 - 0 LKOH 01/30/2019 06:59:45 +03:00 : 10 - 10
GAZP 01/30/2019 06:59:45 +03:00 : 0 - 0 LKOH 01/30/2019 06:59:45 +03:00 : 10 - 10
GAZP 01/30/2019 06:59:45 +03:00 : 0 - 0 LKOH 01/30/2019 06:59:45 +03:00 : 10 - 10
GAZP 01/30/2019 06:59:45 +03:00 : 0 - 0 LKOH 01/30/2019 06:59:45 +03:00 : 10 - 10
Где 10 - 10, 0 - 0, 1 - 0 это Connector.GetMarketDepth(security).Bids.Count() + " - " + Connector.GetMarketDepth(security).Asks.Count()
Хотя по истории LKOH.txt и GAZP.txt таких пробелов нет. GAZP.txt
Код отправил на почту.
Экспериментальным методом определил, что стаканы GAZP и LKOH не приходят одновременно.
FirstSecurity.WhenMarketDepthChanged(Connector) .Do(ProcessFirstMarketDepth) .Apply(this);
Несмотря на то, что оба инструмента 2019/01/31 числа,
все WhenMarketDepthChanged отрабатывают сначала для LKOH, а затем для GAZP.
Причем,
и при FirstSecurity = LKOH, SecondSecurity = GAZP
и при FirstSecurity = GAZP, SecondSecurity = LKOH
Плюс Каждый второй QuoteChange в ProcessMarketDepth равен предыдущему. По этой причине, в LHOH.txt 31599 QuoteChange, но ProcessMarketDepth срабатывает 31599 * 2 = 63198 раз (аналогично и для GAZP). 2 вопрос) Почему дублируется QuoteChange marketDepth?
Добрый день
Могли бы вы разделить ваши вопросы на разные топики и предоставить больше информации в чем именно ваш вопрос?
Добрый день.
Подытожим.
Проблемный код отправил на почту. History.zip, GAZP.txt, LKOH.txt, both.txt - прикреплены к посту.
В первом посте от 04.02.2019 вопрос
Третий пост от 08.02.2019 выложен с двумя целям: 1 - Сказать от том, что второй пост от 07.02.2019 разрешен и отвечать на него не нужно. 2 - В связи с этим, появились новые вопросы: 2) Что нужно сделать с историческим коннектором, чтобы WhenMarketDepthChanged двух инструментов приходили одновременно? 3) Почему дублируется QuoteChange marketDepth?
Итого: Все вопросы связаны со стаканом заявок и возможно они взаимосвязаны, поэтому они находятся в одном посте.
Где находится информация о QuoteChange time (изменяемое время) в HistoryEmulationConnector?
Что нужно сделать с историческим коннектором, чтобы WhenMarketDepthChanged двух инструментов приходили одновременно?
Почему дублируется QuoteChange marketDepth?
Какую дополнительную информацию Вам предоставить?
Имея текущий итог - разделять вопросы на разным топикам?
Метка времени у стакана находится в свойстве https://doc.stocksharp.ru/html/P_StockSharp_BusinessEntities_MarketDepth_LastChangeTime.htm Это то, что вам нужно?
Не совсем. На картинке Capture.PNG я показал по каким свойствам прошел (и то свойство там было), но время осталось неизменным 06:59:45.
Уточню. В файле LKOH.txt как получить вторую колонку? (T(L)=2019/01/31 06:59:46.643) На картинке Capture.PNG перебрал всё и получаю только третью колонку (T(S)=2019/01/30 06:59:45.114)
Время на истории это https://doc.stocksharp.ru/html/P_StockSharp_BusinessEntities_MarketDepth_LastChangeTime.htm Вы же вывели другие свойства, которые не относятся к стакану. Поэтому вопрос заключается в том, что вам нужно получить.
Возможно я ошибаюсь и данное время относится не к стакану, а к коннектору. Мне нужно получить вторую колонку из файла LKOH.txt T(L)=2019/01/31 06:59:46.253 T(L)=2019/01/31 06:59:46.643
В общем получить T(L) - чтобы это не значило.
Файл был сформирован алгоритмом ниже
var storage = storageRegistry.GetQuoteMessageStorage(security); var data = storage.Load(new DateTime(2019, 1, 30), new DateTime(2019, 1, 31)); foreach (var d in data) { Console.WriteLine(d + " {{ " + d.Bids.ToList().Count + " - " + d.Asks.ToList().Count + " }}"); }
Добрый день
Пожалуйста, уточните ваш вопрос. Если он заключается в том, откуда брать время стакана, то это MarketDepth.LastChangeTime или аналог QuotesChangeTime.ServerTime.
Добрый день.
Перефразирую.
Есть код.
SecondSecurity.WhenMarketDepthChanged(Connector) .Do(ProcessSecondMarketDepth) .Apply(this);
private void ProcessSecondMarketDepth(MarketDepth marketDepth)
Как мне внутри метода void ProcessSecondMarketDepth(MarketDepth marketDepth) получить свойство LocalTime от объекта QuoteChangeMessage?
В случае реального подключения это будет MarketDepth.LocalTime.
.
На истории это поле не имеет смысла так как локальное время совпадает с серверным.
FirstSecurity.WhenNewTrade(Connector) .Do(ProcessNewTrade) .Apply(this);
private void ProcessNewTrade(Trade obj)
локальное время будет совпадать с серверным.
Получается, время сделки тоже не доступно и каждая сделка по времени будет = 06:59:45?
Пожалуйста уточните ваш вопрос. Сделки имеют те временные отметки, которые прислала биржа.
Trade.Time
Другими словами.
Как внутри метода void ProcessNewTrade(Trade obj) при историческом коннекторе определить время сделки (сделка пришла в 10:00:00.000 или 11:26:14.101)?
Предоставлен ли ответ здесь https://stocksharp.ru/posts/m/46732/ ?
Добрый день.
К сожалению не совсем.
По отображению исторического времени через ордер лог - вопросов нет, работает идеально. Только я использую не событие
connector.NewOrderLogItem, а MarketRule инструмента ``` FirstSecurity.WhenNewOrderLogItem(Connector)security.WhenNewTrade
,security.WhenMarketDepthChangedConnector.MarketDepthChanged
,Connector.NewTradeТак же ваша информация передана разработчикам, так как тиковые сделки должны приходить в случае формирования свечей.