Работа со стаканом заявок

Работа со стаканом заявок
Atom
2/4/2019
Дмитрий_


Добрый день.

Имею историю по стаканам. 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/3106:59:46.253,T(S)=2019/01/30 06:59:45.114 {{ 10 - 10 }} QuoteChange,T(L)=2019/01/31 06:59:46.643,T(S)=2019/01/30 06:59:45.114 {{ 10 - 10 }}

Гружу историю через HistoryEmulationConnector (аналогично как в S# Shell) и не могу найти свойство отвечающее за QuoteChange в коннекторе и стратегии. Capture.PNG Отображается неизменяемое 06:59:45

WriteLine(FirstSecurity.Code + " " + Connector.CurrentTime) и WriteLine(SecondSecurity.Code + " " + Connector.MarketDataAdapter.CurrentTime) в ProcessMarketDepth(MarketDepth marketDepth) both.txt

Где находится информация о QuoteChange time в HistoryEmulationConnector или стратегии?

History.zip 1 MB (947) LKOH.txt 2 MB (1075) Capture.PNG 36 KB (1354) both.txt 15 MB (804)

Tags:


Thanks:


1 2 3  >
Дмитрий_

Avatar
Date: 2/7/2019
Reply


Добрый день.

Дополнительный вопрос. Метод 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.txt 5 MB (868)
Thanks:

Дмитрий_

Avatar
Date: 2/8/2019
Reply


Экспериментальным методом определил, что стаканы GAZP и LKOH не приходят одновременно.

FirstSecurity.WhenMarketDepthChanged(Connector) .Do(ProcessFirstMarketDepth) .Apply(this);
        SecondSecurity.WhenMarketDepthChanged(Connector)
            .Do(ProcessSecondMarketDepth)
            .Apply(this);

Несмотря на то, что оба инструмента 2019/01/31 числа, Capture1.PNGCapture.PNG все WhenMarketDepthChanged отрабатывают сначала для LKOH, а затем для GAZP. Причем, и при FirstSecurity = LKOH, SecondSecurity = GAZP и при FirstSecurity = GAZP, SecondSecurity = LKOH

  • первый всегда LKOH. 1 вопрос) Что нужно сделать с коннектором, чтобы WhenMarketDepthChanged двух инструментов приходили одновременно?

Плюс Каждый второй QuoteChange в ProcessMarketDepth равен предыдущему. По этой причине, в LHOH.txt 31599 QuoteChange, но ProcessMarketDepth срабатывает 31599 * 2 = 63198 раз (аналогично и для GAZP). 2 вопрос) Почему дублируется QuoteChange marketDepth?

Capture1.PNG 84 KB (1059) Capture.PNG 85 KB (1060)
Thanks:

Support

Avatar
Date: 2/11/2019
Reply


Добрый день

Могли бы вы разделить ваши вопросы на разные топики и предоставить больше информации в чем именно ваш вопрос?

Thanks:

Дмитрий_

Avatar
Date: 2/11/2019
Reply


Support: Добрый день

Могли бы вы разделить ваши вопросы на разные топики и предоставить больше информации в чем именно ваш вопрос?

Добрый день.

Подытожим.

Проблемный код отправил на почту. History.zip, GAZP.txt, LKOH.txt, both.txt - прикреплены к посту.

В первом посте от 04.02.2019 вопрос

  1. Где находится информация о QuoteChange time (изменяемое время) в HistoryEmulationConnector?

Третий пост от 08.02.2019 выложен с двумя целям: 1 - Сказать от том, что второй пост от 07.02.2019 разрешен и отвечать на него не нужно. 2 - В связи с этим, появились новые вопросы: 2) Что нужно сделать с историческим коннектором, чтобы WhenMarketDepthChanged двух инструментов приходили одновременно? 3) Почему дублируется QuoteChange marketDepth?

Итого: Все вопросы связаны со стаканом заявок и возможно они взаимосвязаны, поэтому они находятся в одном посте.

  1. Где находится информация о QuoteChange time (изменяемое время) в HistoryEmulationConnector?

  2. Что нужно сделать с историческим коннектором, чтобы WhenMarketDepthChanged двух инструментов приходили одновременно?

  3. Почему дублируется QuoteChange marketDepth?

  4. Какую дополнительную информацию Вам предоставить?

  5. Имея текущий итог - разделять вопросы на разным топикам?

Thanks:

Support

Avatar
Date: 2/11/2019
Reply


Метка времени у стакана находится в свойстве https://doc.stocksharp.ru/html/P_StockSharp_BusinessEntities_MarketDepth_LastChangeTime.htm Это то, что вам нужно?

Thanks:

Дмитрий_

Avatar
Date: 2/11/2019
Reply


Support: Метка времени у стакана находится в свойстве 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)

Thanks:

Support

Avatar
Date: 2/11/2019
Reply


Время на истории это https://doc.stocksharp.ru/html/P_StockSharp_BusinessEntities_MarketDepth_LastChangeTime.htm Вы же вывели другие свойства, которые не относятся к стакану. Поэтому вопрос заключается в том, что вам нужно получить.

Thanks:

Дмитрий_

Avatar
Date: 2/11/2019
Reply


Support: Время на истории это 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 + " }}"); }
Thanks:

Support

Avatar
Date: 2/12/2019
Reply


Добрый день

Пожалуйста, уточните ваш вопрос. Если он заключается в том, откуда брать время стакана, то это MarketDepth.LastChangeTime или аналог QuotesChangeTime.ServerTime.

Thanks:

Дмитрий_

Avatar
Date: 2/12/2019
Reply


Support: Добрый день

Пожалуйста, уточните ваш вопрос. Если он заключается в том, откуда брать время стакана, то это MarketDepth.LastChangeTime или аналог QuotesChangeTime.ServerTime.

Добрый день.

Перефразирую.

Есть код.

SecondSecurity.WhenMarketDepthChanged(Connector) .Do(ProcessSecondMarketDepth) .Apply(this);

private void ProcessSecondMarketDepth(MarketDepth marketDepth)

Как мне внутри метода void ProcessSecondMarketDepth(MarketDepth marketDepth) получить свойство LocalTime от объекта QuoteChangeMessage? Снимок.PNG

Снимок.PNG 27 KB (1036)
Thanks:
1 2 3  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy