Тиковая история - страница 24

 
juriy5555:

Судя по запросам тикового индикатора, данные поля time_msk  кратны 1000.  т.е. ни о каких миллисекундах речи не идёт, разрешение осталось 1 секунда.

 Вопрос: какой тогда был смысл в расширении структуры MqlTick?  

 

А Вы к какому торговому серверу подключились?
 
У меня есть Демо на Опенброкер и реал счет там же. На реале все Access сервера дают одинаковый результат. ну и на демо тоже самое.   Смотрел на Si-6.16, RTS-6.16, SBRF-6.16. Все изменения кратны 1000.  
У Вас не так?
 
juriy5555:
У меня есть Демо на Опенброкер и реал счет там же. На реале все Access сервера дают одинаковый результат. ну и на демо тоже самое.   Смотрел на Si-6.16, RTS-6.16, SBRF-6.16. Все изменения кратны 1000.  
У Вас не так?

Сейчас действительно по запросу SymbolInfoTick в возвращаемой структуре MqlTick отдаются нули вместо реальных миллисекунд (кратно 1000)

Подождите, пожалуйста, следующий билд.

PS по запросу CopyTicks миллисекунды отдаются как есть

 

Этот индикатор я скачал с данной ветки для теста. Он получает 30 последних тиков именно через CopyTicks.  Как вариант, возможно мне следует пробовать на другом сервере (не опенброкер).

 >>"отдаются нули вместо реальных миллисекунд"

Отдаются не нули, но всегда одинаковые числа с разностью кратной 1000.   (...2064, ...2064, ...3064, ..., ..., ..4064 )

Файлы:
 
juriy5555:

Этот индикатор я скачал с данной ветки для теста. Он получает 30 последних тиков именно через CopyTicks.  Как вариант, возможно мне следует пробовать на другом сервере (не опенброкер).

 >>"отдаются нули вместо реальных миллисекунд"

Отдаются не нули, но всегда одинаковые числа с разностью кратной 1000.   (...2064, ...2064, ...3064, ..., ..., ..4064 )

Нули отдаются функцией SymbolInfoTick.

В CopyTicks отдаются реальные миллисекунды. Если это 2064, 3064, 4064, то значит так и было. Почему так было, я не знаю

Посмотрел Ваш код. Что за спецификатор вывода %-4d? time_msc - это long поэтому просто d не идёт. Должно быть %I64d

 
Slawa:

Нули отдаются функцией SymbolInfoTick.

В CopyTicks отдаются реальные миллисекунды. Если это 2064, 3064, 4064, то значит так и было. Почему так было, я не знаю

Посмотрел Ваш код. Что за спецификатор вывода %-4d? time_msc - это long поэтому просто d не идёт. Должно быть %I64d

Да, извините. Код не мой. У автора действительно косяк в StringFormat.   Вывел в каждой итерации цикла через Print (tick.time_msc) .   Результат все нули в конце, в итоге миллисекунд всё таки нет. Запрос CopyTicks идёт постоянно. 

Файлы:
99999.jpg  332 kb
 
Slawa:

Нули отдаются функцией SymbolInfoTick.

В CopyTicks отдаются реальные миллисекунды. Если это 2064, 3064, 4064, то значит так и было. Почему так было, я не знаю

Посмотрел Ваш код. Что за спецификатор вывода %-4d? time_msc - это long поэтому просто d не идёт. Должно быть %I64d

Изменил индикатор из первого поста - нечего баловаться со всякими StringFormat, теперь будет так:

string tick_string=IntegerToString(i,2,'0')+"  "+TimeToString(tick.time,TIME_MINUTES|TIME_SECONDS)+"  "+
                            DoubleToString(tick.bid,Digits())+"  "+DoubleToString(tick.ask,Digits())+"  "+
                            DoubleToString(tick.last,Digits())+"  "+IntegerToString(tick.volume,7,'0')+"  "+
                            IntegerToString(tick.time_msc,19,'0')+"  "+IntegerToString(tick.flags,2,'0');
 
juriy5555:

Да, извините. Код не мой. У автора действительно косяк в StringFormat.   Вывел в каждой итерации цикла через Print (tick.time_msc) .   Результат все нули в конце, в итоге миллисекунд всё таки нет. Запрос CopyTicks идёт постоянно. 

Вот Ваш индикатор на данных MetaQuotes Demo


Задайте вопрос Вашему брокеру про отсутствие миллисекунд в тиках

 
Slawa:

Вот Ваш индикатор на данных MetaQuotes Demo


Задайте вопрос Вашему брокеру про отсутствие миллисекунд в тиках

Пока не знаю, что и у кому конкретно писать, я в этом несколько месяцев.  Буду надеяться, что  ОпенБрокер всё таки обновит сервер. 
ps мой билд клиента 1340
 

juriy5555:
Пока не знаю, что и у кому конкретно писать, я в этом несколько месяцев.  Буду надеяться, что  ОпенБрокер всё таки обновит сервер. 
ps мой билд клиента 1340

Вот у меня тоже вопрос, правда немного другого плана и мне тоже интересно, корректна ли информация, передаваемая из тиков.

Вопрос по реальным объемам.

Если запрашивать информацию по тикам из индикатора, то туда попадает реальный объем в массив volume[]. И, по идее, если получать информацию из тиков, то объем, накопленный за свечу, должен совпадать со значением из массива volume[].

Привожу пример тестового кода:

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--- Получение данных по тику
   MqlTick tick;                                              // Структура хранения инфо по тику
   SymbolInfoTick( _Symbol,tick );                            // Получение данных по тику
   Print("ask: "+DoubleToString(tick.ask,_Digits)+", bid: "+DoubleToString(tick.bid,_Digits)+", last: "+DoubleToString(tick.last,_Digits)+
         ", vol: ",tick.volume,", flags: ",tick.flags);
//--- Формирование объема
   static ulong sVol;                                         // Суммарный объем из тиков на свече
   if(prev_calculated<=0)                                     // Если первый запуск
      sVol=tick.volume;                                       // Запоминаем значение тика
   else
     {
      if(rates_total>prev_calculated) // Если образовалась новая свеча
        {
         sVol=tick.volume;                                    // Запоминаем значение объема первого тика
        }
      else                                                    // Если новая свеча не образовалась
         sVol+=tick.volume;                                   // Суммируем объем тика с накопленным объемом
     }
   Print("Реальный объем: ",volume[rates_total-1],", накопленный объем: ",sVol);
//--- 
   return(rates_total);
  }
//+------------------------------------------------------------------+

Пока не будем привязываться к флагам, и предположим, что каждый полученный тик меняет суммарный объем sVol (хотя, насколько я знаю, это не так).

Дожидаемся формирования новой свечи и смотрим, записи в журнале. Брокер Открытие, реальный счет, билд 1340, RTS-6.16:

