Ошибки, баги, вопросы - страница 504

 
Vigor:

Есть ли у оптимизатора кода ограничения на объем объектного дерева?

При увеличении количества объектов получаю ошибку "tree optimization error" на этапе компиляции.

P.S. В режиме отладки компиляция проходит.

Можете приложить пример исходного кода в тикете сервисдеска? После проверки код будет удален.

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

 
Valmars:

   Во-первых, какой смысл принудительно закачивать историю в тестере ? Тестер сам загрузит необходимую и доступную историю с сервера, если к ней будут запросы в коде или торговые операции, по необходимым инструментам. Так как у Вас код пустой, то тестеру нет необходимости моделировать тики по другим инструментам, кроме того символа, на котором происходит тестирование. Его то историю тестер и загрузил. А раз нет истории (в тестере), то и получаете в итоге 0.

  Во-вторых, даже если дополнить код обращением к истории по всем символам, вряд ли закачка всей доступной истории по всем символам пройдёт успешно, где нибудь произойдёт сбой. Так как тестер использует базу котировок терминала, в нём и нужно закачивать необходимую историю.
В том то и дело что когда тестер пытается моделировать тики по другим инструментам лог начинает просто заваливать сообщениями типа contains 0 M1 records так как истории на эту дату нет и объем лога вырастает до неимоверных объемов и что бы избежать этих ошибок мне надо знать дату начала истории, а при запросе функция SeriesInfoInteger(symbol,0,SERIES_SERVER_FIRSTDATE) возвращает 0
 

Подскажите, что означают значения в столбце Результат, когда выбрана целевая функция Balance + min Drawdown

 

 
tol64:

Подскажите, что означают значения в столбце Результат, когда выбрана целевая функция Balance + min Drawdown

 

 

если бы заглянули в справку терминала то многие вопросы бы отпали сами собой, там все написано

Критерий оптимизации

Критерий оптимизации — некий показатель, значение которого определяет качество тестируемого набора входных параметров. Чем больше значение критерия оптимизации, тем лучше оценивается результат тестирования с данным набором параметров. Выбор данного показателя осуществляется на вкладке "Настройки", справа от поля "Оптимизация".

Критерий оптимизации необходим только для генетического алгоритма.

Доступны следующие критерии оптимизации:

  • Максимальный баланс — показателем оптимизированности является максимальное значение баланса;
  • Баланс + максимальная прибыльность — показателем является максимальное значение произведения баланса на прибыльность;
  • Баланс + максимальное матожидание выигрыша — показателем является произведение баланса на матожидание выигрыша;
  • Баланс + минимальная просадка — в данном случае помимо значения баланса учитывается уровень просадки: (100% - Просадка)*Баланс;
  • Баланс + максимальный фактор восстановления — показателем является произведение баланса на фактор восстановления;
  • Баланс + максимальный коэффициент Шарпа — показателем является произведение баланса на коэффициент Шарпа;
  • Пользовательский критерий оптимизации — при выборе данного параметра в качестве критерия оптимизации будет учитываться значение функции OnTester() в советнике. Данный параметр позволяет пользователю использовать любой собственный показатель для оптимизации.


 
sergey1294:

Спасибо. )) Почему то думал о критерии Минимальная просадка, а не Баланс + минимальная просадка. ))

 
sergey1294:
В том то и дело что когда тестер пытается моделировать тики по другим инструментам лог начинает просто заваливать сообщениями типа contains 0 M1 records так как истории на эту дату нет и объем лога вырастает до неимоверных объемов и что бы избежать этих ошибок мне надо знать дату начала истории, а при запросе функция SeriesInfoInteger(symbol,0,SERIES_SERVER_FIRSTDATE) возвращает 0

   Насколько я понимаю, тестер, прежде чем начать тестирование, создаёт рыночное окружение для подключенного счёта (последнего подключенного при отсутствии связи с сервером), проверяет синхронизацию данных с сервером (опять же, при наличии подключения), закачивает недостающие котировки со стартовой даты тестирования (при наличии подключения), формирует тестовую последовательность котировок для всех необходимых символов, и только потом начинает тестирование. Что, если ему не удалось загрузить необходимую историю (например, из-за отсутствия истории на сервере или из-за отсутствия связи с сервером ) ? Он Вам об этом и сообщает честно. На 'нет', и суда нет.

   Далее, Вы хотите получить начальную дату истории на сервере (в тестере). Похоже, это свойство не входит в рыночное окружение тестера, хотя его можно было сохранить с сервера. Ошибка ли это? Думаю, нет. Ведь после начала тестирования тестер уже не может обратиться к серверу (через терминал) для закачки необходимых Вам котировок. Всё, что доступно, уже загружено тестером на этапе инициализации процесса тестирования и тестовая последовательность уже сформирована и её нельзя изменить. Вместо SeriesInfoInteger(symbol,0,SERIES_SERVER_FIRSTDATE), в Вашем случае, думаю, можно использовать SeriesInfoInteger(symbol,0,SERIES_FIRSTDATE), она должна работать в тестере.

 
Renat:

Можете приложить пример исходного кода в тикете сервисдеска? После проверки код будет удален.

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

Хорошо, приложил 2 варианта с "code generation error" и "tree optimization error". Функция onInit действительно длинная (~1000 строк генерированный код).

Тикет #217917

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Vigor:

Хорошо, приложил 2 варианта с "code generation error" и "tree optimization error". Функция onInit действительно длинная (~1000 строк генерированный код).

Тикет #217917

Спасибо, в понедельник будем разбираться.
 
Valmars:

   Насколько я понимаю, тестер, прежде чем начать тестирование, создаёт рыночное окружение для подключенного счёта (последнего подключенного при отсутствии связи с сервером), проверяет синхронизацию данных с сервером (опять же, при наличии подключения), закачивает недостающие котировки со стартовой даты тестирования (при наличии подключения), формирует тестовую последовательность котировок для всех необходимых символов, и только потом начинает тестирование. Что, если ему не удалось загрузить необходимую историю (например, из-за отсутствия истории на сервере или из-за отсутствия связи с сервером ) ? Он Вам об этом и сообщает честно. На 'нет', и суда нет.

   Далее, Вы хотите получить начальную дату истории на сервере (в тестере). Похоже, это свойство не входит в рыночное окружение тестера, хотя его можно было сохранить с сервера. Ошибка ли это? Думаю, нет. Ведь после начала тестирования тестер уже не может обратиться к серверу (через терминал) для закачки необходимых Вам котировок. Всё, что доступно, уже загружено тестером на этапе инициализации процесса тестирования и тестовая последовательность уже сформирована и её нельзя изменить. Вместо SeriesInfoInteger(symbol,0,SERIES_SERVER_FIRSTDATE), в Вашем случае, думаю, можно использовать SeriesInfoInteger(symbol,0,SERIES_FIRSTDATE), она должна работать в тестере.


То же самое функция возвращает ноль. Идентификатор SERIES_TERMINAL_FIRSTDATE тоже пробовал. Вывод один функция SeriesInfoInteger в тестере не работает. Она работает только для того инструмента на котором запущен тест. Может у кого есть какие мысли как запустить тест на инструментах с различной датой начала истории при выборе интервала "Вся история".
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту - Документация по MQL5
 
Опять время терминала перескочило на GMT+0, а должно быть GMT+1, обсуждалось ведь уже. Поправьте пожалуйста.
Причина обращения: