Новая версия платформы MetaTrader 5 build 2615: Фундаментальный анализ и комплексный критерий в тестере стратегий - страница 24

 
После удаления кастомного символа остаются пустые папки (с названием символа) в Bases\Custom. Наверное, эти пустые папки должны тоже удаляться.
 


Билд 2622, минутный тайм фрейм, инструмент Si-12.20 брокер "Открытие".

Принтуем при открытии нового бара в режиме "Каждый тик на основе реальных тиков" и "OHLC на M1" :

Print("Time",TimeToString(iTime(Symbol(),PERIOD_CURRENT,0),TIME_DATE|TIME_MINUTES), " Time_TOM=",TimeToString(iTime("USDRUB_TOM",PERIOD_CURRENT,0),TIME_DATE|TIME_MINUTES));

Выше результаты сведены в таблицу, и у меня по ним есть вопросы:

1. Я ожидал, что задержка может быть в случае, если на текущем инструменте уже появился новый бар, а на инструменте с которого запрашиваем информацию ещё нет - такая ситуация действительно бывает, но только на открытии нового дня - выделено зеленым.

2. Без выделения ситуация, такая же, как и из первого пункта, но если в потиковом тестировании это ожидаемо, то почему такая ситуация происходит и в режиме  "OHLC на M1" - откуда там рассинхронизация - неясно.

3. Желтым цветом выделена ситуация, когда два тика пришли единовременно или же по запрашиваемому инструменту тик пришел быстрей, чем на инструменте с которого происходит вызов информации, но каким образом в режиме  "OHLC на M1" нет тика на этом баре, если он даже уже пришёл в потиковом режиме.

Прошу разработчиков пояснить, это так и было задумано, тогда в чем логика, или это ошибка, которая будет исправлена?

 
Aleksey Vyazmikin:


Билд 2622, минутный тайм фрейм, инструмент Si-12.20 брокер "Открытие".

Принтуем при открытии нового бара в режиме "Каждый тик на основе реальных тиков" и "OHLC на M1" :

Выше результаты сведены в таблицу, и у меня по ним есть вопросы:

1. Я ожидал, что задержка может быть в случае, если на текущем инструменте уже появился новый бар, а на инструменте с которого запрашиваем информацию ещё нет - такая ситуация действительно бывает, но только на открытии нового дня - выделено зеленым.

2. Без выделения ситуация, такая же, как и из первого пункта, но если в потиковом тестировании это ожидаемо, то почему такая ситуация происходит и в режиме  "OHLC на M1" - откуда там рассинхронизация - неясно.

3. Желтым цветом выделена ситуация, когда два тика пришли единовременно или же по запрашиваемому инструменту тик пришел быстрей, чем на инструменте с которого происходит вызов информации, но каким образом в режиме  "OHLC на M1" нет тика на этом баре, если он даже уже пришёл в потиковом режиме.

Прошу разработчиков пояснить, это так и было задумано, тогда в чем логика, или это ошибка, которая будет исправлена?

Ваш вопрос исключительно про OHLC режим тестирования, так как в потиковом все верно?

Тогда ответ простой - вы никаких гарантий точной синхронизации чужих символов при OHLC тестировании не можете иметь. OHLC исключительно для грязного тестирования.

 
Renat Fatkhullin:

Ваш вопрос исключительно про OHLC режим тестирования, так как в потиковом все верно?

Тогда ответ простой - вы никаких гарантий точной синхронизации чужих символов при OHLC тестировании не можете иметь. OHLC исключительно для грязного тестирования.

В потиковом, похоже, что верно.

Однако, почему нельзя сделать синхронизацию "чужих символов" по времени открытия именно бара тайм серии, я же не говорю про тиковую синхронизацию? И вообще, от чего зависит рассинхронизация, чем больше инструментов, тем больше будет рассинхронизация в режиме OHLC?

 
Aleksey Vyazmikin:

В потиковом, похоже, что верно.

Однако, почему нельзя сделать синхронизацию "чужих символов" по времени открытия именно бара тайм серии, я же не говорю про тиковую синхронизацию? И вообще, от чего зависит рассинхронизация, чем больше инструментов, тем больше будет рассинхронизация в режиме OHLC?

В OHLC работает упрощенный режим моделирования.

Он неприменим для мультисимвольного точного тестирования. Варианты качества моделирования "по ценам открытия, по OHLC" были специально введены для кардинального ускорения расчетов.

Нельзя же на ровном месте получить ускорение в N раз при том же уровне качества.
 
Renat Fatkhullin:

В OHLC работает упрощенный режим моделирования.

Он неприменим для мультисимвольного точного тестирования. Варианты качества моделирования "по ценам открытия, по OHLC" были специально введены для кардинального ускорения расчетов.

Нельзя же на ровном месте получить ускорение в N раз при том же уровне качества.

