Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Прежде всего, спасибо Вам за ваши библиотеки! Может быть я сильно туплю, но TesterCache выдаёт информацию для пользователя. Я хочу получить данные форварда по лучшему проходу из бэка внутри эксперта, желательно только средствами MQL. Как конечную цель, я хочу автоматизировать процесс форвард оптимизации, как в этой статье. Но библиотека, которая там продаётся мне не подойдёт - т.к. нужно перебирать все пары. Вот и собираю кусочки мозаики.
Вот я уже несколько лет хочу добавить в свой робот автоматическую само-оптимизацию, но недостатка времени не позволяет ее быстро реализовать.
Для само-оптимизации лучшее решение, это сделать собственный виртуальный оптимизатор.
Практика показывает что после оптимизации достаточно иметь такие результаты, как прибыльность, макс. просадка, количество сделок и еще можно добавить фактор восстановления и найти из них "седловую точку", т.е. нужную комбинацию входных параметров.
А планируется всё это сделать так: каждую субботу, когда рынок закрыт, автоматически подключается виртуальная само-оптимизация на всех парах (можно для 20-и), где все результаты накапливаются в массивах и в соответствующих структурах, так как убраны все торговые и некоторые другие функции MQL5.
На основе полученных данных, некоторым парам будет разрешен или не разрешен открыть новые ордера, а также автоматически выбирается степень риска.
И все эти параметры записывается в файл, для дальнейшего использования в реальной торговле. А для тестирования достаточно иметь реальные тиковые данные от 1-365 дней.
Вот я уже несколько лет хочу добавить в свой робот автоматическую само-оптимизацию, но недостатка времени не позволяет ее быстро реализовать.
Для само-оптимизации лучшее решение, это сделать собственный виртуальный оптимизатор.
Практика показывает что после оптимизации достаточно иметь такие результаты, как прибыльность, макс. просадка, количество сделок и еще можно добавить фактор восстановления и найти из них "седловую точку", т.е. нужную комбинацию входных параметров.
А планируется всё это сделать так: каждую субботу, когда рынок закрыт, автоматически подключается виртуальная само-оптимизация на всех парах (можно для 20-и), где все результаты накапливаются в массивах и в соответствующих структурах, так как убраны все торговые и некоторые другие функции MQL5.
На основе полученных данных, некоторым парам будет разрешен или не разрешен открыть новые ордера, а также автоматически выбирается степень риска.
И все эти параметры записывается в файл, для дальнейшего использования в реальной торговле. А для тестирования достаточно иметь реальные тиковые данные от 1-365 дней.
Ещё недешевый VPS нужно иметь и стратегию, независимую от цикличности рынка.
при историческом и при форвардном тестах, у робота всегда вызываются методы OnInit и OnDeinit. Т.е. он удаляется и инстанцируется вновь. Этим и можно пользоваться (я так делаю выгрузку отчетов оптимизации).
А результаты оптимизации можно самому получить обратившись к журналу торгов.Я тут немного разобрался: в форварде вызываются все функции. Просто признак форвард-оптимизации MQLInfoInteger(MQL_FORWARD) никогда не бывает true. Похоже на косяк терминала. Я добавил строчку
в функции OnInit(), OnDeinit(), OnTesterInit(), OnTester(), OnTesterDeinit(). Вот что получилось :
2019.08.16 19:14:05.377 G_Spring_testsoft (USDCHF,H1) OnTesterInit 0
Работа функции Print() тоже - кривая. В OnInit(), OnDeinit() и OnTester() вообще не работает. Попробую воспользоваться вашим методом.2019.08.16 19:14:11.897 G_Spring_testsoft (USDCHF,H1) OnTesterDeinit 0
2019.08.16 19:14:11.897 G_Spring_testsoft (USDCHF,H1) OnTesterDeinit(): бэк-тэст
Я тут немного разобрался: в форварде вызываются все функции. Просто признак форвард-оптимизации MQLInfoInteger(MQL_FORWARD) никогда не бывает true. Похоже на косяк терминала. Я добавил строчку
в функции OnInit(), OnDeinit(), OnTesterInit(), OnTester(), OnTesterDeinit(). Вот что получилось :
2019.08.16 19:14:05.377 G_Spring_testsoft (USDCHF,H1) OnTesterInit 0
Работа функции Print() тоже - кривая. В OnInit(), OnDeinit() и OnTester() вообще не работает. Попробую воспользоваться вашим методом.2019.08.16 19:14:11.897 G_Spring_testsoft (USDCHF,H1) OnTesterDeinit 0
2019.08.16 19:14:11.897 G_Spring_testsoft (USDCHF,H1) OnTesterDeinit(): бэк-тэст
я говорил про методы OnDeinit а не про OnTesterDeinit. У меня все нормально отрабатывает. Я фреймами не пользуюсь, вместо них однажды собирал в методе OnDeinit - базу данный sqlite
я говорил про методы OnDeinit а не про OnTesterDeinit. У меня все нормально отрабатывает. Я фреймами не пользуюсь, вместо них однажды собирал в методе OnDeinit - базу данный sqlite
sqlite: такого я ка не умею.
Итого: всё бы получилось, если бы можно было распознать форвард-оптимизацию в OnTester() и OnDeinit(). Попробую поработать с файлами отчётов через библиотеку TesterCache.
OnTester(): На каждом проходе пишем нужный TesterStatistics() оптимизации в фрейм - FrameAdd() --> Далее идёт невыполнимая задача собрать значения и номера всех форвард-проходов в таблицу (файл). При форвард-оптимизации не генерируются фреймы и как я уже упоминал нет функций OnTester(), OnTesterPass(), OnTesterDeinit() и OnTesterInit(). Теоретически это можно сделать в OnDeinit(). в нём работают TesterStatistics() и признак форварда MQLInfoInteger(MQL_FORWARD). Но OnDeinit() вызывается в каждом агенте отдельно. Записывая данные в файл мы получаем кучу разных файлов по числу агентов тестирования, неподдающуюся объединению. При смене периода они ещё и удаляются. В OnDeinit() пишется строка в лог с номером прохода и результатом форварда. Может быть можно прочитать последнюю строку лога --> После прогона форварда вызывается OnTesterDeinit(). Здесь можно найти лучший результат бэк-теста по фреймам, найти синхронный форвард по номеру прохода из таблицы и записать в итоговый файл результат.
Вот такая пока получается стратегия Walk-Forward оптимизации. Может воззрит, на отмеченные желтым проблемы, разработчик MetaQuotes, и расскажет как их решить. Ведь он же смог! Есть ещё лог (.log) тестера, в котором всё есть даже с номерами проходов, но чтобы вынуть из той каши, данные нужен искуственный интеллект. Продолжаю искать.
Ничего пока не получается. Вот сухой остаток для текущего билда 2085:
Получить данные из бэк-тэста проблемы не составляет, но до тех пор пока не включен форвард - сразу перестаёт работать ф. FrameNext() в OnTesterDeinit().
Признак MQLInfoInteger(MQL_FORWARD) можно получить только в OnInit(). Польза от этого ==0, т.к. в форвард проходах не пишуться фреймы и не работает TesterStatistics().
Операции с файлами не получаются из за ограничения "песочниц".
Реализация сценария без использования штатного форварда, с выделением части периода для форварда, тоже не получается. Я не знаю как заставить TesterStatistics() воспринимать только часть периода тестирования, при том, чтобы позиции продолжали открываться.
Откладываю этот вопрос в долгий ящик до нисходения до него техподдержки или совершенствования тестера.