В настоящее время существует очень много способов определения вкусов и пристрастий человека еще до задушевного разговора с ним. Об этом может сказать его одежда, манера поведения в обществе и даже ринг-тон мобильного телефона.
Случай пофантазировать о предпочтениях человека, которого мы никогда не видели, представляется сегодня. Для этого не будут использованы фрагменты одежды или запах дезодоранта. Все оказалось немного проще и, в то же время, экзотичнее. Все, что мы имеем, это псевдоним на форуме (renoshnik), имя с фамилией (Юрий Волошин) и название эксперта – Agent_Fx_v07.
Трудно судить о случайности совпадения названия и номера версии, но ассоциативный ряд выстраивается такой: агент 007, Джеймс Бонд. Быть может Юрий действительно является поклонником Бондианы, может просто шпионских романов, а может в название вкладывался совсем другой смысл… Вот уж простор для фантазии.
Несмотря на постновогоднее настроение, которое как раз располагает к праздным размышлениям, попробуем вернуться к первоначальной цели – рассмотрению сути набора директив и операторов, которые все вместе составляют торгового робота «Агент Форекса».
Авторская версия
Результаты авторского теста были расширены на весь 2009-й год и для большей наглядности все сделки приведены к постоянному объему 0.1. Валютная пара EURUSD и таймфрейм Н1 (см. рис. 1):
Показана скромная чистая прибыль 1218 долларов и столь же скромная максимальная просадка 598 долларов. Уже неплохо. Но если расширить период тестирования до двух лет, захватив 2008-й год, то получим такие результаты (см. рис. 2):
В этом случае чистая прибыль упала до 1003 долларов, а просадка возросла до 1562 долларов.
Как всегда, попытаемся исправить ситуацию, разобравшись в принципах функционирования эксперта, и внеся в его логику необходимые поправки. Для начала необходимо найти сигнальную часть эксперта, где непосредственно принимается решение об открытии той или иной сделки. Как это часто бывает, генерация решения занимает всего несколько строк:
if(cci[1]<5 && cci[2]<cci[3] && cci[1]<cci[2] && cci[0]>cci[1] &&
Open[2]>Close[2] && Open[1]>Close[1] && Open[0]<Close[0] && Open[1]<Close[0]) pokypka();
if(cci[1]>-5 && cci[2]>cci[3] && cci[1]>cci[2] && cci[0]<cci[1] &&
Open[2]<Close[2] && Open[1]<Close[1] && Open[0]>Close[0] && Open[1]>Close[0]) prodaza();
Логика работы советника
Графический эквивалент представленных строк можно увидеть на рисунке 3:
Когда линия индикатора CCI находится выше значения 5.0 и образует пик, при этом два предыдущих бара были бычьими, а текущий бар является медвежьим, то открывается короткая позиция.
Если же линия CCI находится ниже значения -5.0 и образует впадину, при этом два предыдущих бара были медвежьими, а текущий бар является бычьим, то открывается длинная позиция.
К приведенным описаниям следует добавить два нюанса.
Первый заключается в том, что сигнал открытия сделки еще не означает сиюминутный вход в рынок. Он осуществляется только отложенным ордером, причем стоповым, который устанавливается на расстоянии от текущей цены, равного значению входного параметра советника DistSet. По умолчанию это значение составляет 10 пунктов. Поэтому сразу отмечаем, что вероятность захвата ордера ценой довольно высока и можно говорить о том, что мы фактически теряем 10 пунктов. То есть недополучаем прибыль в случае положительного исхода, либо увеличиваем убыток в случае достижения стопа.
Второй нюанс заключается в использовании значений еще несформированного бара, то есть нулевого. Дело в том, что в советнике делается попытка ловли последнего тика на свече. То есть показаниям индикатора и характеристикам свечи можно уже доверять на 99%. Совсем другое дело в реальности поймать последний тик свечи – это вопрос везения. Поэтому некоторая часть сделок, показанных тестером, при работе онлайн не будет совершена. Не совсем понятно, чем вызвано такое желание автора эксперта. Ведь намного проще открывать сделку уже на открытии следующей свечи. Этот принцип и будет реализован в edit-версии.
Вносим коррективы
Вот так плавно переходим к исправлениям стратегии. Сначала, конечно, исправим время установки отложенных ордеров BuyStop и SellStop с последних мгновений текущего бара на первый тик следующего бара.
В итоге получаем восьмую версию советника, результаты которой при тестировании на котировках последних двух лет (2008-2009) выходят такие (см. рис. 4-7):
Вид кривой баланса очень похож на вид, приведенный на рисунке 2. То есть сама основа стратегии не пострадала. А вот численные показатели все же улучшились. Чистая прибыль возросла до 2742 долларов, в то время как максимальная просадка осталась на том же уровне – 1524 доллара.
Если произвести сравнительный анализ статистических данных по результатам оригинального и текущего тестов, то становится понятным, что именно благодаря смене метода открытия сделки со стопового на лимитный и была получена дополнительная прибыль.
Это подтверждается тем, что часть прибыльных сделок в обоих случаях примерно одинакова – 74% и 81%. А вот средняя прибыльная сделка в первом случае составила 27 долларов, в то время как во втором случае ее значение возросло почти в два раза – до 51 доллара.
Валютной паре USDCHF похвастаться особо нечем. Возможно, здесь требуется более тонкая настройка параметров трейлинг-стопа или даже дистанции между ценой открытия отложенного ордера и текущей рыночной ценой. Параметры, которые были применены к паре EURUSD, для франка явно не подходят – чистая прибыль -1061 доллар.
Конечное значение баланса после проведения теста на GBPUSD оказалось положительным. Показана чистая прибыль 941 доллар, но вот максимальная просадка достигла огромного значения — 1716 долларов. В данном случае итог совпадает с франком – требуется персональный подбор параметров.
Как видно на графике, оптимистичных зон очень мало. В основном наблюдаются затяжные периоды убыточных сделок. Хотя кривая баланса более стабильна, нежели кривая баланса на USDCHF. Поэтому заключение будет таким же, как было по франку.
Оптимизация Форекс Агента
Ну а раз мы пришли к выводу, что на валютных парах, где не был достигнут приемлемый результат, требуется подбор параметров, то перейдем непосредственно к оптимизации советника. Досконально разбирать сам процесс не будем, приведем только окончательные параметры и результаты.
Итак, оптимизация проводилась по трем входным параметрам советника:
DistSet — расстояние между текущей ценой и отложенным ордером;
MinProfit — уровень прибыли в пунктах, при достижении которого один раз за свечу в положительной зоне перемещался стоп;
Tr_Stop — дистанция, на которую перемещается стоп от текущей цены.
Первыми приведем результаты по USDJPY (см. рис. 8). Параметры были взяты такие: DistSet = 14, MinProfit = 15, Tr_Stop = 50.
Чистая прибыль уже 2259 долларов, а максимальная просадка всего лишь 783 доллара. Эти показатели превышают результат, достигнутый по паре EURUSD и их можно признать пока наилучшими, так как фактор восстановления достиг 2.89.
Следующими приведем результаты по GBPUSD (см. рис. 9). Наиболее оптимальными параметрами оказались такие: DistSet = 24, MinProfit = 40, Tr_Stop = 45.
Чистая прибыль 3575 долларов при максимальной просадке 1437 долларов, что дает фактор восстановления снова больше двух – 2.49. К тому же, вид кривой баланса изменился в сторону стабильности.
Оставшаяся валютная пара – USDCHF (см. рис. 10). Ее оптимальные параметры: DistSet = 24, MinProfit = 25, Tr_Stop = 10.
К сожалению, даже оптимизация параметров не дала достойных результатов. Тем не менее, чистая прибыль положительна – 1212 долларов, а максимальная просадка довольно терпимая – 796 долларов. Но вот фактор восстановления не достиг даже двух – 1.52.
Заключение
Проведенный анализ и последующее точечное исправление стратегии показали, насколько разительно могут меняться результаты от малейшего вмешательства в логику программы. И то, что изменения носят довольно незначительный характер, только подтверждает выражение: «Удача всегда рядом, нужно лишь протянуть к ней руку».
Для скачивания
Test.zip – развернутые результаты тестирования советников;
Agent_Fx_v07.mq4 – оригинальная версия советника;
Agent_Fx_v08_edit.mq4 – переработанная, исправленная и дополненная версия стратегии.