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


Столкнулся со следующей проблемой. Через 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. Как это можно обойти не заморачиваясь с собственным формированием свечей?

Теги:


Спасибо:


Moadip

Фотография
Дата: 13.08.2012
Ответить


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

_candleManager.Sources.OfType<TimeFrameCandleBuilder>().Single().Timeout
Спасибо:

Memory

Фотография
Дата: 13.08.2012
Ответить


Не помогло [sad]Да и по первому логу видно, там куда больше 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
Candle RIZ2 time 13.08.2012 20:18:00 volume 3 local time 13.08.2012 20:25:07



и вот так
Код

_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
Candle RIZ2 time 13.08.2012 20:44:00 volume 1 local time 13.08.2012 20:47:04
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
Candle RIZ2 time 13.08.2012 20:49:00 volume 3 local time 13.08.2012 20:50:17
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
Candle RIZ2 time 13.08.2012 20:52:00 volume 2 local time 13.08.2012 20:55:09
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

Фотография
Дата: 13.08.2012
Ответить


1. Свеча считается сформированной только тогда, когда пришел первый тик следующей свечи.
2. Таймауты пока еще не работают.

Цитата:
2. Как это можно обойти не заморачиваясь с собственным формированием свечей?

А как вы предлагаете определять, что свеча сформирована полностью?
Спасибо:

Memory

Фотография
Дата: 13.08.2012
Ответить


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

esper

Фотография
Дата: 14.08.2012
Ответить


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


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy