четверг, 19 марта 2015 г.

Оптимизируем форекс-советника.

Приветствую вас, читатели моего блога.


В прошлый раз мы соорудили первого торгующего робота, проверили его работу на истории и даже получили прибыльный результат. Сколько там было? А, плюс 330 долларов. Вопрос - а можно больше? Давайте попробуем выяснить сколько максимально можно было бы выжать из нашего стартового счета в 1000 USD с учетом торговли фиксированным минимальным лотом в 0.01 за период с ноября 2006 года по текущий момент.

Тестер стратегий

В этом нам поможет встроенный в платформу Metatrader механизм исторического тестирования и оптимизации стратегий. Его можно вызвать через меню “Вид > Тестер стратегий” или нажав соответствующую иконку на панели управления . Выглядит окно тестера вот так:


Скрин 1


Сразу прокомментирую поле “Модель”. Наш советник в текущем его состоянии можно тестировать и оптимизировать только выбрав для этого поля значение “По ценам открытия …”, во всех остальных режимах результаты тестирования будут некорректны. Позже мы усовершенствуем код робота и добьемся работы во всех режимах, но пока в целях упрощения оставим все как есть.


Еще я выставляю фиксированный спред в размере 30 новых пунктов. Это средний спред у моего брокера. Вы можете поставить свое значение под свои условия, ну или использовать “Текущий”.


Остальные поля интуитивно понятны: выбираем нужного нам советника, валютную пару (“Символ”), дневной период и вперед - жмем “Старт”!


Дорабатываем робота

Вот только пока вперед мы далеко не уедем, сможем лишь посмотреть работу советника на исходных периодах наших скользящих средних - 14 и 28 дней. Как заставить его перебрать для нас разные комбинации периодов быстрой и медленной SMA? Нужно ввести в код робота две переменные, назову их ShortPeriod и LongPeriod соответственно. Для этого в самое начало кода надо добавить следующие строки:




Очень похоже на обычное объявление переменной внутри программы, которое мы применяли в прошлый раз, вот только слово extern указывает компилятору, что этими переменными можно будет управлять извне программы, а именно - задавать им любое значение на усмотрение пользователя. Именно их и будет в дальнейшем перебирать тестер стратегий.


Переменные мы задали, но теперь их еще нужно применить в правильном месте программы, а именно при вычислении значений SMA:




Понятно, что номера строк в программе будут не 1..4, нужно найти исходный блок вычисления SMA и заменить фиксированные периоды на только что добавленные переменные.


Полностью вторая версия нашего советника будет выглядеть вот так:




Настраиваем тестер

Теперь для каждой переменной нужно задать диапазоны, в пределах которых мы попросим тестер просчитать все комбинации. Для этого в окне тестера жмем “Свойства эксперта” и переходим на закладку “Входные параметры”:


Скрин 2 


Здесь ставим галки у обеих переменных и задаем диапазоны. Мне вот захотелось выставить от 1 до 200. Вы можете попробовать любые другие.


Кроме того на закладке “Тестирование” задаем стартовый уровень депозита (у меня 1000 USD) и снимаем галку “Генетический алгоритм” (о нем чуть позже).


Жмем “ОК”, возвращаемся в окно тестера. Там ставим заветную галку “Оптимизация”, которая и заставляет тестер произвести перебор всех комбинаций, и вот теперь смело жмем “Старт”. А, стоп, машина! Сначала проверьте, что ваш терминал подключен к брокеру - индикатор состояния соединения в нижнем правом углу терминала должен быть зеленым, иначе не видать нам исторических данных и, соответственно, расчетов.


Вот теперь совсем уж уверенно, но очень аккуратно :) жмем “Старт”.


Смотрим, что получилось

Через несколько секунд внизу окна тестера поползет зеленая полоса прогресса. Пока она доползет до конца, можно переключиться на закладку “График оптимизации”, через “правокнопочное” меню выбрать “Двумерная поверхность” и в реальном времени наблюдать, как тестер рисует причудливую картину. Если вы использовали примерно тот же диапазон времени для тестирования, что и я, в итоге у вас получится что-то вроде такой “карты”:


Скрин 3


Что это? А это тот самый график оптимизации, причем псевдо 3D. По осям тестер откладывает значения наших ShortPeriod и LongPeriod, а на пересечении ставит зеленые точки. При этом насыщенность зеленого тем выше, чем бОльшая прибыль получилась для соответствующей пары значений переменных.


Первое, что бросается в глаза, - это выраженная диагональ от (1,1) к (200,200). Это и понятно - наша стратегия рассчитана на то, что ShortPeriod будет меньше, чем LongPeriod. Хотя видно, что в некоторых случаях прибыль получается даже при обратной ситуации (см. верхний правый угол графика).


Но по насыщенно зеленому пятну в районе (70,100) видно, что оптимум где-то там. Давайте разберемся более детально.


Для этого переходим на закладку “Результаты оптимизации” и видим:


Скрин 4


Видим, что максимальная прибыль получилась для комбинации (59,99). Давайте зададим именно эти параметры в свойствах советника и посмотрим какой график баланса с ними получится. Кстати, можно не делать это руками, а просто клацнуть правой лапкой мыши по нужной нам строке в “Результатах оптимизации” и выбрать “Установить входные параметры”. При этом галка “Оптимизация” также автоматически снимется, и останется только нажать “Старт”.


Скрин 5

Сравниваем что было и что стало

Теперь верну исходные (14,28), чтобы сравнить два графика:


Скрин 6


Оптимизированный вариант сделал 19 сделок и заработал 1235 USD (в среднем 65 баксов за сделку).
Исходный вариант сделал 89 сделок и плюс 350 USD (меньше 4 баксов на сделку). Спросите “было же 330?!”? Так это когда было! :) В момент написания предыдущей статьи, а доллар то того - валит, даже с учетом вчерашнего “отскока”.


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


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


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


На сколько успешный результат мы получили?

Кто-то может спросить: “Ну и что такое 1235 долларов за 8,5 лет? Это ж всего 14,5% годовых, лучше просто положить деньги в банк.”. Надо понимать, что мы использовали минимальный торговый лот 0,01. Хотите увеличить прибыль, увеличивайте и лот. Возможно, вы захотите сделать лот динамическим. Тут на что хватит вашей финансовой фантазии.


Очевидно, при увеличении лота будут расти и риски. Да, для этого существует мани-менеджмент. Его надо крепко знать и уметь грамотно применять, если не хотите пролететь. Но это уже офтопик для моего блога, Сеть полна материалами на тему ММ.


Кстати, потренируйтесь в самостоятельной доработке советника - добавьте еще одну внешнюю переменную Lot и пооптимизируйте вместе с ней, обращая внимание на статистику рисков: уровни просадки, процент убыточных сделок и т.п. Постарайтесь найти баланс между потенциалом прибыли и риском.


Будут вопросы - обязательно пишите в комментарии.


За сим откланиваюсь.


Ваш Игорь Шепелев.

P.S.:
Забыл рассказать, что такое "Генетический алгоритм". Это способ быстрого поиска экстремума на "карте" графика оптимизации. С одной стороны он существенно ускоряет процесс оптимизации, так как не перебирает все возможные комбинации параметров, с другой - не гарантирует поиск лучшего экстремума и при разных прогонах может давать совершенно различные результаты. Пользоваться им или нет - ваш выбор. Я, как правило, не пользуюсь.

Комментариев нет:

Отправить комментарий