Добрый день.
Имею историю по стаканам. 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 или стратегии?
Comentários (22)
Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário
Добрый день.
Дополнительный вопрос. Метод 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Так же ваша информация передана разработчикам, так как тиковые сделки должны приходить в случае формирования свечей.