Да что ж это творится то??? - страница 4

 
SeriousRacoon:
А попробуйте отключить текущую логику и заменить её на обычную машку. Сразу будет видно, где кот порылся, в логике или исполнении.

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

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

эксперимент ТС опровергает вышеозвученные довыды. я бы распечатал (как советует Ренат) по завершению каждого прогона при оптимизации историю сделок в файл с именем состоящим из параметров (для упрощения поиска среди кучи созданных файлов) и то же самое сделать при одиночном прогоне, таким образом можно будет выявить, в каком месте происходит расхождение результатов после оптимизации и одиночного прогона. видится, что это единственный способ докопаться до истины.

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

 
Алексей Тарабанов:

" инициализация практически всех данных происходит в цикле " 

Парни, нельзя инициализировать в цикле. В цикле нужно считать. 

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

 

@Andrey Dik, я вот думаю, как именно прикрутить распечатывание в файл(ы). Думается, писать файл нужно по мере выполнения. А что именно туда писать? Цены - не информативно. Нужно писать некую информацию, которая поможет понять причину рассогласования. Что это за информация? Где её взять? У меня пока нет идей.

 
Сергей Таболин:

@Andrey Dik, я вот думаю, как именно прикрутить распечатывание в файл(ы). Думается, писать файл нужно по мере выполнения. А что именно туда писать? Цены - не информативно. Нужно писать некую информацию, которая поможет понять причину рассогласования. Что это за информация? Где её взять? У меня пока нет идей.

В функции OnTester() создать файл с именем InputName1 + "_" + InputName2 + "_" + InputName3 + "_" + InputName4 + "_" +.... и в него записать историю всех сделок (именно сделок, а не позиций), там будет вся необходимая инфа для анализа, время, цена и прочее. Можно в этот же файл писать ещё что то очень интересное для конкретного советника, что может быть полезным для поиска несоответсвия оптимизатора и одиночного прогона.

Не забудьте делать проверку MQLInfoInteger (MQL_OPTIMIZATION)); что бы дописать постфикс в имени файла при одиночном прогоне, дабы не затереть такой же файл после оптимизации.


ЗЫ. если получите два различных по содержанию соответсвующих файла, то этого будет недостаточно разработчикам, а лишь даст направление где Вам копать далее, нужно будет привести воспроизводимый проблему код. надеюсь, проблема в коде советника.

 
Andrey Dik:

В функции OnTester() создать файл с именем InputName1 + "_" + InputName2 + "_" + InputName3 + "_" + InputName4 + "_" +.... и в него записать историю всех сделок (именно сделок, а не позиций), там будет вся необходимая инфа для анализа, время, цена и прочее. Можно в этот же файл писать ещё что то очень интересное для конкретного советника, что может быть полезным для поиска несоответсвия оптимизатора и одиночного прогона.

Не забудьте делать проверку MQLInfoInteger (MQL_OPTIMIZATION)); что бы дописать постфикс в имени файла при одиночном прогоне, дабы не затереть такой же файл после оптимизации.


ЗЫ. если получите два различных по содержанию соответсвующих файла, то этого будет недостаточно разработчикам, а лишь даст направление где Вам копать далее, нужно будет привести воспроизводимый проблему код. надеюсь, проблема в коде советника.

Спасибо. Буду делать.

 
Сергей Таболин:

Спасибо. Буду делать.


 

 
Сергей Таболин:

Спасибо. Буду делать.

проверьте инициализацию переменных, объявленных глобально.

если инициализации не в OnInit(), а при объявлении и если в коде идёт изменение их значений.

 
Andrey F. Zelinsky:

проверьте инициализацию переменных, объявленных глобально.

если инициализации не в OnInit(), а при объявлении и если в коде идёт изменение их значений.

инициализированы или нет переменные, но результаты должны совпадать в обоих режимах тестера (оптимизация и одиночных прогон)

 
Andrey Dik:

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

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

эксперимент ТС опровергает вышеозвученные довыды. я бы распечатал (как советует Ренат) по завершению каждого прогона при оптимизации историю сделок в файл с именем состоящим из параметров (для упрощения поиска среди кучи созданных файлов) и то же самое сделать при одиночном прогоне, таким образом можно будет выявить, в каком месте происходит расхождение результатов после оптимизации и одиночного прогона. видится, что это единственный способ докопаться до истины.

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

В общем, согласен с вами. Если сов действительно не делает веток в зависимости от окружения (от того, запущен он в оптимизаторе или в тестере), то единственное, что можно предположить - в режиме оптимизации какие-то вызовы апи в тестере слишком оптимизированы ради скорости, пардон за тавтологию. Возможно, это зависит от флагов в используемых функциях. Подробный лог сделок и результатов выполнения ordersend поможет, да.

Лично не сталкивался с таким.

 
Andrey Dik:

инициализированы или нет переменные, но результаты должны совпадать в обоих режимах тестера (оптимизация и одиночных прогон)

объявите переменную глобально и инициализируйте её при объявлении, например, int kk=0;

затем в OnTick() распринтуйте и поменяйте значение, например, Print("kk=",kk); ++kk;

затем поменяйте ТФ или параметры -- и посмотрите на результат.