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

 

В Визуализаторе не работают горячие клавиши управления скоростью.



ЗЫ Заработало. Видимо, какой-то сложно-уловимый баг.

 
Протестировав советник на реальных тиках у разных брокеров на МТ5 с качеством моделирования 99-100% при одинаковых входных параметрах получил совершенно разные результаты: от космической прибыли до убытков. До этого специально ушел с МТ4, т.к. там добиться такого качества моделирования труднее, надо заморачиваться. И что в результате? Как поведет себя советник в реале? Может кто даст дельный совет? 
 
ganri:
Протестировав советник на реальных тиках у разных брокеров на МТ5 с качеством моделирования 99-100% при одинаковых входных параметрах получил совершенно разные результаты: от космической прибыли до убытков. До этого специально ушел с МТ4, т.к. там добиться такого качества моделирования труднее, надо заморачиваться. И что в результате? Как поведет себя советник в реале? Может кто даст дельный совет? 

Тестер+советник - это мат. функция, которая каждому вектору (числовой ряд - котировки) ставит в соответствие число (профит).

Соответственно, (в общем виде) разные вектора - разные профиты. И эти профиты вовсе не обязаны подчиняться какому-то правилу (например, быть положительными).


Разные брокеры - это разные вектора (котировки). Здесь не имеет значения, тики это, бары или что-то другое. Главное, что вектора разные.

 
fxsaber:

Тестер+советник - это мат. функция, которая каждому вектору (числовой ряд - котировки) ставит в соответствие число (профит).

Соответственно, (в общем виде) разные вектора - разные профиты. И эти профиты вовсе не обязаны подчиняться какому-то правилу (например, быть положительными).


Разные брокеры - это разные вектора (котировки). Здесь не имеет значения, тики это, бары или что-то другое. Главное, что вектора разные.

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

 

В ME логично разделить эти настройки отладки.

Например, нужно в Терминале отлаживать на EURUSD, а в Тестере на EURUSD_Custom. Сейчас так не настроить.

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

[Tester]
Period=M1
Optimization=0
Model=0
FromDate=2019.07.22
ToDate=2019.07.24
ForwardMode=0
Deposit=10000
Currency=USD
ProfitInPips=0
Leverage=100
ExecutionMode=0
OptimizationCriterion=6
Visual=1

Тогда будет полная гибкость по настройкам. И GUI не перегружен.

Строка для поиска: Uluchshenie 001.

 
Включен только один Агент. Его окно когда-то сделанной визуализации не закрыто. В Тестере выбирается Оптимизация и запускается.
2020.02.15 11:23:01.818 Tester  complete optimization started
2020.02.15 11:23:01.855 Core 1  agent still started in visual mode

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

2020.02.15 11:25:52.278 Tester  optimization finished, total passes 0
2020.02.15 11:25:52.278 Statistics      optimization done in 2 minutes 51 seconds
2020.02.15 11:25:52.279 Tester  stopped by user

И даже создается opt-файл с нулевым количеством проходов.


Наверное, здесь нужно поправить поведение.

Строка для поиска: Uluchshenie 002.
 

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

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

fxsaber, 2020.02.11 01:58

Долго искал причину странного поведения Тестера по реальным тикам. Нашел.
const bool Init = EventSetTimer(1);

void Func()
{
  static datetime PrevTime = 0;
  
  const datetime time = TimeTradeServer();
  
  if (time < PrevTime)
    DebugBreak(); // Срабатывает
  
  PrevTime = time;
}

void OnTick()
{
  Func();
}

void OnTimer()
{
  Func();
}

Время сервера убегает вперед, а потом возвращается. Такое происходит на реальном торговом сервере, но удалось создать воспроизведение на кастомном символе.


Запускаем

sinput datetime inDateFrom = D'2020.01.01';

void OnStart()
{
  const string Name = "TEMP12345";                                                           // Имя кастомного символа
  const string SymbOrig = "EURUSD";                                                          // Имя оригинального символа

  MqlTick Ticks[];
  
  const int Size = CopyTicksRange(SymbOrig, Ticks, COPY_TICKS_ALL, (long)inDateFrom * 1000); // Считали EURUSD-тики.
    
  if ((Size > 0) && CustomSymbolCreate(Name, NULL, SymbOrig) && SymbolSelect(Name, true))    // Создали символ на основе EURUSD.
  {
    CustomTicksReplace(Name, 0, LONG_MAX, Ticks);                                            // Поместили в него историю EURUSD.        
    
    CustomRatesDelete(Name, D'2020.01.03 23:00', D'2020.01.04 00:00');                       // Удалили несколько баров.
  }
}


Будет создан символ с тиковой историей, но с несколькими удаленным барами. Далее запускаем Дебаг советника выше в таком режиме.

[Tester]
Symbol=TEMP12345
Period=M1
Optimization=0
Model=4
FromDate=2020.01.01
ToDate=2020.01.08
ForwardMode=0
Deposit=100000
Currency=USD
ProfitInPips=1
Leverage=100
ExecutionMode=0
OptimizationCriterion=6


Остановка.

Видно, что время пошло по второму кругу.

Строка для поиска: Oshibka 002.

 

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

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

fxsaber, 2020.02.01 13:43

Даже такой советник более, чем в два раза, медленнее 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. И больше ничего!

Строка для поиска: Uluchshenie 003.
 
Классно!
2020.02.18 13:24:06.618 Core 1  pass 0 returned result 0 in 0:00:05.288 + history synchronization 0:00:03.098
 

Невозможно задать размер тика меньше или равно единицы.

Если прописать, а потом снова зайти, то будет нулевая величина. Для значений больше единицы все в порядке.

Строка для поиска: Uluchshenie 004.

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