Нужен ли режим тестирования по ценам открытия текущего таймфрейма? (как в МТ4) - страница 10

 
hrenfx:

Поясните, какое отношение имеет работа по ссылке выше к описанным багам?

P.S. OnTickMarketWatch обязан был быть сделан разработчиками в самом onTick по этому образу и подобию. Элементарный (казалось бы) мультивалютный сборщик тиков в MT5, как и в MT4, делается через (одно место) опрашивание MarketWatch каждые N ms. Как результат, тики пропускаются.

Прямое отношение. С помощью того метода можно получать события новый бар и тики с любого символа, на каком бы символе не находился эксперт. В идеале конечно нужен мультивалютный onTick(), но к сожалению этого сейчас нет.
 
Велась речь о тестере в режиме "по ценам открытия". Не путайте этот режим с режимом "по всем тикам" и Real-Time.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5
 
hrenfx:
Велась речь о тестере в режиме "по ценам открытия". Не путайте этот режим с режимом "по всем тикам" и Real-Time.
А тот метод подходит под все режимы: Все тики, OHLC на M1 и Только цены открытия. И в реальном времени тоже всё работает чётко. Посмотрите также статьи автора (Lizar). Эта тема довольно подробно освещена.
 

Не буду спорить, приведу лишь MT4-советник, который показывает баг. Если у кого возникнет желание, сможет переписать его на MQL5 и проверить наличие/отсутствие бага.

extern string SecondSymbol = "USDJPY";

void start()
{
  static int Digits2, PrevTime = 0;

  if (PrevTime == Time[0])
    return;

  PrevTime = Time[0];

  if (iTime(SecondSymbol, Period(), 0) < Time[0])
  {
    Digits2 = MarketInfo(SecondSymbol, MODE_DIGITS);

    Print("CurrentTime = " + TimeToStr(PrevTime) + ", SecondSymbol = " + SecondSymbol +
          ", OHLC = {" + DoubleToStr(iOpen(SecondSymbol, Period(), 0), Digits2) +
          ", " + DoubleToStr(iHigh(SecondSymbol, Period(), 0), Digits2) +
          ", " + DoubleToStr(iLow(SecondSymbol, Period(), 0), Digits2) +
          ", " + DoubleToStr(iClose(SecondSymbol, Period(), 0), Digits2) +"}");
  }

  return;
}

Результат его работы в тестере MT4 build 432 на EURUSD M1 "по ценам открытия":

 

Видно, что на USDJPY отсутствует бар в 23:13. Однако, когда мы в тестере доходим до этого времени и запрашиваем OHLC[23:13] USDJPY, то вместо {Close[23:12], Close[23:12], Close[23:12], Close[23:12]} мы получаем {Open[23:12], Open[23:12], Open[23:12], Open[23:12]}. Что, конечно же, неверно, т.к. цена в 23:13 USDJPY не менялась (бара нет, но цена была - привет от "нет тика - нет бара") и была равна цене закрытия USDJPY в 23:12 (Close[23:12]).

Очевидно, переборщили в защите от заглядывания в будущее (которая все равно обходится штатными средствами). 

P.S. Если вы заполните все дыры (в MT5 привет от NO_CustomHistory) в истории, достигнув тем самым мультисимвольной побаровой синхронизации, то сумеете обойти данный баг.

Файлы:
 
Интересный баг.
 
hrenfx:

Не буду спорить, приведу лишь MT4-советник, который показывает баг. Если у кого возникнет желание, сможет переписать его на MQL5 и проверить наличие/отсутствие бага.

Результат его работы в тестере MT4 build 432 на EURUSD M1 "по ценам открытия":

 

Видно, что на USDJPY отсутствует бар в 23:13. Однако, когда мы в тестере доходим до этого времени и запрашиваем OHLC[23:13] USDJPY, то вместо {Close[23:12], Close[23:12], Close[23:12], Close[23:12]} мы получаем {Open[23:12], Open[23:12], Open[23:12], Open[23:12]}. Что, конечно же, неверно, т.к. цена в 23:13 USDJPY не менялась (бара нет, но цена была - привет от "нет тика - нет бара") и была равна цене закрытия USDJPY в 23:12 (Close[23:12]).

Очевидно, переборщили в защите от заглядывания в будущее (которая все равно обходится штатными средствами). 

P.S. Если вы заполните все дыры (в MT5 привет от NO_CustomHistory) в истории, достигнув тем самым мультисимвольной побаровой синхронизации, то сумеете обойти данный баг.

 

Вы пришли искать правду в тестировании по ценам открытия в четвёрке(???) через 8 лет?

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

Если вы хотите предъявить претензии по ценам открытия в пятёрке, то предъявляйте предметно.

Кстати, вы в курсе о существовании официального грааля на M1 OHLC методе тестирования?

 
TheXpert:
Интересный баг.

А кто хотел тестирования "по ценам открытия"?

А кто предупреждал о весёлых последствиях тестировния "по ценам открытия как в четвёрке"?

 

Из ваших слов и servicedesk понял, что на MT4 - это фича, а не баг.

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

Для меня очевидно, что такая работа тестера является ошибочной, поэтому по доброте душевной и написал здесь. Заодно предположив, что в MT5 могут быть те же детские болезни. Желающие могут переписать приведенный код на MQL5 и проверить в течение минуты-другой, так это или нет. В этом и состоит предметность по MT5, где вы умудрились найти желание предъявить претензии.

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

P.S. Интересно, что "фичу" разработчики могут легко исправить:

if (iTime(SeсondSymbol, Period(), 0) < Time[0])
  OHLC(SecondSymbol) = Close(SecondSymbol, Period(), 0); // iClose не стал писать, т.к. сейчас отрабатывает неверно.

однако вместо "поправим в следующем билде", видим привычное с их стороны поведение.

P.P.S. Конечно, в MT4-тестере в режиме "по всем тикам", данная "фича" тоже имеет место быть. MT5 - не проверял.

 

hrenfx

Возможно, в MT4 в этом месте есть баг (в том числе и в ежетиковом тестировании). Но (утверждаю с вероятностью 99 процентов) этот баг в четвёрке никто править не будет.

Так что давайте переключимся на пятёрку. Если в ежетиковом режиме (в режиме "по ценам открытия" мы допускаем разные неточности) этот баг присутствует, то будем его править обязательно. Однако, могу Вас уверить, что в пятёрке такого бага нет. Лучше попробуйте доказать, что в пятёрке этот баг присутствует.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5
 
stringo:

Возможно, в MT4 в этом месте есть баг (в том числе и в ежетиковом тестировании).

Привел лаконичное доказательство своего утверждения наличия бага в MT4, вы продолжаете говорить "возможно".

Так что давайте переключимся на пятёрку. Если в ежетиковом режиме (в режиме "по ценам открытия" мы допускаем разные неточности) этот баг присутствует, то будем его править обязательно. Однако, могу Вас уверить, что в пятёрке такого бага нет. Лучше попробуйте доказать, что в пятёрке этот баг присутствует.

Речь идет не о тестировании, а о корректной подаче последовательности ценовой информации в тестере. Если "по ценам открытия" в мультивалютном тестере у вас такие проблемы с подачей мультисимвольных цен, то это странно.

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