← Back

Запаздывание формирования свечей

Столкнулся со следующей проблемой. Через QuikTrader тяну TimeFrame свечи на сентябрьский индекс РТС и декабрьский Сбер. Таймфрейм 1 минута. Обнаружил что свечи по декабрьскому контракту формируются с очень большим опозданием.

В обработке свечей вставил следующий код:


        void CandleManager_Processing(CandleSeries Series, Candle Candle)
        {
             Console.WriteLine("Candle " + Candle.Security.Code + " time " + Candle.CloseTime + " volume " + Candle.TotalVolume+" local time "+DateTime.Now);
            if (Candle.State == CandleStates.Finished)
            {
             Console.WriteLine("Candle " + Candle.Security.Code + " time " + Candle.CloseTime + " volume " + Candle.TotalVolume+" local time "+DateTime.Now);
             ...
             ...
             ...
            }
         }

получил следующий результат:


Candle finished RIU2 time 13.08.2012 16:37:00 volume 1258 local time 13.08.2012 16:36:51
Candle finished RIU2 time 13.08.2012 16:38:00 volume 532 local time 13.08.2012 16:37:51
Candle finished RIU2 time 13.08.2012 16:39:00 volume 711 local time 13.08.2012 16:38:51
Candle finished SRZ2 time 13.08.2012 16:37:00 volume 1 local time 13.08.2012 16:39:03
Candle finished RIU2 time 13.08.2012 16:40:00 volume 1006 local time 13.08.2012 16:39:51
Candle finished RIU2 time 13.08.2012 16:41:00 volume 761 local time 13.08.2012 16:40:52
Candle finished RIU2 time 13.08.2012 16:42:00 volume 1170 local time 13.08.2012 16:41:51
Candle finished RIU2 time 13.08.2012 16:43:00 volume 886 local time 13.08.2012 16:42:51
Candle finished RIU2 time 13.08.2012 16:44:00 volume 425 local time 13.08.2012 16:43:51
Candle finished RIU2 time 13.08.2012 16:45:00 volume 583 local time 13.08.2012 16:44:51
Candle finished RIU2 time 13.08.2012 16:46:00 volume 929 local time 13.08.2012 16:45:51
Candle finished RIU2 time 13.08.2012 16:47:00 volume 1036 local time 13.08.2012 16:46:51
Candle finished RIU2 time 13.08.2012 16:48:00 volume 299 local time 13.08.2012 16:47:51
Candle finished RIU2 time 13.08.2012 16:49:00 volume 623 local time 13.08.2012 16:48:53
Candle finished RIU2 time 13.08.2012 16:50:00 volume 1249 local time 13.08.2012 16:49:51
Candle finished RIU2 time 13.08.2012 16:51:00 volume 735 local time 13.08.2012 16:50:51
Candle finished RIU2 time 13.08.2012 16:52:00 volume 368 local time 13.08.2012 16:51:51
Candle finished SRZ2 time 13.08.2012 16:40:00 volume 2 local time 13.08.2012 16:52:22
Candle finished RIU2 time 13.08.2012 16:53:00 volume 2071 local time 13.08.2012 16:52:51
Candle finished RIU2 time 13.08.2012 16:54:00 volume 3207 local time 13.08.2012 16:53:51
Candle finished SRZ2 time 13.08.2012 16:53:00 volume 3 local time 13.08.2012 16:53:52
Candle finished RIU2 time 13.08.2012 16:55:00 volume 3175 local time 13.08.2012 16:54:51
Candle finished RIU2 time 13.08.2012 16:56:00 volume 1876 local time 13.08.2012 16:55:51
Candle finished RIU2 time 13.08.2012 16:57:00 volume 844 local time 13.08.2012 16:56:51
Candle finished SRZ2 time 13.08.2012 16:55:00 volume 4 local time 13.08.2012 16:57:03
Candle finished RIU2 time 13.08.2012 16:58:00 volume 2532 local time 13.08.2012 16:57:51
Candle finished RIU2 time 13.08.2012 16:59:00 volume 2011 local time 13.08.2012 16:58:51
Candle finished RIU2 time 13.08.2012 17:00:00 volume 1555 local time 13.08.2012 16:59:51

Сильно похоже на то, что свечя финишируется не по завершению временного интервала а по приходу новой сделки, лежащей за пределами таймфрейма свечи. Вопроса собственно 2:

  1. Такой алгоритм формирования сечи общий для всех провайдеров?
  2. Как это можно обойти не заморачиваясь с собственным формированием свечей?

Comments (5)

Login or Create account, Log in or register to leave a comment

Moadip
Moadip

Попробуйте изменить TimeOut у TimeFrameCandleBuilder


_candleManager.Sources.OfType<TimeFrameCandleBuilder>().Single().Timeout

Memory
Memory Author

Не помогло 😢Да и по первому логу видно, там куда больше 10%

Вот так пробовал


_CandleManager.Sources.OfType<TimeFrameCandleBuilder>().Single().Timeout = 1;

результат