По своей наивности, я думал, что синхронизация по OHLC подразумевает, что если бар открылся в 10:00:01 с приходом тика, то в режиме OHLC просто произойдет округление до 10:00:00. Вроде и справки читал, но как то не дошло видимо из прочтитанного.

Значит единственный вариант, это делать кастомные символы, с тиками по OHLC и запускать тестирование по всем тикам, для сохранения синхронизации и скорости? Может такой режим просто добавить в тестер, как чуть медленней OHLC, но значительно более быстрого чем по всем тикам?

 
Renat Fatkhullin:

Ваш вопрос исключительно про OHLC режим тестирования, так как в потиковом все верно?

Всё же, решил я проверить, всё ли верно в потиковом режиме - увы, если буквально считать, что расчет должен был начаться с приходом первого тика и внутри OnTick() время не идет, то получается, что по фьючерсу Si-12.20 тик (сделка по сути, а не движение в стакане) пришел раньше, чем по USDRUB_TOM 26.09.2020, а в таблице выше в одно время, или напротив USDRUB_TOM раньше.


Получается, что точность синхронизации примерно в окно 1 секунду, или как понимать эту рассинхронизацию?

 
Aleksey Vyazmikin:

Всё же, решил я проверить, всё ли верно в потиковом режиме - увы, если буквально считать, что расчет должен был начаться с приходом первого тика и внутри OnTick() время не идет, то получается, что по фьючерсу Si-12.20 тик (сделка по сути, а не движение в стакане) пришел раньше, чем по USDRUB_TOM 26.09.2020, а в таблице выше в одно время, или напротив USDRUB_TOM раньше.


Получается, что точность синхронизации примерно в окно 1 секунду, или как понимать эту рассинхронизацию?

Прочтите свой текст внимательно, пожалуйста.

Найдите в нем исходные условия, проверочный код, логи, выводы, а потом вопрос. Вы пропускаете важные шаги, но делаете утверждения и задаете вопросы.

 
Renat Fatkhullin:

Прочтите свой текст внимательно, пожалуйста.

Найдите в нем исходные условия, проверочный код, логи, выводы, а потом вопрос. Вы пропускаете важные шаги, но делаете утверждения и задаете вопросы.

Я утверждаю только исходя из имеющихся у меня данных, но не отрицаю, что они могут быть ошибочны. Мне ж важно разобраться в ситуации.

#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
//---
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---


}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
//Операции выполняются только при появлении следующего бара
   if(!isNewBar()) return;

Print("Time",TimeToString(iTime(Symbol(),PERIOD_CURRENT,0),TIME_DATE|TIME_MINUTES), " Time_TOM=",TimeToString(iTime("USDRUB_TOM",PERIOD_CURRENT,0),TIME_DATE|TIME_MINUTES));

//---
}

//+------------------------------------------------------------------------------------------------------------------+
//| Возвращает TRUE, если появился новый бар на текущем ТФ
//+------------------------------------------------------------------------------------------------------------------+
bool isNewBar()
{
   datetime tm[];
   static datetime prevBarTime=0;

   if(CopyTime(_Symbol,0,0,1,tm)<0)
   {
      Print("%s CopyTime error = %d",__FUNCTION__,GetLastError());
   }
   else
   {
      if(prevBarTime!=tm[0])
      {
         prevBarTime=tm[0];
         return true;
      }
      return false;
   }
   return true;
}



лог:

HS      0       16:59:37.463    Tester  Si-12.20: ticks data begins from 2020.09.17 00:00
CD      0       16:59:37.463    Core 2  connecting to 127.0.0.1:3001
NQ      0       16:59:37.463    Core 2  connected
EH      0       16:59:37.471    Core 2  authorized (agent build 2622)
GO      0       16:59:37.473    Tester  Si-12.20,M1 (Open-Broker): testing of Experts\Test_Tick.ex5 from 2020.09.18 00:00 to 2020.09.19 00:00
LR      0       16:59:37.521    Core 2  common synchronization completed
IF      0       16:59:37.533    Core 2  Si-12.20: ticks synchronized already [47 bytes]
ML      0       16:59:38.021    Core 2  USDRUB_TOM: ticks synchronized already [51 bytes]
NG      0       16:59:38.682    Core 2  test Experts\New_Pred_2020_03.ex5 on Si-12.20,M1 thread finished
GL      0       16:59:38.682    Core 2  prepare for shutdown
CF      0       16:59:38.682    Core 2  login (build 2622)
JL      0       16:59:38.682    Core 2  account info found with currency RUR
NF      0       16:59:38.682    Core 2  1482 bytes of tester parameters loaded
GR      0       16:59:38.682    Core 2  188 bytes of input parameters loaded
ED      0       16:59:38.682    Core 2  expert file added: Experts\Test_Tick.ex5. 13551 bytes loaded
FP      0       16:59:38.682    Core 2  initial deposit 1000000.00 RUR, leverage 1:1
DJ      0       16:59:38.682    Core 2  successfully initialized
DL      0       16:59:38.682    Core 2  13 Kb of total initialization data received
KJ      0       16:59:38.682    Core 2  AMD FX-8350 Eight-Core Processor, 24533 MB
IO      0       16:59:38.682    Core 2  Si-12.20: symbol to be synchronized
MD      0       16:59:38.682    Core 2  Si-12.20: symbol synchronized already, 22 bytes received
NQ      0       16:59:38.682    Core 2  Si-12.20: load 31 bytes of history data to synchronize in 0:00:00.001
MN      0       16:59:38.682    Core 2  Si-12.20: history synchronized from 2018.12.19 to 2020.09.24
JH      0       16:59:38.682    Core 2  Si-12.20: ticks synchronization started
IO      0       16:59:38.682    Core 2  Si-12.20: load 38 bytes of tick data to synchronize in 0:00:00.000
RS      0       16:59:38.682    Core 2  Si-12.20: history ticks synchronized from 2020.09.18 to 2020.09.23
IE      0       16:59:38.682    Core 2  Si-12.20,M1: history cache allocated for 43966 bars and contains 42930 bars from 2019.01.03 17:39 to 2020.09.17 23:49
GF      0       16:59:38.682    Core 2  Si-12.20,M1: history begins from 2019.01.03 17:39
ND      0       16:59:38.682    Core 2  Si-12.20,M1 (Open-Broker): generating based on real ticks
FQ      0       16:59:38.682    Core 2  Si-12.20,M1: testing of Experts\Test_Tick.ex5 from 2020.09.18 00:00 to 2020.09.19 00:00 started
FS      0       16:59:38.682    Core 2  Si-12.20 : real ticks begin from 2020.09.18 00:00:00
QE      0       16:59:38.682    Core 2  USDRUB_TOM: symbol to be synchronized
MO      0       16:59:38.682    Core 2  USDRUB_TOM: symbol synchronized already, 26 bytes received
NJ      0       16:59:38.682    Core 2  USDRUB_TOM: load 35 bytes of history data to synchronize in 0:00:00.001
DE      0       16:59:38.682    Core 2  USDRUB_TOM: history synchronized from 2012.01.03 to 2020.09.24
RS      0       16:59:38.682    Core 2  USDRUB_TOM: ticks synchronization started
RE      0       16:59:38.682    Core 2  USDRUB_TOM: load 42 bytes of tick data to synchronize in 0:00:00.000
CI      0       16:59:38.682    Core 2  USDRUB_TOM: history ticks synchronized from 2019.01.11 to 2020.09.23
JL      0       16:59:38.682    Core 2  USDRUB_TOM,M1: history cache allocated for 349647 bars and contains 348611 bars from 2019.01.03 10:00 to 2020.09.17 23:49
PK      0       16:59:38.682    Core 2  USDRUB_TOM,M1: history begins from 2019.01.03 10:00
KQ      0       16:59:38.682    Core 2  2020.09.18 09:45:02   Time2020.09.17 23:49 Time_TOM=2020.09.17 23:49
EE      0       16:59:38.682    Core 2  USDRUB_TOM : real ticks begin from 2019.01.11 00:00:00
DK      0       16:59:38.682    Core 2  2020.09.18 10:00:00   Time2020.09.18 10:00 Time_TOM=2020.09.17 23:49
...
FD      0       16:59:38.682    Core 2  2020.09.18 10:26:00   Time2020.09.18 10:26 Time_TOM=2020.09.18 10:26
...
EI      0       16:59:38.682    Core 2  final balance 1000000.00 RUR
IO      0       16:59:38.682    Core 2  Si-12.20,M1: 620461 ticks, 810 bars generated. Environment synchronized in 0:00:00.054. Test passed in 0:00:01.155 (including ticks preprocessing 0:00:00.078).
OK      0       16:59:38.682    Core 2  Si-12.20,M1: total time from login to stop testing 0:00:01.209 (including 0:00:00.055 for history data synchronization)
MK      0       16:59:38.682    Core 2  727227 total ticks for all symbols
FO      0       16:59:38.682    Core 2  Si-12.20: generate 620461 ticks in 0:00:00.062, passed to tester 620462 ticks
HQ      0       16:59:38.682    Core 2  USDRUB_TOM: generate 106766 ticks in 0:00:00.016, passed to tester 106766 ticks
NF      0       16:59:38.682    Core 2  444 Mb memory used including 22 Mb of history data, 64 Mb of tick data
OH      0       16:59:38.682    Core 2  log file "F:\FX\Открытие Брокер_Demo\Tester\Agent-127.0.0.1-3001\logs\20200926.log" written
QH      0       16:59:38.699    Core 2  connection closed
 

build 2622

всплывающее окно подсказки кажется теперь корректно работает

но огорчает автоподстановка когда в методах  класса в качестве параметра пользовательские типы - часто вместо названия типа (структура или класс) подставляется тип int

кажется этот баг появляется если пользовательский тип описан в другом файле .mqh


Причина обращения: