Смотри, как бесплатно скачать роботов
Ищи нас в Twitter!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

Библиотека Optimatic - библиотека для MetaTrader 4

Просмотров:
6099
Рейтинг:
(11)
Опубликован:
2009.08.26 04:56
Обновлен:
2015.05.12 11:51
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Некоторое время назад на mql4.com была опубликована замечательная статья - Визуальная оптимизация прибыльности индикаторов и сигналов Сергея Кравчука. Приведенный в ней "индикаторный оптимизатор" позволяет наглядно тестировать выбранную систему сигналов в ручном режиме. Поскольку индикатор пересчитывается только по приходу нового тика, а оптимизацией параметров торговых систем часто приходится заниматься в выходные дни, когда тиков нет, мне пришлось переделать индикатор в скрипт - OptiRunner, который доступен для скачивания там же - в комментариях к указанной статье. Он то и послужил отправной точкой в разработке новой библиотеки - Optimatic.

Прежде чем перейти к описанию Optimatic, хотелось бы обратить внимание на следующее. Оптимизация с помощью индикатора IndicatorOptimizer или скрипта OptiRunner, на мой взгляд, имеет только одно преимущество перед встроенным тестером МетаТрейдера - это визуализация виртуальных сделок на лету, в процессе изменения параметров. Но проблема-то в том, что параметры приходится подбирать вручную, и здесь уже встроенный тестер гораздо удобнее в плане анализа получающихся торговых показателей на целом массиве параметров. Таким образом, мы приходим к тому, что ручная оптимизация хороша для выработки торговой стратегии, а для её последующего каждодневного использования нужно нечто иное. В принципе хотелось бы иметь инструмент, который по аналогии с тестером автоматически подбирает параметры для эксперта в процессе его работы. Именно для этих целей и служит OptimaticLib.

Рассмотрим обычный сценарий. Имеется какая-либо торговая стратегия, например, такой простейший алгоритм как пересечение двух разнопериодных "машек". Она реализована для демонстрации в приложенном эксперте MADemo-OptiBot. Посмотрим, как такая система вела бы себя в мае 2009 по EURUSD на H1, с периодами 10 и 15, которые исходя из каких-то исторических соображений были посчитаны подходящими:


Мы видим убыток. Полностью весь отчет MADemo-OptiBot-disabled (вместе с отчетами для других настроек) можно найти в приложенном архиве. Для работы эксперта в данном режиме, с отключенной библиотекой Optimatic, нужно параметру UseOptimatic поставить значение false.

Допустим у нас есть машина времени, и мы можем, заглянув в будущее, прогнать встроенную оптимизацию МетаТрейдера по данному месяцу. В результате получим лучшие величины параметров - 18 и 35:


ПроходПрибыльВсего сделокПрибыльностьМатожидание выигрышаПросадка $Просадка %
271812.38133.5862.49357.7424.80
269796.84133.8361.30358.6025.37
241768.96143.0554.93378.9426.19

Подставив их в эксперт, получим за май месяц действительно 812 долларов прибыли:


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

Теперь переключим параметр UseOptimatic в эксперте в значение true и вернемся назад в начало мая. Для этого поставим периоды снова равными 10 и 15, а все остальные параметры оставим по-умолчанию. При включенной библиотеке эксперт будет анализировать на истории глубиной StartBar баров все сочетания периодов "машек" от двух указаных до плюс-минус Variation процентов (равно 50% по-умолчанию). И для каждого сочетания рассчитываются показатели прибыльности, просадки и другие (по аналогии с тем, как это делается в OptiRunner), после чего выбирается сочетание с лучшими показателями, отвечающее набору заданных ограничений. Повторный анализ проводится каждый OptimaticPeriod период (по умолчанию 1440), т.е. смена периодов может происходить в мае с началом каждых суток. Полный перечень параметров библиотеки Optimatic приведен чуть ниже. Посмотрим, какой результат получится при включенной оптимизации на лету:


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

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