Candle RIU2 time 13.08.2012 20:17:00 volume 1534 local time 13.08.2012 20:17:08 Candle RIZ2 time 13.08.2012 20:17:00 volume 1 local time 13.08.2012 20:17:08 Candle RIU2 time 13.08.2012 20:18:00 volume 410 local time 13.08.2012 20:17:51 Candle RIU2 time 13.08.2012 20:19:00 volume 99 local time 13.08.2012 20:18:51 Candle RIU2 time 13.08.2012 20:20:00 volume 465 local time 13.08.2012 20:19:54 Candle RIU2 time 13.08.2012 20:21:00 volume 663 local time 13.08.2012 20:20:51 Candle RIU2 time 13.08.2012 20:22:00 volume 386 local time 13.08.2012 20:21:51 Candle RIU2 time 13.08.2012 20:23:00 volume 222 local time 13.08.2012 20:22:51 Candle RIU2 time 13.08.2012 20:24:00 volume 389 local time 13.08.2012 20:23:52 Candle RIU2 time 13.08.2012 20:25:00 volume 525 local time 13.08.2012 20:24:51 <mark>Candle RIZ2 time 13.08.2012 20:18:00 volume 3 local time 13.08.2012 20:25:07</mark>

и вот так


_CandleManager.Sources.OfType<TimeFrameCandleBuilder>().Single().Timeout.Value=1;

Candle RIU2 time 13.08.2012 20:44:00 volume 484 local time 13.08.2012 20:43:55 Candle RIU2 time 13.08.2012 20:45:00 volume 147 local time 13.08.2012 20:44:51 Candle RIU2 time 13.08.2012 20:46:00 volume 264 local time 13.08.2012 20:45:52 Candle RIU2 time 13.08.2012 20:47:00 volume 242 local time 13.08.2012 20:46:55 <mark>Candle RIZ2 time 13.08.2012 20:44:00 volume 1 local time 13.08.2012 20:47:04</mark> Candle RIU2 time 13.08.2012 20:48:00 volume 150 local time 13.08.2012 20:47:58 Candle RIZ2 time 13.08.2012 20:48:00 volume 1 local time 13.08.2012 20:48:09 Candle RIU2 time 13.08.2012 20:49:00 volume 1057 local time 13.08.2012 20:48:51 Candle RIU2 time 13.08.2012 20:50:00 volume 503 local time 13.08.2012 20:49:53 <mark>Candle RIZ2 time 13.08.2012 20:49:00 volume 3 local time 13.08.2012 20:50:17</mark> Candle RIU2 time 13.08.2012 20:51:00 volume 2188 local time 13.08.2012 20:50:51 Candle RIZ2 time 13.08.2012 20:51:00 volume 3 local time 13.08.2012 20:51:32 Candle RIU2 time 13.08.2012 20:52:00 volume 1402 local time 13.08.2012 20:51:51 Candle RIU2 time 13.08.2012 20:53:00 volume 1342 local time 13.08.2012 20:52:51 Candle RIU2 time 13.08.2012 20:54:00 volume 1222 local time 13.08.2012 20:53:52 Candle RIU2 time 13.08.2012 20:55:00 volume 460 local time 13.08.2012 20:54:51 <mark>Candle RIZ2 time 13.08.2012 20:52:00 volume 2 local time 13.08.2012 20:55:09</mark> Candle RIU2 time 13.08.2012 20:56:00 volume 1886 local time 13.08.2012 20:55:52 Candle RIU2 time 13.08.2012 20:57:00 volume 621 local time 13.08.2012 20:56:52

Пытался сделать вот так:


_CandleManager.Sources.OfType<TimeFrameCandleBuilder>().Single().Timeout = new Unit(1,UnitTypes.Percent);

словил исключение - Проценты нельзя сравнивать с не процентами 1% и 0.

StackTrace at StockSharp.BusinessEntities.Unit.op_GreaterThan(Unit u1, Unit u2) at StockSharp.BusinessEntities.Unit.op_LessThan(Unit u1, Unit u2) at StockSharp.Algo.Candles.Compression.TimeFrameCandleBuilder.set_Timeout(Unit value) at ArbirageStat.Form1.OnStartButton(Object sender, EventArgs e)

esper
esper
  1. Свеча считается сформированной только тогда, когда пришел первый тик следующей свечи.
  2. Таймауты пока еще не работают.
  1. Как это можно обойти не заморачиваясь с собственным формированием свечей? А как вы предлагаете определять, что свеча сформирована полностью?
Memory
Memory Author

Я уже думал об этом. Знал бы однозначно правильный ответ - конечно бы подсказал. Первое что приходит в голову, финалить свечу по изменению времени в трейдере. Но, понятно что информация о сделках могут появится и позже. Для себя я скорее всего так и сделаю. Возможно буду смотреть на время сделки в парной бумаге. Или через таймаут. Я там еще спрашивал на предмет одинаковости алгоритмов для других провайдеров. SmartCom основные свечные интервалы сам формирует. Это как-то учитывается или тоже свеча финалится по приходу первой сделки за пределами таймфрейма?

esper
esper

Алгоритм формирования свечей не зависит от шлюза.

Memory