UMNICK - Adaptive Advisor
Последние два месяца MQL-программисты настолько поглощены новостью о выходе нового терминала МТ5, что в большинстве своем уже забыли о такой реалии жизни как МТ4 и, соответственно, MQL4. Не удивительно, что программ для МТ4 стало появляться на порядок меньше, а следовательно находить что-то, заслуживающее внимание, стало труднее. Тем не менее, предмет испытаний найти удалось. Выделился он сразу по двум параметрам: названию (Umnick) и типу (адаптивный advisor). Адаптация робота под поведение рынка всегда представляла большой интерес, так как в идеале позволяет создать эдакий вечный двигатель, который будет работать всегда и везде (утопия, конечно). Ну а название сразу же настраивает на снисходительное отношение к результатам. Дескать, чего же вы хотели от этого «умника»? Кстати, автором «Умника» выступает Виктор (VictorArt).
Авторское описание сути процесса заинтриговывает с первых же строк: «Общая Теория Торговли (ОТТ): для извлечения прибыли следует торговать собственную функцию, синхронизируя её с рынком». После прочтения этого выражения появляется желание с калькулятором наперевес грызть твердейший гранит науки «Высшая математика». Но следующее предложение заставляет немного остыть: «В приложенном советнике демонстрируются простейшие принципы использования ОТТ и адаптации к рынку». Все же «простейшие»… Тогда это нам тем более по зубам. Тем не менее, для соблюдения пущей строгости, VictorArt приводит скрин патента, защищающего компоненты Цифрового Мозга, элементы которого продемонстрированы в советнике. Ну что же, убедительно.
Но перейдем к тестированию сего чуда кибернетической мысли. Автор предлагает период Н4 и пару EURUSD за этот (2009) год (см. рис. 1):
Рис. 1. Авторские результаты тестирования на паре EURUSD.
К сожалению, 54 сделки – не тот объем, по которому можно о чем-то судить. Мы пойдем дальше и проверим советника на более глубокой истории – с 2006 года (см. рис. 2):
Рис. 2. Результаты проверки за 01.01.2006 – 30.10.2009.
Здесь уже не такая радужная картина (1256 долларов прибыли против 1897 долларов просадки). К тому же, все это за неполных четыре года (средняя доходность около 300 пунктов в год).
Как всегда, пробуем разобраться в сути кода советника и, при возможности, пытаемся его улучшить. Ну а в идеале хотелось бы улучшить результаты тестирования.
Сначала необходимо найти участок кода, который отвечает за принятие решения о совершении сделки. Как ни странно, он оказывается очень компактным:
bool NextBar()
{
bool rt = false;
double price = (Open[1]+High[1]+Low[1]+Close[1])/4;
if ( MathAbs(price-pricePrev) >= StopBase )
{
pricePrev = price;
rt = true;
}
return(rt);
}
Если последняя сделка была убыточной, то направление следующей сделки изменяется на обратное. Если же сделка была прибыльной, то направление сохраняется. Никаких других критериев открытия длинной или кроткой сделок в советнике не предусмотрено.
Уровни стопа и профита в результате рассчитываются как среднее арифметическое из соответствующих массивов arrayProfit и arrayLoss. Правда, среднее берется при условии, что общая сумма значений каждого массива превышает половину значения StopBase.
После открытия сделки никакого дополнительного анализа для получения сигналов принудительного закрытия советник не производит. Ожидается срабатывание стопа или профита сделки.
На мой взгляд, именно отсутствие критерия задания направления сделки приводит к не очень хорошим результатам при тестировании советника. Поэтому первым изменением кода будет использование одного из индикаторов МТ4. Долго выбирать из доступного множества нам не придется. Для этого достаточно заглянуть в 53-й номер журнала от 12.10.2009 и пролистать его до 90-ой страницы, на которой расположена сводная таблица по всем разработанным в рубрике «В поисках успешной стратегии» за целый год экспертам. На первом месте красуется стратегия, основанная на индикаторе Parabolic SAR. Ее результаты подтверждены по парам USDJPY, GBPUSD и EURUSD не только тестами на истории, но и форвард-тестами за 2009 год.
Поэтому в тело функции NextBar вставляем следующий код:
Signal = 0;
double PSAR1 = iSAR(Symbol(), 0, SARStep, SARMaximum, 1);
double PSAR2 = iSAR(Symbol(), 0, SARStep, SARMaximum, 2);
if (PSAR1 < Open[1] && PSAR2 > Open[2])
{
Signal = 1;
return(True);
}
if (PSAR1 > Open[1] && PSAR2 < Open[2])
{
Signal = -1;
return(True);
}
return(False);
Теперь у нас всегда будет задано направление желаемой сделки, что немного уменьшит фактор случайности в торговле. Вместе с направлением у нас добавится два входных параметра, определяющих вид индикатора Parabolic SAR – SARStep и SARMaximum. Еще год назад для каждой валютной пары были подобраны свои параметры indicator, которые будем использовать и сегодня при тестировании новой версии «Умника».
Следующим изменением будет приведение значения StopBase к динамическому состоянию, так как в оригинале значение StopBase было жестко зафиксировано на всей протяженности истории, что также не придавало советнику маневренности.
Для достижения эффекта динамичности достаточно привязать StopBase к средней волатильности валютной пары, за что отвечает индикатор ATR:
StopBase = iATR(Symbol(), 0, 24, 1);
Все остальные изменения можно назвать косметическими, цель которых — устранить мелкие недоработки в советнике, не позволяющие использовать его онлайн. Правда, один недостаток все же останется – при перерыве в работе эксперта (выключение терминала или даже компьютера) будет теряться статистика, собранная по последним восьми сделкам, которую со временем нужно будет восстановить.
В результате получаем вторую версию «Умника», которую будем тестировать уже на таймфрейме Н1 и периоде 01.01.2006 – 31.10.2009 (см. рис. 3-6). Так, для EURUSD параметры должны быть такими: SARStep = 0.01, SARMaximum = 0.01.
Рис. 3. Результаты тестирования второй версии «Умника» на валютной паре EURUSD.
Против оригинальных результатов итог ухудшился. Прибыли нет совсем, а просадка зашкаливает за 2000 долларов. Однозначно в корзину.
Для пары USDCHF брались такие параметры: SARStep = 0.009, SARMaximum = 0.09.
Рис. 4. Результаты тестирования второй версии «Умника» на валютной паре USDCHF.
Здесь прибыль уже имеется: 2904 долларов чистой прибыли против 1208 долларов просадки (ФВ = 2.40). Но, исходя из того, что рост прибыли имел не равномерный характер, а взрывной, говорить о достижениях стратегии не приходится.
Для GBPUSD параметры годичной давности такие: SARStep = 0.01 и SARMaximum = 0.03.
Рис. 5. Результаты тестирования второй версии «Умника» на валютной паре GBPUSD.
Рост прибыли более равномерный, хотя без зигзагов тоже не обошлось. Тем не менее, рост наблюдается на всех участках теста. Чистая прибыль вышла 6149 долларов против 2129 долларов просадки (ФВ = 2.88). Таким образом, получили очень неплохой результат. Плохо, конечно, что просадка такая огромная, но ожидаемая прибыль тоже высока.
И, наконец, USDJPY: SARStep = 0.006, SARMaximum = 0.05.
Рис. 6. Результаты тестирования второй версии «Умника» на валютной паре USDJPY.
Как и в случае с EURUSD, говорить не о чем – просадка зашкаливает, прибыли нет.
Подводя итог, можем констатировать, что улучшения увенчались успехом, так как результаты тестов утратили хаотичность, а в некоторых случаях дали очень хорошую прибыль. Вторым плюсом стал уход от статичного задания параметров торговли, что дает советнику больше степеней свободы в будущем.
Files for downloading:
— Test.zip – развернутые результаты тестирования советников
— UmnickTrader_1.01.01.mq4 – оригинальная версия советника «Умник»
— UmnickTrader_1.01.01_V2.mq4 – переработанная, исправленная и дополненная версия стратегии