Анализ результатов тестов и оптимизации в тестере стратегий MetaTrader 5 - страница 13

 
fxsaber #:
У нас стоит только "по реальным тикам".
Это частности, нам важно понимать общий механизм. Или в разных режимах тестер функционирует по разному?
 
Ilya Malev #:
Это частности, нам важно понимать общий механизм. Или в разных режимах тестер функционирует по разному?
По-разному.
 
fxsaber #:
По-разному.
Т.е. получается, что если я в режиме "Только цены открытия" получаю результат теста системы с отложками/СЛ/ТП, а потом тестирую его в режиме "Реальные тики", то он будет гарантированно отличаться в виду того, что в режиме "Только цены открытия" для исполнения этих ордеров используются цены самих этих ордеров (1), а в режиме "Реальные тики", используются цены ближайших к ним тиков (2)? А как ведет себя тестер в режиме "OHLC на M1", и в режиме "Все тики"? По варианту 1 или по варианту 2?
 

Ilya Malev #:
Т.е. получается, что если я в режиме "Только цены открытия" получаю результат теста системы с отложками/СЛ/ТП, а потом тестирую его в режиме "Реальные тики", то он будет гарантированно отличаться в виду того, что в режиме "Только цены открытия" для исполнения этих ордеров используются цены самих этих ордеров (1), а в режиме "Реальные тики", используются цены ближайших к ним тиков (2)?

Да.

А как ведет себя тестер в режиме "OHLC на M1", и в режиме "Все тики"? По варианту 1 или по варианту 2?

1 и 2, соответственно. Если бы писали свой Тестер, то ровно так и делали бы.


Напишите простейший советник и натравите инструмент на чарт бэктеста. Сразу увидите правила исполнения для каждого из режимов.

Можно и в один клик.

Возможности анализа не только своей торговой истории.
Возможности анализа не только своей торговой истории.
  • 2022.07.11
  • www.mql5.com
Семейство терминалов MetaTrader позволяет штатно визуализировать историю торговли открытого счета, бэктестов и Сигналов (мониторинг огромного числа торговых счетов). Ниже пойдет речь об использовании
 
fxsaber #:
Да.

Получается, что я изначально хотел двигаться по неверному пути - получив расхождения Опенов Н1 и Рельных тиков, сделать такой поток котировок где на каждый час 4-6 тиков с хай- и лоу-асками и бидами, не учитывающимися в режиме Открытий. В результате такого подхода я получу совершенно другие цены исполнения ордеров, заведомо нереальные. 

 
Ilya Malev #:

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

Не понял подход.
 
Ilya Malev #:

Как понять вот эти сообщения без указания причины, где узнать конкретную причину

 

и никогда не узнает никто что мы ходили в кино
и целовались в парадной 😹


 
fxsaber #:
Не понял подход.
Задача была в том, чтобы заставить тестер учитывать, при проверке исполнении ордеров на данном баре, хай- и лоу-аски в режиме тестирования Только открытия баров (например, Н1).
 
Ilya Malev #:
Задача была в том, чтобы заставить тестер учитывать, при проверке исполнении ордеров на данном баре, хай- и лоу-аски в режиме тестирования Только открытия баров (например, Н1).

Можно поиграться с MqlRates.spread, чтобы добиться достижения High/Low-ask. Не знаю, как сейчас это поле влияет на генерацию asks.

Задача же на самом деле - найти золотую середину между точностью и скоростью. Возможно, имеет смысл сильно проредить тики и использовать соответствующий кастомный символ в режиме по реальным тикам.

 
fxsaber #:

Задача же на самом деле - найти золотую середину между точностью и скоростью. Возможно, имеет смысл сильно проредить тики и использовать соответствующий кастомный символ в режиме по реальным тикам.

Можно так попробовать.

#property script_show_inputs

input string inName = "";
input datetime inFrom = D'2025.01.01';
input datetime inTo = D'2026.01.01';
input ENUM_TIMEFRAMES inPeriod = PERIOD_CURRENT;
input int inMinPips = 0;

#include <fxsaber\TicksShort\LotsTicks.mqh> // https://www.mql5.com/ru/code/61126

void OnStart()
{
  LOTS_TICKS LotsTicks;
  
  if ((LotsTicks.CopyTicksRange(_Symbol, COPY_TICKS_ALL, inFrom * 1000, inTo * 1000) > 0) &&   
      (LotsTicks.Filter(inMinPips, PeriodSeconds(inPeriod)) > 0))
  {
    const string Name = (inName == "") ? "FILTER" + (string)inMinPips + "_" + _Symbol : inName;
    
    if (CustomSymbolCreate(Name, NULL, _Symbol) &&
        (LotsTicks.CustomTicksReplace(Name) > 0) &&
        SymbolSelect(Name, true))
      ChartOpen(Name, _Period);
  }
}