Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Причина основной тормознутости МТ5 - это имитация полного торгового окружения. В подавляющем большинстве советников, такой точной имитации не нужно. Отличным выходом для таких советников будет переход на упрощенный режим тестирования, с простым моделированием торгового окружения. Однако такой возможности нет. Но, если написать свой, упрощенный тестер стратегий, и запустить его в режиме математических вычислений, скорость оптимизации будет огонь! Вот о чем предлагаю подумать я, всем, кто хочет кардинально повысить скорость оптимизации советников.
В CStrategy торговые операции осуществляются через CTrade напрямую. Т.е. в CStrategy нет вообще никакой своей торговой логики. В тестовом эксперте я не увидел иной торговой логики, чем открытие/закрытие позиции через N секунд. Исторических позиций CStrategy также не хранит, поэтому данный пример в CStrategy не реализуем к сожалению.
CTrade тоже не хранит историю, но то не помешало реализовать вариант через него.
То что ООП код выполняется медленней процедурного кода, лично мне ни о чем не говорит. Давайте посуществу: какие методы CTrade являются бутылочным горлышком? Почему? Что говорит профилирование этих методов? Как в тестере Вы определяете медленные участки кода?
Не анализировал причины тормозов СБ, но не думаю, что дело в ООП, т.к. MT4Orders пусть и минимально, но тоже через ООП написан. После заявки в СД разработчики ускорили работу СБ. Подкрутили ли саму СБ или компилятор - не в курсе.
Сам сначала анализирую абсолютные тормоза, затем - относительные
В MetaTrader 5 есть отличная функция профайлинга советника на исторических данных. Но, помимо того, что она работает медленно (в визуальном режиме), конечный результат предоставляется в относительных единицах измерения, т.е. сравнить производительность в абсолютных показателях невозможно.
Причина основной тормознутости МТ5 - это имитация полного торгового окружения. В подавляющем большинстве советников, такой точной имитации не нужно. Отличным выходом для таких советников будет переход на упрощенный режим тестирования, с простым моделированием торгового окружения. Однако такой возможности нет. Но, если написать свой, упрощенный тестер стратегий, и запустить его в режиме математических вычислений, скорость оптимизации будет огонь! Вот о чем предлагаю подумать я, всем, кто хочет кардинально повысить скорость оптимизации советников.
Через кастомные символы можно добиться ускорения на порядки при полной имитации. Собственно, даже сейчас в бета-режиме кастомных символов этого возможно добиться. Так и буду делать несколько позже.
MT4Orders:
MQL5 оказался медленнее библиотеки, написанной на том же MQL5! Стал разбираться и нашел причину, сделав такую замену
MQL5-вариант советника стал показывать такую производительность
Тупая замена PositionSelect на PositionGetTicket поднимает скорость бэктеста на 7%!
Отставание MT4Orders от максимально оптимизированного чистого MQL5 менее процента.
Места распределились следующим образом
Подкрутил совсем немного саму СБ (куски СБ, которые использовал советник), не изменяя функционал и универсальность. Стала не 84%, а 97%.
Кто использует СБ, берите на заметку потенциальную возможность ускорения.
Стало интересно сравнить производительность одного и того же мультивалютного MT4-советника, сконвертированного разными способами.
Полноценная конвертация
и кустарная (быстрая) конвертация
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Советники: Spreader
fxsaber, 2016.09.03 11:18
Результаты замера производительности.
Полноценный вариант
Кустарный
Кустарный значительно проигрывает. Причина простая - если хочется быстрых таймсерий, то конвертировать в лоб MT4-таймсерии нельзя
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: CPrice
fxsaber, 2016.08.28 10:36
Посмотрите такой вариант
Можно, как в MT4, вызывать Open[bar], High[bar], Time[bar], Volume[bar] и т.д. А также iHigh(...), iClose(...) и другие.
Нужно использовать (не только для кустарных, но и для полноценных вариантов) решения, подобные этому.
Кустарный значительно проигрывает. Причина простая - если хочется быстрых таймсерий, то конвертировать в лоб MT4-таймсерии нельзя.
Ошибочный вывод. Причина тормозов совсем в другом. Вставляем в каждый из MT5-вариантов всего одну строку
И замеряем заново
Полноценный ускорился на 67%, кустарный - 108%! По итогу разрыв теперь небольшой - полноценный быстрее кустарного на ~11%. Там уже, похоже, причина в ООП-оверхеде.
Но главное не в этом. Одной строкой получилось ускорить советники! И это в Оптимизаторе, где Comment никакой роли не играет.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: TesterBenchmark
fxsaber, 2017.07.24 14:13
торговая СБ в 1.5 раза медленнее чистого MQL5!
Об этом было написано летом вместе с заявкой в СД. Удивительно, что все ровно! Или это логично? Как можно говорить о супер-скорости тестера, когда почти все советники (используют СБ) проваливаются в скорости, съедают деньги в Облаке и т.д.?! Видимо, это нормально.
Исходный код упростил, выкинув работу с Историей и MT4Orders. Оставил только чистый MQL5 и СБ
Результат СБ
Результат чистого MQL5
Все в те же 1.5 раза! Но лохамвсем пофиг, продолжаем использовать супер-СБ.
Все в те же 1.5 раза! Но лохамвсем пофиг, продолжаем использовать супер-СБ.
Вот такие правки в СБ
чудесным образом ускоряют советники на СБ. Это сложно?
Честно говоря, торговую СБ, не меняя логики API, переписать надо почти полностью. Что не кусок - то плохо.