Тестер стратегий MetaTrader 5: ошибки, баги, предложения по улучшению работы - страница 54

 
Alexey Viktorov:

Так у тебя не получилось зарегистрировать счёт на бете?

Нет. 
 

В MT4-Тестере был такой помощник для ГА.


Это существенно помогало сократить время Оптимизации. Например, если баланс уперся в пол, то зачем дальше гнать? В MT5 этого нет. Поэтому приходится встраивать такие разумные вещи в свои советники. Думаю, не многие авторы так поступают. Поэтому, наверное, разумно было бы такой функционал перенести и в MT5-Тестер.


Так же актуальны помощники для ГА. Вот простейший.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Советники: Validate

fxsaber, 2020.01.29 15:55

В своих советниках рекомендую использовать подобного помощника ГА.

sinput int inMinTrades = 500; // Минимальное количество трейдов (позиций).
sinput int inMaxTrades = 90000; // Максимальное количество трейдов (позиций).

double OnTester()
{
  return(((TesterStatistics(STAT_TRADES) >= inMinTrades) && (TesterStatistics(STAT_TRADES) <= inMaxTrades)) ? TesterStatistics(STAT_PROFIT) : 0);
}

Он не позволяет ГА уходить в сторону слабых стат. результатов. Тем самым повышается качество результата и скорость его достижения. А для Validate еще и фильтр от слабых по стат. значимости проходов.


Например, когда перенастройку делаю на основе расчетов за три месяца, то минимальное количество трейдов ставлю > 100. Иначе выше вероятность в ГА нарваться на проход, который дает больше всех профита за счет малого количества удачных (случайных) сделок. Понятно, что такой проход ничего общего не должен иметь с выбором его для дальнейшей торговли.

Думаю, разумно со стороны Тестера иметь таких помощников. Тем более, что это не требует каких-либо вычислительных затрат.

 

Всем привет.

У меня мульти-рыночный робот. Торгует статистический арбитраж, спреды. Робот устроен так, что сам берет инструменты из обзора рынка или берет их из файла спредов (который находится в корневом каталоге программы в папке files). Робот анализирует данные, подбирает наиболее перспективные пары инструментов и торгует их.

Вопрос, сможет ли тестер стратегий мт5 тестировать его? предназначен ли функционал тестера, если торговые интрументы не перечислены во входящих параметрах робота, как это обычно, а инструменты берутся из обзора рынка или из папки Files?

 
Peresvet Timonkin:

Всем привет.

У меня мульти-рыночный робот. Торгует статистический арбитраж, спреды. Робот устроен так, что сам берет инструменты из обзора рынка или берет их из файла спредов (который находится в корневом каталоге программы в папке files). Робот анализирует данные, подбирает наиболее перспективные пары инструментов и торгует их.

Вопрос, сможет ли тестер стратегий мт5 тестировать его? предназначен ли функционал тестера, если торговые интрументы не перечислены во входящих параметрах робота, как это обычно, а инструменты берутся из обзора рынка или из папки Files?

Обзор рынка формируется по обращениям из кода к символам. Для тестера обязательно должен быть список валют в любом варианте. А в реале нет проблем.

То что на скрине, это для оптимизации.
 
Alexey Viktorov:

Обзор рынка формируется по обращениям из кода к символам. Для тестера обязательно должен быть список валют в любом варианте. А в реале нет проблем.

То что на скрине, это для оптимизации.

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

тестер не может на с истории брать данные из обзора рынка?

а что касается файла в котором прописаны торговые инструменты, с ним тестер тоже не сможет работать?

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

 
Peresvet Timonkin:

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

тестер не может на с истории брать данные из обзора рынка?

а что касается файла в котором прописаны торговые инструменты, с ним тестер тоже не сможет работать?

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

Если постараться, то можно всё. Например в OnInit() запросить тики нужных валют тем самым добавив их в обзор рынка и потом работать с обзором рынка. Но в этом случае как ни крути, должен быть список валют. А можно сделать два варианта: Работать по списку и работать по имеющимся в обзоре рынка. Соответственно в OnInit() поставить условие, если работа в тестере, то работать только со списком. В маркете есть такой советник.

Относительно файла: Можно конечно, только надо учитывать расположение файла. Для тестера он должен находиться в папке тестера или в общей для всех терминалов папке. Либо вставлять его в качестве ресурса.
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Тестер стратегий MetaTrader 5: ошибки, баги, предложения по улучшению работы

fxsaber, 2020.01.22 23:08

Билд 2300. В режиме по пипсам стал учитываться объем, Спасибо!


Однако, прибыль InOut-сделок в этом режиме вычисляется неверно.


Если запустить в обычном режиме, то прибыль правильная.



Поэтому на Неттинге режим по пипсам сейчас не рабочий (рисует завышенную прибыль).


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

 

В 2310 заметил, что мой советник, который делает часто модификации, невозможно профилировать.

Набросал проверочный.

input int inFakeRange = 0;
sinput int inOffset = 10000;

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  static long Ticket = -1;
  
  if (Ticket == -1)
    Ticket = OrderSend(_Symbol, OP_BUYLIMIT, 1, Ask - inOffset * _Point, 0, 0, 0);
  else
    OrderModify(Ticket, Ask - inOffset * _Point, 0, 0, 0);
}

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


Однако, он еще и вызывает ЗАВИСАНИЕ Терминала, если запустить по реальным тиками (даже в режиме по пипсам) одиночный проход! Просто какой-то убийца.


Если сделать его Оптимизацию (по первому параметру), то она проходит на ура, но возникают некоторые нехорошие мысли на тему производительности...


ЗЫ Если запустить в Визуализаторе и, не дождавшись окончания, закрыть, то зависает Терминал.

 
fxsaber:

Если сделать его Оптимизацию (по первому параметру), то она проходит на ура, но возникают некоторые нехорошие мысли на тему производительности...

Сравнить могу только с Virtual-вариантом.

input int inFakeRange = 0;
sinput int inOffset = 10000;

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define VIRTUAL_TESTER // Запуск в виртуальном торговом окружении
#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/ru/code/22577

#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  static long Ticket = -1;
  
  if (Ticket == -1)
    Ticket = OrderSend(_Symbol, OP_BUYLIMIT, 1, Ask - inOffset * _Point, 0, 0, 0);
  else
    OrderModify(Ticket, Ask - inOffset * _Point, 0, 0, 0);
}


Обычный вариант.

optimization finished, total passes 5
optimization done in 1 minutes 04 seconds
shortest pass 0:00:12.560, longest pass 0:00:13.608, average pass 0:00:12.808
local 5 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


С Virtual.

optimization finished, total passes 5
optimization done in 0 minutes 06 seconds
shortest pass 0:00:00.954, longest pass 0:00:02.060, average pass 0:00:01.231
local 5 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


Тестер в 13 раз медленнее на элементарном советнике в режиме по пипсам, где никаких проверок даже нет! Билд 2310.

 
fxsaber:

Тестер в 13 раз медленнее на элементарном советнике в режиме по пипсам, где никаких проверок даже нет! Билд 2310.

Даже такой советник более, чем в два раза, медленнее Virtual в режиме по пипсам.

input int inFakeRange = 0;
sinput int inOffset = 10000;

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  static long Ticket = -1;
  
  if (Ticket == -1)
    Ticket = OrderSend(_Symbol, OP_BUYLIMIT, 1, Ask - inOffset * _Point, 0, 0, 0);
}

Почему такое происходит? Весь советник - это на первом тике выставление BuyLimit. И больше ничего!

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