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

 
Sergey Chalyshev:

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

Из самого советника распринтовывал входные параметры. Совпадали.

 
fxsaber:

Просто данные оригинального символа идеально совпадают с кастомным. Но кастомный проходит без ошибок, а оригинальный - нет.

Видимо, не понял сути. Скрипт записывает только csv. Как по ним запускается тест?

 
Andrey Khatimlianskii:

Видимо, не понял сути. Скрипт записывает только csv. Как по ним запускается тест?

Скрипт из этих csv создает кастомный символ и оригинальный символ (импортируется на стороне сервера).

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

 
fxsaber:

Скрипт из этих csv создает кастомный символ и оригинальный символ (импортируется на стороне сервера).

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

Об этом нужно было упомянуть.

Механизмов сервера МТ5 по работе с историей не знаю.

 
Советник во фрейм-режиме закончил работу по Abnormal Termination, после чего mqd-файл на 1Гб отказывался читаться. Когда закрыл Терминал, mqd вырос до 2-х Гб. Т.е. Терминал не сделал FileClose для mqd.
 

Во время генетики номер прохода из FrameNext не соответствует номеру прохода из opt-файла.

Например, FrameNext возвращает 10041014291, а opt - 2465.

В чем причина различий? Как сопоставить одно с другим?

В GUI-таблице вместо номера прохода какие-то два числа. Но стоит переоткрыть opt-файла после Оптимизации, как номера проходов становятся пустыми значениями.


Просьба пояснить по ГА.


ЗЫ Научился воспроизводить несоответствие ГА и одиночного. Сохранил стейтмены ГА-проходов через фреймы. Но не могу из 10К проходов идентифицировать тот, что интересует. Потому что Pass в FrameNext и Pass в opt - разные значения.

 
fxsaber:

Во время генетики номер прохода из FrameNext не соответствует номеру прохода из opt-файла.

Например, FrameNext возвращает 10041014291, а opt - 2465.

В чем причина различий? Как сопоставить одно с другим?

В GUI-таблице вместо номера прохода какие-то два числа. Но стоит переоткрыть opt-файла после Оптимизации, как номера проходов становятся пустыми значениями.


Просьба пояснить по ГА.


ЗЫ Научился воспроизводить несоответствие ГА и одиночного. Сохранил стейтмены ГА-проходов через фреймы. Но не могу из 10К проходов идентифицировать тот, что интересует. Потому что Pass в FrameNext и Pass в opt - разные значения.

2 числа - номер поколения, номер особи.

Если пусто, то результат загружен из opt-файла (то есть, результат из предыдущей генетической оптимизации)

Есть два типа генетики

1. пространство параметров ограничивается 64-битным числом. В этом случае вычисление состава параметров по номеру генотипа сводится к набору простых арифметических операций.

2. пространство параметров ограничивается снизу максимальным 64-битным числом, сверху 1024-битным числом. Более сложное преобразование генотипа в набор параметров. Похоже - это ваш случай несовпадения номеров, так как фреймы содержат только 64 младших бит номера прохода.

Как только в оптимизацию добавился новый параметр или старт-степ-стоп существующего изменился, вся нумерация меняется. Поэтому не надо ориентироваться на номер прохода, а только на состав параметров

Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
  • www.mql5.com
Операция инкремента и декремента применяются только к переменным, к константам не применяются. Префиксныe инкремент (++i) и декремент (--k) применяются к переменной непосредственно перед использованием этой переменной в выражении. Могут возникнуть вычислительные проблемы при переносе вышеуказанного выражения из одной среды программирования в...
 
Slava:

2 числа - номер поколения, номер особи.

Если пусто, то результат загружен из opt-файла (то есть, результат из предыдущей генетической оптимизации)

Есть два типа генетики

1. пространство параметров ограничивается 64-битным числом. В этом случае вычисление состава параметров по номеру генотипа сводится к набору простых арифметических операций.

2. пространство параметров ограничивается снизу максимальным 64-битным числом, сверху 1024-битным числом. Более сложное преобразование генотипа в набор параметров. Похоже - это ваш случай несовпадения номеров, так как фреймы содержат только максимум 64-битный номер прохода.

Как только в оптимизацию добавился новый параметр или старт-степ-стоп существующего изменился, вся нумерация меняется. Поэтому не надо ориентироваться на номер прохода, а только на состав параметров

Спасибо. Как тогда сопоставить FrameNext_Pass и opt-Pass?

 
fxsaber:

ЗЫ Научился воспроизводить несоответствие ГА и одиночного. Сохранил стейтмены ГА-проходов через фреймы. Но не могу из 10К проходов идентифицировать тот, что интересует. Потому что Pass в FrameNext и Pass в opt - разные значения.

Нашел причину расхождений!


Сопоставил стейт, полученный через фрейм во время ГА-оптимизации. И стейт одиночного прохода.


Во фрейм-стейте исполнение идет по тикам, которых нет в истории: сразу обратил внимание, что очень много сделок/ордеров, которые совершаются по времени ровно в секунду.

Например, одиночный проход в истории имеет запись в 2019.06.04 02:00:00.206, а фрейм-проход - 2019.06.04 02:00:00.000 (история тиков не имеет тика в это время).


ГА-оптимизация идет на отличной от одиночного прохода истории тиков! И эта история не всегда различная. Например, когда делаю ГА на интервале поменьше, то там все в порядке.


ЗЫ Подозрение на использование таймера отпадают. Нет в советнике таймера.

 
fxsaber:

Нашел причину расхождений!


Сопоставил стейт, полученный через фрейм во время ГА-оптимизации. И стейт одиночного прохода.


Во фрейм-стейте исполнение идет по тикам, которых нет в истории: сразу обратил внимание, что очень много сделок/ордеров, которые совершаются по времени ровно в секунду.

Например, одиночный проход в истории имеет запись в 2019.06.04 02:00:00.206, а фрейм-проход - 2019.06.04 02:00:00.000 (история тиков не имеет тика в это время).


ГА-оптимизация идет на отличной от одиночного прохода истории тиков! И эта история не всегда различная. Например, когда делаю ГА на интервале поменьше, то там все в порядке.


ЗЫ Подозрение на использование таймера отпадают. Нет в советнике таймера.

Тестирование/оптимизация на реальных тиках?

Агенты свои или из облака?

Если тестирование на кастомном символе, то облачные агенты отпадают. Значит, агенты - свои, и можно вытащить их логи, а в логах посмотреть, как синхронизировалась история