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

 
traveller00:
Да, я копи-пастил ИЗ параметров и видел, в каком виде он ожидает увидеть. Но человеку обращаться с такими значениями не очень удобно. Поэтому и спрашивал, возможно ли там ввести поддержку форматов даты, как и в исходниках. 

Человек редактирует сет-файлы?


Если datetime-инпуты будут отображаться (set-файлы, CTRL+C Тестера, tpl-файлы и, наверное, что-то еще) не числом, а строкой, то рухнет все удобство парсинга этих данных.

Сейчас есть всего три вида инпут-данных: double, long и string. Первые два - всегда числа. Ту да же входит не только datetime, но и color, enum и вообще все, кроме string. Это супер-удобно!


Плодить еще одну сущность, делая нерабочим массу кода, - сомнительная целесообразность. Есть комментарии. Вот пример сгенерированного автоматом сета.

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

Библиотеки: TesterCache

fxsaber, 2019.11.11 04:45

; saved on 2019.11.13 19:40:01
; Experts\Examples\MACD\MACD Sample LImitTP.ex5
; EURUSD
; 2019.09.01 - 2019.11.13
; 479, 10, Max, 47.92, -253.60
;
InpLots=0.1
InpTakeProfit=200||10||5||500||Y
InpTrailingStop=290||30||10||300||Y
InpMACDOpenLevel=5||5||5||200||Y
InpMACDCloseLevel=180||5||5||200||Y
InpMATrendPeriod=8||1||1||200||Y
;
; Pass = 1838
; initial_deposit = 10000.0
; withdrawal = 0.0
; profit = 479.15
; grossprofit = 479.15
; grossloss = 0.0
; maxprofit = 99.8
; minprofit = 0.0
; conprofitmax = 479.15
; maxconprofit = 479.15
; conlossmax = 0.0
; maxconloss = 0.0
; balance_min = 10000.0
; maxdrawdown = 0.0
; drawdownpercent = 0.0
; reldrawdown = 0.0
; reldrawdownpercent = 0.0
; equity_min = 9997.700000000001
; maxdrawdown_e = 253.6000000000004
; drawdownpercent_e = 2.457388152985982
; reldrawdown_e = 253.6000000000004
; reldrawdownpercnt_e = 2.457388152985982
; expected_payoff = 47.91500000000001
; profit_factor = 1.797693134862316e+308
; recovery_factor = 1.889392744479493
; sharpe_ratio = 1.069726339729858
; margin_level = 1.797693134862316e+308
; custom_fitness = 0.0
; deals = 15
; trades = 10
; profittrades = 10
; losstrades = 0
; shorttrades = 6
; longtrades = 4
; winshorttrades = 6
; winlongtrades = 4
; conprofitmax_trades = 10
; maxconprofit_trades = 10
; conlossmax_trades = 0
; maxconloss_trades = 0
; avgconwinners = 10
; avgconloosers = 0
; 
; version = 515
; copyright = Copyright 2000-2019, MetaQuotes Software Corp.
; name = TesterOptCache
; header_size = 2526
; record_size = 328
; expert_name = MACD Sample LImitTP
; expert_path = Experts\Examples\MACD\MACD Sample LImitTP.ex5
; server = MetaQuotes-Beta
; symbol = EURUSD
; (ENUM_TIMEFRAMES)period = PERIOD_M1
; date_from = 2019.09.01 00:00:00
; date_to = 2019.11.13 00:00:00
; date_forward = 1970.01.01 00:00:00
; opt_mode = 1
; ticks_mode = 4
; last_criterion = 0
; msc_min = 501
; msc_max = 2342
; msc_avg = 801
; group = demo (netting)
; trade_currency = USD
; trade_deposit = 10000
; trade_condition = 0
; trade_leverage = 100
; trade_hedging = 1
; trade_currency_digits = 2
; trade_pips = 0
; parameters_size = 28
; parameters_total = 6
; opt_params_size = 40
; opt_params_total = 5
; dwords_cnt = 0
; snapshot_size = 0
; passes_total = 0
; passes_passed = 2510

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


Разве этого мало?


ЗЫ Надо помнить, что datetime и оптимизируется, можно задать Start, Step, Stop. Где Step, конечно, даже в GUI задается в секундах.

 
Я имел в виду копирование в буфер по CTRL+C оставить числом, как и было. А вот вставку по CTRL+V расширить, чтобы понимал как старый формат (по сути ulong), так и новый строковый формат. Это не должно ничего сломать, но расширит для желающих задавать строкой, а не числом.
 
traveller00:
Я имел в виду копирование в буфер по CTRL+C оставить числом, как и было. А вот вставку по CTRL+V расширить, чтобы понимал как старый формат (по сути ulong), так и новый строковый формат. Это не должно ничего сломать, но расширит для желающих задавать строкой, а не числом.

Хорошее уточнение. Это, действительно, ничего не сломает. Правда, не знаю людей, кто пользуется установкой даты через CTRL+V.

 
fxsaber:

Правда, не знаю людей, кто пользуется установкой даты через CTRL+V.

Тут скорее вопрос установки не даты, а параметров вообще, в том числе и где дата есть. Во-первых, дабы сделать единообразно, раз сам mql держит формат даты, а во-вторых, чтобы наглядно было, а не плодить комментарии. Ибо у меня тестирование генерит входные параметры, которые надо оценить на глаз, а потом уже и поставить.

Slava:
Возможно. Сделаем.

А можно тогда заодно сделать и поддержку вставки (через CTRL+V) Входных параметров для советника? Для тестирования в Параметрах оно вставляется отлично. Но когда не тестирование, а просто добавление эксперта на график, вкладка Входных параметров похоже не поддерживает вставку и приходится по сути те же самые параметры заполнять руками. Спасибо.

 
traveller00:

А можно тогда заодно сделать и поддержку вставки (через CTRL+V) Входных параметров для советника? Для тестирования в Параметрах оно вставляется отлично. Но когда не тестирование, а просто добавление эксперта на график, вкладка Входных параметров похоже не поддерживает вставку и приходится по сути те же самые параметры заполнять руками. Спасибо.

И CTRL+C.

 

Разработчики, привет!

Почему-то в OnTimer вот такая проверка не всегда проходит во время прогонки советника в тестере стратегий (не понятно причем с чем связано):

    if (MQLInfoInteger(MQL_PROFILER) == 0 && MQLInfoInteger(MQL_TESTER) == 0) {
        Print("You can't use this version of EA in trade mode!");
        return;
    }

В OnInit вроде нормально отрабатывает всегда.

PS. При этом торговля не всегда ведется. Добавлю логов для режимов тестирования, почему торговля запрещена. Плавающий глюк какой-то.
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии (советники) перед началом использования их в реальной торговле. При тестировании советника происходит его однократная прогонка с начальными параметрами на исторических данных. При оптимизации торговая стратегия прогоняется несколько раз с различным набором параметров...
 

Столкнулся с тем что графические объекты в МТ5 тестере в режиме визуализации отрисовываются не так, как я предполагал. Тестовый советник упростил до предела, в нем должен строиться прямоугольник по координатам, взятым на основе 50-го и 45-го баров. Код в аттаче, но вся логика в одной строке:

if (!IsNewBar()) return;
RectangleCreate(0, "5BarZone", 0, iTime(NULL,0,50), iHigh(NULL,0,50), iTime(NULL,0,0), iLow(NULL,0,45), clrGreen, STYLE_SOLID, 1, true, true);
ChartRedraw(0);

Советник должен перерисовывать такой канал на каждом новом баре текущего ТФ. Картинка должна выглядеть примерно так:


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


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

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

Подскажите пожалуйста в чем проблема и поддается ли она решению. Пытался найти ответ поиском, но потерпел неудачу.

Премного благодарен за помощь в любом виде.

Файлы:
 
Andrey Pogoreltsev:

Разработчики, привет!

Почему-то в OnTimer вот такая проверка не всегда проходит во время прогонки советника в тестере стратегий (не понятно причем с чем связано):

В OnInit вроде нормально отрабатывает всегда.

PS. При этом торговля не всегда ведется. Добавлю логов для режимов тестирования, почему торговля запрещена. Плавающий глюк какой-то.
Заменить && на ||
 
Grigori.S.B:

Столкнулся с тем что графические объекты в МТ5 тестере в режиме визуализации отрисовываются не так, как я предполагал. Тестовый советник упростил до предела, в нем должен строиться прямоугольник по координатам, взятым на основе 50-го и 45-го баров. Код в аттаче, но вся логика в одной строке:

Советник должен перерисовывать такой канал на каждом новом баре текущего ТФ. Картинка должна выглядеть примерно так:


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


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

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

Подскажите пожалуйста в чем проблема и поддается ли она решению. Пытался найти ответ поиском, но потерпел неудачу.

Премного благодарен за помощь в любом виде.

Попробуйте просто менять координаты однажды созданного объекта
 
Grigori.S.B:

Столкнулся с тем что графические объекты в МТ5 тестере в режиме визуализации отрисовываются не так, как я предполагал. Тестовый советник упростил до предела, в нем должен строиться прямоугольник по координатам, взятым на основе 50-го и 45-го баров. Код в аттаче, но вся логика в одной строке:

Советник должен перерисовывать такой канал на каждом новом баре текущего ТФ. Картинка должна выглядеть примерно так:


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


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

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

Подскажите пожалуйста в чем проблема и поддается ли она решению. Пытался найти ответ поиском, но потерпел неудачу.

Премного благодарен за помощь в любом виде.

Проверьте код на ошибки, скорее всего ERR_OBJECT_ALREADY_EXISTS.

Надо либо удалять объект перед повторным созданием или 

Slava:
Попробуйте просто менять координаты однажды созданного объекта