2016.06.09 17:07:01.820 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 1, накопленный объем: 1
2016.06.09 17:07:03.142 test_ticks_openbroker (RTS-6.16,M1)     ask: 94670, bid: 94660, last: 94670, vol: 3, flags: 24
2016.06.09 17:07:03.142 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 1, накопленный объем: 4
2016.06.09 17:07:03.142 test_ticks_openbroker (RTS-6.16,M1)     ask: 94670, bid: 94660, last: 94670, vol: 3, flags: 24
2016.06.09 17:07:03.142 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 5, накопленный объем: 7
2016.06.09 17:07:03.142 test_ticks_openbroker (RTS-6.16,M1)     ask: 94670, bid: 94660, last: 94670, vol: 3, flags: 24
2016.06.09 17:07:03.142 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 7, накопленный объем: 10
2016.06.09 17:07:03.142 test_ticks_openbroker (RTS-6.16,M1)     ask: 94670, bid: 94660, last: 94670, vol: 3, flags: 24
2016.06.09 17:07:03.142 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 8, накопленный объем: 13
2016.06.09 17:07:03.142 test_ticks_openbroker (RTS-6.16,M1)     ask: 94670, bid: 94660, last: 94670, vol: 3, flags: 24
2016.06.09 17:07:03.142 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 11, накопленный объем: 16
2016.06.09 17:07:03.266 test_ticks_openbroker (RTS-6.16,M1)     ask: 94670, bid: 94660, last: 94670, vol: 1, flags: 0
2016.06.09 17:07:03.266 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 16, накопленный объем: 17
2016.06.09 17:07:03.266 test_ticks_openbroker (RTS-6.16,M1)     ask: 94670, bid: 94660, last: 94670, vol: 1, flags: 0
2016.06.09 17:07:03.266 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 18, накопленный объем: 18
2016.06.09 17:07:03.266 test_ticks_openbroker (RTS-6.16,M1)     ask: 94670, bid: 94660, last: 94670, vol: 1, flags: 0
2016.06.09 17:07:03.266 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 19, накопленный объем: 19
2016.06.09 17:07:03.700 test_ticks_openbroker (RTS-6.16,M1)     ask: 94670, bid: 94660, last: 94660, vol: 1, flags: 24
2016.06.09 17:07:03.700 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 20, накопленный объем: 20
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94660, last: 94680, vol: 1, flags: 0
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 22, накопленный объем: 21
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94660, last: 94680, vol: 1, flags: 0
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 27, накопленный объем: 22
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94660, last: 94680, vol: 1, flags: 0
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 28, накопленный объем: 23
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94660, last: 94680, vol: 1, flags: 0
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 29, накопленный объем: 24
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94660, last: 94680, vol: 1, flags: 0
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 31, накопленный объем: 25
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94660, last: 94680, vol: 1, flags: 0
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 33, накопленный объем: 26
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94660, last: 94680, vol: 1, flags: 0
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 38, накопленный объем: 27
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94660, last: 94680, vol: 1, flags: 0
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 43, накопленный объем: 28
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94660, last: 94680, vol: 1, flags: 0
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 45, накопленный объем: 29
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94660, last: 94680, vol: 1, flags: 0
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 47, накопленный объем: 30
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94660, last: 94680, vol: 1, flags: 0
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 49, накопленный объем: 31
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94660, last: 94680, vol: 1, flags: 0
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 51, накопленный объем: 32
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94660, last: 94680, vol: 1, flags: 0
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 56, накопленный объем: 33
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94660, last: 94680, vol: 1, flags: 0
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 59, накопленный объем: 34
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94660, last: 94680, vol: 1, flags: 0
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 60, накопленный объем: 35
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94660, last: 94680, vol: 1, flags: 0
2016.06.09 17:07:04.319 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 60, накопленный объем: 36
2016.06.09 17:07:04.347 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94670, last: 94670, vol: 1, flags: 0
2016.06.09 17:07:04.347 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 61, накопленный объем: 37
2016.06.09 17:07:04.347 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94670, last: 94670, vol: 1, flags: 0
2016.06.09 17:07:04.347 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 61, накопленный объем: 38
2016.06.09 17:07:05.344 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94670, last: 94680, vol: 1, flags: 0
2016.06.09 17:07:05.344 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 63, накопленный объем: 39
2016.06.09 17:07:05.344 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94670, last: 94680, vol: 1, flags: 0
2016.06.09 17:07:05.344 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 64, накопленный объем: 40
2016.06.09 17:07:05.460 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94670, last: 94670, vol: 1, flags: 24
2016.06.09 17:07:05.460 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 65, накопленный объем: 41
2016.06.09 17:07:05.516 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94670, last: 94670, vol: 1, flags: 24
2016.06.09 17:07:05.516 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 68, накопленный объем: 42
2016.06.09 17:07:05.516 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94670, last: 94670, vol: 1, flags: 24
2016.06.09 17:07:05.516 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 69, накопленный объем: 43
2016.06.09 17:07:06.016 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94670, last: 94670, vol: 1, flags: 24
2016.06.09 17:07:06.016 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 70, накопленный объем: 44
2016.06.09 17:07:06.557 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94670, last: 94670, vol: 1, flags: 0
2016.06.09 17:07:06.557 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 71, накопленный объем: 45
2016.06.09 17:07:06.702 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94660, last: 94670, vol: 2, flags: 2
2016.06.09 17:07:06.702 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 73, накопленный объем: 47
2016.06.09 17:07:06.702 test_ticks_openbroker (RTS-6.16,M1)     ask: 94680, bid: 94660, last: 94670, vol: 2, flags: 2
2016.06.09 17:07:06.702 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 73, накопленный объем: 49
2016.06.09 17:07:06.718 test_ticks_openbroker (RTS-6.16,M1)     ask: 94670, bid: 94660, last: 94670, vol: 2, flags: 0
2016.06.09 17:07:06.718 test_ticks_openbroker (RTS-6.16,M1)     Реальный объем: 74, накопленный объем: 51

И т.д., реальный объем из индикатора будет гораздо больше, чем накопленный. В связи с чем возникает несколько вопросов к разработчикам:

1. Должен ли совпадать объем, получаемый из массива volume[] функции OnCalculate() с накопленным объемом, полученным из тиков? Мое мнение, конечно, должен, иначе зачем указывать его в тиках?

2. Корректно ли для накопления объема использовать функцию OnCalculate() или лучше получать объем через OnBookEvent()? В справке написано:

Событие Calculate генерируется только для индикаторов сразу после посылки события Init и при любом изменении ценовых данных. Обрабатывается функцией OnCalculate. 

так что, по идее, корректно, но хотелось бы услышать комментарий по этому поводу. 

3. Результаты теста приведены БЕЗ анализа флагов. Если анализировать флаги, то, насколько я понимаю, нужно брать объемы из тиков с флагами 24 (одновременное изменение ласта и объема):

  • TICK_FLAG_LAST – тик изменил цену последней сделки
  • TICK_FLAG_VOLUME – тик изменил объем 

Но в таком случае накопленный объем будет еще меньше. Хотелось бы услышать комментарии разработчиков о том, как сейчас правильно анализировать тики (раз записываются все поля) и правильно ли реализованы флаги? Вопрос по правильности реализации возник потому, что не заметил тиков с флагами:

  • TICK_FLAG_BUY – тик возник в результате сделки на покупку
  • TICK_FLAG_SELL – тик возник в результате сделки на продажу 

Какой номер у этих флагов?

Файл индикатора также в приложении.

Файлы:
Причина обращения: