English 中文 Español Deutsch 日本語 Português
Тестирование паттернов, возникающих при торговле корзинами валютных пар. Часть III

Тестирование паттернов, возникающих при торговле корзинами валютных пар. Часть III

MetaTrader 5Трейдинг | 16 января 2018, 12:52
4 052 0
Andrei Novichkov
Andrei Novichkov

Введение

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

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

Протестируем последний тип паттернов. В основной статье, описывающей торговлю валютными парами, он описан под номерами 4 и 5. В двух словах напомню, где можно найти такие паттерны.

Каждая валюта пары относится к своей корзине. К примеру, пара EURUSD представляет собой две корзины валют — по EUR и USD. Поведение этой пары можно анализировать с помощью двух объединенных индикаторов — по одному на каждую корзину. Анализируем мы разницу между показаниями этих индикаторов. Так выявляется ослабление или усиление валют пары по отношению друг к другу. Значит, мы получаем возможность делать выводы о направлении тренда.

На описанном принципе строится график объединенного индикатора, и уже на нем мы ищем паттерны № 4 и 5. Их общий вид нам уже знаком: один из них основан на пробое линий перекупленности/перепроданности (его мы и протестируем в этой статье), второй — на пересечении графиком объединенного индикатора скользящей средней.

Вспомним о преимуществах этого вида паттернов:

  1. Анализ становится точнее, потому что в нем учитывается поведение обеих валют пары, а не одной (как это было в предыдущих статьях здесь и здесь).
  2. А вот вход в рынок по этим паттернам выполняется только на одной паре, а не на всей корзине. Это, в свою очередь, дает нам свои преимущества:
    • гораздо меньшую просадку;
    • больший психологический комфорт для трейдера и удобство в привычном управлении позициями.

Паттерн для исследования

Паттерны для исследования остаются теми же: просто искать мы их будем на графике новых объединенных индикаторов. Сначала исследуем паттерн пробоя уровней перекупленности и перепроданности графиком объединенного индикатора. Будем считать, что положение данных уровней уже известно. Паттерн хорошо известен в техническом анализе и описан здесь. Идентифицировать его будем на закрытии свечи, а выглядеть он должен заметным:

Искомый паттерн
Отсутствие паттерна




Инструменты для начала исследования

Как и до сих пор, используем индикатор "Объединенный WPR" и инструменты на его основе. Коды основных индикаторов уже приводились ранее. В настоящей статье они прикреплены в виде архива test.zip. Начнем работу: определим возможное количество сделок.

Возможное количество сделок

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

  • Уровень перекупленности - 20%
  • Уровень перепроданности - 80%

Но индикатор "Объединенный WPR" изменяется от -100% до +100%, и поэтому уровни сдвигаются к точкам +60% и -60%, соответственно. Если количество их пробоев будет сравнимо с уже полученными результатами, то будем считать, что уровни сохраняют свое положение.

Исследования будем проводить на таймфреймах H1, H4, D1 в следующем порядке.

  1. Размещаем на графике индикатор testDistance.mq5. Ему доступны два других индикатора — testWPRjpy.mq5 и testWPeur.mq5.
  2. Предварительно меняем код последних двух индикаторов: каждый из них должен работать с одной из валют пары, на график которой помещен индикатор testDistance.mq5. Например, в архиве индикатор testWPRjpy.mq5 содержит валютные пары корзины по JPY, а testWPReur.mq5 — по EUR. Следовательно, testDistance.mq5 размещен на паре EURJPY.
  3. Накладываем на график индикатора testDistance.mq5 индикатор testIndexZig-Zag1.mq5 (о нем мы тоже уже говорили в одной из предыдущих статей). Он разбивает диапазон значений индикатора testWPReur.mq5 (который составляет от 100% до -100%) на интервалы от 0 до 99 и считает, какое количество пробоев попадает в каждый интервал.  Найденное количество пробоев будем считать результатом работы индикатора testIndexZig-Zag1.mq5 (в дальнейшем просто "результат"), которое сохраняется в файл. Создание такого файла и является основной целью данного этапа работы. Фрагмент такого файла, для удобства оформленного в виде таблицы, мы приведем здесь:
    Номер интервала Диапазон индикатора Мин значение индикатора
    Макс значение индикатора 
    Количество пробоев
    ... ... ... ... ...
    47 -4 -6 -4 3
    48 -2 -4 -2 5
    49 0 -2 0 5
    50 2 0 2 7
    ... ... ... ... ...
  4. Анализируем получившиеся файлы.

Аналогично можно работать со всеми анализируемыми парами, под каждую из которых нужно изменять индикаторы testWPRjpy.mq5 и testWPeur.mq5. В качестве примера проанализируем две пары — EURJPY и EURUSD.

Сравним пробои уровней перекупленности/перепроданности для этих двух пар и для их валют (EUR, USD и JPY) на трех таймфреймах — H1, H4 и D1.

Скорее всего, найденных паттернов будет существенно меньше, чем в рассмотренных ранее случаях. Причина проста: чтобы график этого объединенного индикатора пробил уровень перекупленности/перепроданности, нужно одновременное наступление двух событий:

  1. базовая валюта оказалась бы перепроданной;
  2. котировочная валюта оказалась бы перекупленной,

или наоборот. Иными словами, нужно, чтобы одна валюта была максимально слабой, а другая одновременно с этим — максимально сильной. Это не слишком частая ситуация, поэтому сравнительное количество пробоев будет небольшим.

Совпадение двух вышеописанных событий может носить и случайный, нерыночный характер. К примеру, причиной тому может быть одновременный выход "разнонаправленных" новостей. В таких случаях употреблять понятия "перекупленности" и "перепроданности"не совсем корректно, однако не будем множить сущности и условно оставим это традиционное название.

Полные результаты работы индикатора testIndexZig-Zag1.mq5 (полученные в результате работы данного индикатора файлы) находятся в прилагаемом архиве Files.zip. Тестирование проводилось на всей доступной истории. 

Сведем наиболее значимые результаты в таблицу:

Наименование

Таймфрейм
D1 H4 H1
EURJPY 2 / 3 19 / 19 39 / 46
EURUSD 3 / 1 17 / 17 31 / 50
EUR 5 / 1 15 / 16 67 / 73
JPY 5 / 5 20 / 17 79 / 62
USD 2 / 9 13 / 9 80 / 69

Поясним содержимое таблицы:

  • Первые две строки — результаты работы индикатора testIndexZig-Zag1.mq5 на двух выбранных валютных парах.
  • Последние три строки — результаты работы индикатора testIndexZig-Zag1.mq5 на трех отдельно взятых корзинах валютных пар. Каждая из корзин составлена либо для базовой валюты, либо для валюты котировки валютных пар из первых двух строк.
  • Числовые данные в трех столбцах справа — это данные о количестве пробоев уровней перепроданности (-60% ) и — через дробь — перекупленности (60%), которые находятся в файлах из прилагаемого архива Files.zip. Например, 80/69 означает, что было найдено 80 пробоев уровня -60% и 69 пробоев уровня 60%.


Наша задача — сравнить данные из первых двух строк с тремя последними. Первоначальный прогноз насчет уменьшения количества пробоев, высказанный в начале раздела, оправдался на таймфрейме H1 и "дал сбой" на H4 и D1. Можно предположить, что на таймфреймах H4 и D1 недостаточное количество пробоев для статистически подтвержденных выводов, а возможно, нужно снова сдвинуть уровни перекупленности/перепроданности, чего мы пока делать не станем. Анализ выполнялся всего на двух парах, и для обоснованных выводов этого мало. Поэтому, при накоплении статистики, вполне возможно, придется корректировать расположение уровней перекупленности / перепроданности.

Всё же мы можем сделать один обоснованный вывод: как и ранее, количество входов в рынок на таймфрейме D1 пренебрежимо мало.

Начало тестирования

Аналогичный паттерн мы уже тестировали. Поэтому воспользуемся уже готовым советником testEAbasket2.mq5, внеся в него минимальные изменения.

  • Советник будет вызывать индикатор testDistance.mq5.
  • Советнику будет разрешено входить в рынок при каждом обнаружении паттерна (т.е при каждом пробитии уровней перекупленности / перепроданности), несмотря на уже открытые ордера.

Незначительно изменим форму паттерна, чтобы увеличить количество сделок. Отразим эти изменения во входных параметрах советника.

  • SELLPROFIT. Когда объединенный WPR достигает этого значения, закрываем все позиции на продажу корзины. По умолчанию 0%.
  • SELL1LIMIT. Это минимальное значение объединенного WPR для точки №1 (см. рисунок выше) для начала идентификации паттерна продажи корзины. По умолчанию 65%.
  • SELL2FROM. Максимальное значение объединенного WPR для точки №2 для идентификации паттерна продажи корзины. По умолчанию 60%, это уровень перекупленности.
  • SELL2TO. Минимальное значение объединенного WPR для точки №2 для окончательной идентификации паттерна продажи корзины. По умолчанию 40%.
  • BUYPROFIT. Когда индикатор объединенного WPR достигает этого значения, закрываем все позиции на покупку корзины. По умолчанию 0%.
  • BUY1LIMIT. Это максимальное значение объединенного WPR для точки №1 для начала идентификации паттерна покупки корзины. По умолчанию -65%.
  • BUY2FROM. Минимальное значение объединенного WPR для точки №2 для идентификации паттерна покупки корзины. По умолчанию -60%, это уровень перепроданности.
  • BUY2TO. Максимальное значение объединенного WPR для точки №2 для окончательной идентификации паттерна покупки корзины. По умолчанию -40%.

Кроме того, в основном индикаторе testDistance.mq5 будут использованы индикаторы testWPRХХХ.mq5, которые предоставляют значения объединенного WPR  конкретной корзины. Изменим способ расчета последнего индикатора со среднего арифметического на среднее геометрическое. Разные принципы расчета значений этого индикатора были приведены здесь с подробным обоснованием. Здесь приведем лишь фрагмент кода тестового индикатора, отвечающего за основной расчет:

double m_dParam = 0.143; // 1/LG

double GetValue(int shift) 
  {
   double dBuf[1];
   double res=0.0;
   
         res = 1;
         for (int i = 0; i < LG; i++) {
            CopyBuffer(h[i],0,shift,1,dBuf);
            if (bDirect[i]) res *= dBuf[0];
            else            res *= dBuf[0] + 100;            
         }  
         res = -MathPow (MathAbs(res), m_dParam);  
   return (NormalizeDouble((res + 50) * 2, _Digits) );
  }

Полный комплект используемых индикаторов и советника приведен в прилагаемом архиве test2.zip.

Начнем работу с пары EURUSD. Результат за последний год:

Однако продолжение тестирования на AUDUSD и USDJPY не дает ни одной сделки. Очевидно, что случаи одновременной перекупленности одной валюты корзины с перепроданностью другой, весьма редки. Увеличим количество пробоев изменив параметры паттерна и продолжим тестирование. Ниже приведен обновленный список входных параметров.

  • SELLPROFIT. Без изменений.
  • SELL1LIMIT = 50%.
  • SELL2FROM = 40%
  • SELL2TO     = 20%.
  • BUYPROFIT. Без изменений.
  • BUY1LIMIT  = -50%
  • BUY2FROM  = -40%
  • BUY2TO      = -20%.

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

 AUDUSDEURUSDGBPUSDNZDUSDUSDCADUSDCHFUSDJPY
H1 -27.63 48.28 49.34 -20.02 -20.04 29.82 -19.99
H4 -35.10 14.44 1.60 -49.18 -38.75 -15 2.46

На таймфрейме D1 сделок практически нет, поэтому и в отчеты этот таймфрейм не включен. На прочих таймфреймах количество сделок тоже невелико. Приемлемые результаты показал только таймфрейм H1. На нем по трем парам (EURUSD, GBPUSD и USDCHF) сразу получен профит. По остальным мажорам зафиксирован убыток, но он не настолько большой, чтобы расценивать его как явный провал алгоритма. Ведь мы тестировали простейший вариант советника — без фильтрации, с единственным правилом входа в рынок и единственным правилом выхода. Конечно же, для реальной торговли этого недостаточно, а значит, можно попытаться доработать советник и вывести его в прибыль. Попытаемся подробнее проанализировать полученные результаты. Это покажет, в какую сторону продолжать работу над алгоритмом.

Анализ результатов тестирования

Первое, на чем хотелось бы остановиться — это разница между количеством сделок на таймфреймах H1 и H4.  То, что на таймфрейме H4 сделок меньше, вполне закономерно — на нем вчетверо меньше свечей, чем на H1 за аналогичный интервал. Казалось бы, и количество сделок тоже должно быть меньше в четыре раза. В нашем исследовании это правило примерно соблюдается: на всех исследуемых парах сделок на H4 меньше, чем на H1, примерно в пять раз. С учетом того, что и на H1 сделок не так много, возникает вопрос: что с этим делать, если есть желание торговать на H4 по исследуемой методике?. Решение возможно только одно — еще больше "расширить" паттерн:

  • SELLPROFIT. Без изменений.
  • SELL1LIMIT = 45%.
  • SELL2FROM = 40%
  • SELL2TO     = 10%.
  • BUYPROFIT. Без изменений.
  • BUY1LIMIT  = -45%
  • BUY2FROM  = -40%
  • BUY2TO      = -10%.

Это должно увеличить количество сделок, но как это отразится на прибыли и на просадке? Сделаем дополнительный тест на двух парах — на GBPUSD (на ней была хорошая прибыль на H1) и AUDUSD (здесь был убыток).

Результат получен и присоединен в виде архива  result-1.zip. Действительно, "расширение" паттерна привело к увеличению количества сделок (что и ожидалось). Интересно, что прибыльность / убыточность оказалась "унаследована" от H1 — на GBPUSD получена прибыль, на AUDUSD — убыток. Но правильно ли то, что паттерн был "расширен" и он стал чаще идентифицироваться? Изначально паттерн возникает на пробое линий перекупленности и перепроданности. После выполненных двух "расширений" сложно говорить о пробое и о новом расположении уровней. Возможно, осторожному трейдеру не стоит пытаться искать этот паттерн на таймфреймах старше H1.

Рассмотрим еще один момент — просадки, обнаруженные при тестировании. Их наличие видно на скриншоте теста советника на паре EURUSD выше. При этом, кроме просадок, заметен и уход ордеров в солидный профит с последующим возвратом на более скромные позиции. Аналогичные явления мы наблюдали и при тестировании похожего паттерна здесь. О чем это говорит?

  1. О недостатках политики выхода из рынка. Напомню, выход из рынка осуществляется, когда Объединенный WPR пробьет свой нулевой уровень — другими словами, выйдет в зону равновесия между базовой валютой и валютой котировки. Очевидно, что этого мало и нужны дополнительные способы для определения времени выхода. Но в данном случае  мы не будем применять никаких дополнительных средств применяться не будут, чтобы исключить постороннее влияние.
  2. О недостатках в идентификации паттерна — ведь мы расширили входные параметры и на H1, и на H4. В процессе "расширения" паттерна мы сместили уровни перекупленности/перепроданности до значений 45 - 40%.  Поэтому, когда система автоматически находит паттерн, реального пробоя линий перекупленности / перепроданности может еще не произойти. Например, уровень может быть пробит только для одной валюты, или же обе валюты будут колебаться вокруг уровней перекупленности/перепроданности, так и не перейдя через него. В таких случаях текущий тренд, скорее всего, будет продолжаться и ожидаемого разворота не произойдет. Разумеется, вероятность такого развития событий возрастает по мере дополнительных "расширений" паттерна. Получается, что чем шире входные параметры паттерна, тем сильнее размывается его смысл. Следствием описанных событий будет просадка.

На этом мы завершаем тестирование и подводим итоги всей нашей работы.

Заключение

  • Паттерн практически не идентифицируется на таймфрейме D1 и очень редко появляется на таймфрейме H4. Я не рекомендую искать его на таймфреймах старше H1.
  • Чтобы увеличить количество возможных сделок, можно "расширить" паттерн — снизить требования к его форме и качеству. Но если этим увлечься, то паттерн потеряет смысл и не будет отражать реальную торговую ситуацию пробоя уровня  перекупленности / перепроданности. Поэтому расширять паттерн нужно очень осторожно.
  • Проверка доходности паттерна неожиданностей не принесла. Но есть и многообещающие моменты. Мы не получили серьезных убытков ни по одной тестируемой паре, а по нескольким парам была получена прибыль. Напоминаю, что в прошлых тестах таймфрейм H1 был полностью убыточен. Здесь же видна перспектива вывода паттерна в устойчивую прибыль применением стандартных технических приемов — тралов и т.д.
  • Описанный паттерн появляется нечасто. Значит, его стоит рассматривать как дополнительный сигнал, усиливающий другие паттерны, а не как основной инструмент принятия решения о входе в рынок. Постараемся разобраться в этом позже.

Программы, используемые в статье:

 # Имя
Тип
 Описание
1 test.zip Архив
Инструменты для определения возможного количества сделок.
2
Files.zip Архив Результаты определения количества потенциальных входов в рынок.
3 test2.zip Архив Инструменты для тестирования советника.
4 result.zip Архив Отчеты в формате html по тестированию паттерна.
5
result-1.zip Архив
Отчеты в формате html по дополнительному тестированию на H4.
Прикрепленные файлы |
test.zip (8.28 KB)
test2.zip (16.62 KB)
result.zip (832.8 KB)
result-1.ZIP (127.29 KB)
Files.zip (11.54 KB)
Управление капиталом по Винсу. Реализация в виде модуля Мастера MQL5 Управление капиталом по Винсу. Реализация в виде модуля Мастера MQL5
Статья написана на основе книги Р.Винса "Математика управления капиталом". В ней рассматриваются эмпирические и параметрические методы нахождения оптимального размера торгового лота, на основе которых написаны торговые модули управления капиталом для мастера MLQ5.
Паттерн прорыва канала Паттерн прорыва канала
Как известно, ценовые тренды образуют ценовые каналы. Один из сильных сигналов на изменение тренда — прорыв текущего канала. В этой статье я предлагаю попробовать автоматизировать процесс поиска таких сигналов и посмотреть, действительно ли можно на этом построить свою стратегию торговли.
Автоматическое построение линий поддержки и сопротивления Автоматическое построение линий поддержки и сопротивления
В статье рассматривается автоматическое построение линий поддержки и сопротивления через локальные максимумы и минимумы ценовых графиков. Для определения этих экстремумов применяется всем известный индикатор ZigZag.
Пользовательский тестер стратегий на основе быстрых математических вычислений Пользовательский тестер стратегий на основе быстрых математических вычислений
Статья описывает создание пользовательского тестера стратегий и своего собственного анализатора прогонов оптимизации. Прочитав ее, вы поймете, как работает режим математических вычислений и механизм так называемых фреймов, как можно подготовить и загрузить свои собственные данные для расчетов и использовать эффективные алгоритмы их сжатия. Также эта статья будет интересна всем, кто интересуется способами хранения пользовательской информации внутри эксперта.