Параметры библиотеки Optimatic:

  • Variation - процент отклонения параметров от центральных значений (передаются в библиотеку с помощью специальной функции, об этом чуть ниже);
  • MaxDimension - максимальное количество шагов по каждому из параметров между пограничными -50% и +50%; если 0 - то ограничений на размер оптимизируемого многомерного массива параметров нет;
  • MinProfitFactor - минимальное требуемое значение профит-фактора для того, чтобы набор параметров, позволивший его получить, считался приемлемым;
  • MinProfitLossRatio - минимальное требуемое соотношение количеств выигрышей и проигрышей для того, чтобы набор параметров, позволивший его получить, считался приемлемым;
  • DrawdownLimit - минимальная допустимая просадка, проценты;
  • MaxProfitDisbalance - максимальный допустмый дисбаланс в прибыли, т.е. доля максимальной выигрывшей сделки в общей прибыли;
  • MinCntProfit - минимальной требуемое количество выигрышей в день;
  • MaxLossSeries - максимальная допустимая длина серии проигрышей;
  • StartBar - глубина истории в барах, на которой проводится оптимизация;
  • MultiSignal - если true, оценивает повторные однотипные сигналы, например, параллельные покупки и продажи; если false - то виртуальная сделка покупки и продажи может быть одновременно только одна;
  • PrintDetails - выводит подробный лог с объяснением, какие параметры были отброшены и по каким критериям;
  • KeepLastGoodResults - если на очередном периоде оптимизации не находится хороших параметров, то можно взять последние найденные значения из предыдущего периода - для этого необходимо установить KeepLastGoodResults в true;
  • OptimaticPeriod - период, через который библиотека должна запускаться на переоптимизацию параметров (день, неделя, месяц);
  • TP - уровень профита в пунктах; если 0 - стратегия не использует выход по тейку, а только по сигналам;
  • SL - уровень стоп-лосса в пунктах; если 0 - стратегия не использует выход по стоп-лоссу, а только по сигналам;
  • UseOptimapic - включение/отключение библиотеки в эксперте; когда запускается встроенный оптимизатор, OptimaticLic автоматически выключается.

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

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

Программный интерфейс OptimaticLib:

  • int optilibinit(int MaxParams) - вызывается из функции init эксперта с указанием числа оптимизируемых параметров;
  • bool optilibisaverage() - возвращает логический признак того, что последние полученные из библиотеки оптимальные значения параметров были получены усреднением из нескольких других значений с одинаковыми показателями; эксперт может не "доверять" таким параметрам, если "захочет";
  • bool optilibistime() - возвращает признак того, что настало время запуска очередной оптимизации;
  • int optilibstart() - непосредственно выполнение оптимизации параметров;
  • void optilibgetresults(double &result[]) - получение значений оптимизированных параметров;
  • void optilibbanlastresults(bool Reset = false) - позволяет запретить библиотеке выбирать последний предложенный ею набор параметров как оптимальный, для чего эксперт должен вызвать эту функцию с параметром false (или без параметра, т.к. false - значение по-уиолчанию); имеет смысл вызывать, если на практике параметры оказались плохими; если в функцию передано значени true, то запрет на последние параметры снимается; поскольку запрет накладывается только на один набор параметров, данная функция может быть малоэффективной: например, если на каком-то периоде предложенные значения 1 и 10 были помечены как запрещенные, то на следующем периоде библиотека вернет близкие 2 и 9, которые в свою очередь будут запрещены, что автоматически разрешит снова значения 1 и 10; иными словами, функционал наложения запрета на конкретные значения параметров пока реализован в сильно упрощенном виде.

Программный интерфейс эксперта с поддержкой OptimaticLib - для общности предлагается все такие эксперты называть с суффиксом -OptiBot:

  • void OptimaticCallback(int bar, bool &_BuySignal, bool &_SellSignal, bool &_BuyExitSignal, bool &_SellExitSignal) - процедура вычисления сигналов на баре bar;
  • void OptimaticOnInitParams(double &Params[]) - процедура для передачи в библиотеку начальных (центральных) значений оптимизируемых параметров, вокруг которых в диапазоне плюс/минус Variation процентов будет производиться оптимизация;
  • void OptimaticOnSetParams(double InParams[]) - вызывается библиотекой после того, как оптимизация проведены; передает полученные в ходе оптимизации значения;

Среди приложенных файлов находится шаблон Demo-OptiBot.mqt (в силу ограничений сайта, файлы с расширением mqt не могут публиковаться, поэтому шаблон был переименован в mq4, и его следует после скачивания переименовать обратно в mqt, разместив в папке templates), в котором все необходимые функции уже определены и общая логика кода учитывает возможность включения/отключения библиотеки. Все, что нужно дописать в шаблоне, это внутренности функции определения торговых сигналов и функций передачи наборов параметров в и из библиотеки.

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

Следует иметь в виду, что Optimatic является экспериментальной библиотекой (это даже не бета-версия, а демонстрация концепции). Использование Optimatic в реальных торговых системах не рекомендуется. И даже в том случае, если библиотека перейдет со временем в более зрелую стадию, она не может претендовать на звание грааля, поскольку в ней, фактически, проблема выбора параметров торговой системы перерождается в проблему выбора метапараметров оптимизатора. Эта задача не легче, а скорее всего, сложнее, чем исходная. Как её упростить и получить гарантированную прибыль при любых изменениях на рынке - это направление для дальнейших исследований.

Библиотека OptimaticLib использует библиотеку BreakPoint.dll для вывода прогресс-индикатора во время каждого цикла оптимизации.

Точка остановки, пауза и прогресс-индикатор Точка остановки, пауза и прогресс-индикатор

Библиотека содержит 3 простых функции для отладки и контроля за ходом выполнения MQL4.

Price Channel Price Channel

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

Библиотека статистических функций Statistica.mqh Библиотека статистических функций Statistica.mqh

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

History Downloader History Downloader

Советник (+индикатор) для загрузки истории котировок текущего инструмента и ТФ