Анализируем причины неудач торговых советников

7 апреля 2022, 15:40
Richard Poster
2
1 996

Введение

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

В связи с этим возникает два вопроса: что же такое меняется в данных таймсерий, что так сильно влияет на работу торгового робота? Существует ли такой технический индикатор, который может предсказать удачные и неудачные периоды работы советника? Цены бы не было такому индикатору!


Пересечение скользящих средних

Для анализа используем 15-минутные данные валют за шестнадцать лет, а также тестовую стратегию Moving Average Crossover ("Пересечение скользящих средних"). Стратегия MAC (Moving Average Crossover) будет открывать сделки на основе сигналов от простых скользящих средних (SMA): сигнал на покупку возникает, когда быстрая SMA пересекает медленную сверху, а на продажу — когда быстрая пересекает медленную снизу. Стратегия MAC должна послужить хорошей испытательной базой для нашего анализа. Основные параметры стратегии MAC — это периоды быстрой и медленной SMA. В нашем анализе период быстрой SMA будет от 1 до 4, а медленной — от 10 до 150. Значения будут фиксированными в течение всего периода тестирования.

На рис. 1 показана работа системы по пересечению SMA (SMA Crossover) на паре EURUSD с января 2006 по декабрь 2021. С оптимизированными параметрами периодов SMA 2 (быстрая) и 80 (медленная), советник показывает положительную прибыль в одни периоды и отрицательную доходность в другие. Период с января 2008 по июнь 2013 оказался периодом устойчивого роста прибыли. На рис. 2 показана та же система по пересечению SMA на паре GBPUSD и на том же интервале. Оптимизированные значения периодов — 1 для быстрой SMA 80 для медленной. На графике GBPUSD видны только короткие периоды положительной доходности.

Fig_1_EURUSD_SMACross

 Рис. 1. Прибыль SMA Cross на EURUSD (0,1 лота)


     

Fig_2_GBPUSD_SMACross

  Рис. 2. Прибыль SMA Cross на GBPUSD (0,1 лота)

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


Поведение традиционных технических индикаторов

Можно изучить несколько стандартных технических индикаторов и проверить, отличается ли их поведение в периоды положительной и отрицательной доходности. На рис. 3 показан месячный индикатор Среднего истинного диапазона (ATR) за шестнадцатилетний период для пары EURUSD. Индикатор ATR измеряет волатильность валютной пары. В его поведении есть некая зависимость от времени, но она не совпадает с изменениями прибыльности на рис. 1. Интересно, что на рис. 3 показана крайняя волатильность в связи с экономическими кризисами в конце 2008 года и затем в начале 2020 года. Из этого можно сделать вывод, что использование абсолютных порогов изменения цены для сигнальной логики не подходит и что следует учитывать сглаженное значение ATR. Еще один часто используемый технический индикатор — полосы Боллинджера. На индикатор влияет как волатильность, так и сила тренда. Удивительно, но его долгосрочное поведение на месячном таймфрейме, показанное на рисунке 4, почти полностью совпадает с результатами индикатора ATR. Как и ATR, поведение Bollinger Bands не совпадает с периодами положительной и отрицательной доходности на данных EURUSD на рис. 1. Аналогичные результаты получились на данных GBPUSD. Долгосрочная волатильность не объясняет поведение на рис. 1 и 2.


Fig_3_ATRvsMth

Рис. 3. EURUSD ATR, среднемесячное значение

FIg_4_BBSpreadVsMth

Рис. 4. EURUSD Bollinger Band, среднемесячное значение


Автокорреляционная функция как индикатор

В отличие от индикаторов ATR и Bollinger, автокорреляционная функция (АКФ) не зависит от волатильности. АКФ — полезный инструмент для поиска закономерностей в данных. АКФ измеряет корреляцию элементов таймсерии с элементами той же таймсерии, но имеющей задержку на величину сдвига. Если на данных присутствует тренд, при небольшом запаздывании ACF будет иметь положительные значения. В нашем анализе элемент Yi таймсерии определяется как (Цена закрытия - Цена открытия) бара i.

Для временного ряда из N элементов Yi , i =1...N, ACF определяется как:

ACF_EquationV2

Функция автокорреляции для серии ценовых данных сильно отличается от автокорреляции серии изменений цены от бара к бару. Например, для ряда {1,2,3..14} АКФ равен 0,786. Для ряда из разниц между последовательными элементами этого массива АКФ будет близка к нулю (при условии небольшого шума в значениях, чтобы не было деления на ноль).

Код ниже показывает расчет АКФ:

 double GetAtCorrVal(double &ClsOpn[],int CorrPer, int LagPer,int joff ) {
   double corr;
   double AIn[],BIn[];
   double XMean,XNum,XDen;
   int jj;
   ArrayResize(AIn,CorrPer);
   ArrayResize(BIn,CorrPer);
   XMean = 0.;
   XNum = 0.;
   XDen = 0.;
   corr = 0.;
   if(CorrPer<2)
    {
     Print("No AutoCorr Processing Allowed ");
     return(corr);
    }
   // mean
   for(jj=0;jj<CorrPer;jj++)
    {
     XMean +=ClsOpn[jj+joff];
    }
   XMean = XMean/CorrPer;
  // variances
   for(jj=0;jj<CorrPer;jj++)
    {
     if(jj<(CorrPer-LagPer))
       XNum  += (ClsOpn[jj+joff]-XMean)*(ClsOpn[jj+LagPer+joff]-XMean);
     XDen += (ClsOpn[jj+joff]-XMean)*(ClsOpn[jj+joff]-XMean);
    }  
    if(XDen==0.)
     {
      corr = 0.;
     }
    else
    corr = XNum/XDen;
   return(corr);
  }
//----------------------------------------------------------------

  

На рис. 5 показано среднемесячное значение ACF за период в 16 лет для данных EURUSD с периодом сглаживания в шесть месяцев. На рис. 1 период с 2008 г. по конец 2012 г. прибыльный. На рис. 5 также видно немного более высокое значение АКФ в этом диапазоне, что предполагает возможную связь между доходностью стратегии MAC и значением АКФ.


Fig_5_EURUSD_ACFvsMth

Рис. 5. Функция автокорреляции EURUSD - среднемесячное значение


На данных GBUUSD на рис. 6 можно увидеть слабую связь между доходностью (рис. 2) и значением АКФ.

Fig_6_GBPUSD_ACFvsMth


 Рис. 6. Функция автокорреляции GBPUSD - среднемесячное значение

Функцию автокорреляции можно использовать в качестве индикатора (AutoCorr.mq5), но на рис. 7 видно, что не она не очень хорошо подходит для определения тренда.


Fig_7_EURUSD_ACFIndicator

Рис. 7. Индикатор ACF, Задержка=1

Поведение АКФ во времени и стратегия пересечения SMA

Дополнительную информацию можно получить, посмотрев на поведение АКФ непосредственно перед точкой пересечения SMA (Trigger ACF), а также сразу после точки пересечения, когда сделка еще открыта (Trade ACF). Эти два типа АКФ (Trade ACF и Trigger ACF) имеют разные свойства. На рис. 8 и 9 показан график Trade ACF (АКФ после открытия) для данных EURUSD и GBPUSD. В тестере стратегий значение АКФ можно построить отдельно для прибыльных и для убыточных сделок как функцию времени. Оба графика показывают, что АКФ прибыльных и убыточных сделок расходится. Прибыльный участок январь 2008-июнь 2013 на рис. 1 (EURUSD) примерно совпадает с участком на рис. 8, на котором видна очень большая разница между прибыльной и убыточной АКФ. Начиная с января 2018 года наблюдается уже очень небольшое расхождение между значениями АКФ прибыльных и убыточных сделок. На рис. 1 это соответствует ровному, боковому периоду прибыли.


Fig_8_EURUSD_TradeACF

  Рис. 8. АКФ сделок по EURUSD с триггером по пересечению SMA


Fig_9_GBPUSD_TradeACF

Рис. 9. АКФ сделок по GBPUSD с триггером по пересечению SMA

На рисунках 10 и 11 показан график Trigger ACF (АКФ до открытия) для данных EURUSD и GBPUSD. Цель этих двух графиков — изучить, можно ли использовать значение Trigger ACF в качестве фильтра в советнике, чтобы повысить прибыльность стратегии по пересечению SMA. По сравнению с данными АКФ по сделкам, в данных АКФ по сигналам (Trigger ACF) меньше расхождение между положительной и отрицательной прибылью. То есть АКФ может быть не очень полезной в качестве сигнального фильтра. Однако значение АКФ в значительной степени не меняется во времени, что указывает на то, что в качестве триггерного фильтра можно использовать фиксированный порог АКФ. Кривые прибыли/убытка в значительной степени пересекаются друг с другом, что означает наличие участков, в которых сделки не будут прибыльными.


Fig_10_EURUSD_TriggerCF

 Рис. 10. АКФ триггеров по EURUSD с триггером по пересечению SMA


Fig_11_GBPUSD_TriggerACF

Рис. 11. АКФ триггеров по GBPUSD с триггером по пересечению SMA


Фильтр АКФ для пересечения SMA

Несмотря на небольшие различия в АКФ положительной и отрицательной доходности (рис. 10 и 11), если к триггеру по пересечению SMA добавить требование по порогу автокорреляции, доходность советника значительно улучшится на участках с низкой доходностью. На рис. 12 и 13 показана доходность советника с дополнительным фильтром по АКФ, на данных EURUSD и GBPUSD. Показан весь период в 16 лет. Если сравнить рис. 1 и 2 с рис. 12 и 13, доходность как для EURUSD, так и для GBPUSD значительно улучшается с применяем порога автокорреляции.


Fig_12_EURUSD_SMACrossCorr

Рис. 12. Пересечение SMA с фильтром по АКФ на EURUSD

Fig_13_GBPUSD_SMACrossCorr

Рис. 13. Пересечение SMA с фильтром по АКФ на GBPUSD


На рис. 14 показана таблица результатов работы в тестере стратегий. Как на EURUSD, так и на GBPUSD наблюдается значительное улучшение. В обоих случаях общая прибыль выросла примерно на 50% при включении фильтра, а также значительно выросла прибыль на сделку (PO).

Тип сигнала

Кол-во сделок

Прибыль $

(0.1 лота)

Прибыль/убыток (PF)

Приб. сделка (PO)

EURUSD Пересечение SMA

3160

5830.

1.10

1.85

EURUSD SMA Пересечение + АКФ

1548

8511.

1.33

5.50

GBPUSD Пересечение SMA

3672

5352.

1.07

1.46

GBPUSD SMA Пересечение + АКФ

3096

8317.

1.13

2.69

Рис. 14. Таблица результатов тестирования на данных EURUSD и GBPUSD


Зависимость АКФ от медленной SMA для стратегии пересечения SMA


Также интересно посмотреть на зависимость средней автокорреляционной функции от выбора периода медленной SMA для прибыльных и убыточных сделок. Это показано на рис. 15 по данным EURUSD M15. Стратегия открытия не использует порог корреляции. Без учета значения АКФ оптимальный период медленной средней стратегии по пересечению SMA Crossover получился 80. На рис. 15 видно, что наибольшее расхождение среднего значения АКФ между выигрышными и убыточными сделками происходит при периодах медленной SMA между 65 и 80. Дальше можно использовать информацию АКФ для определения оптимального периода медленной средней на основе значения автокорреляции, рассчитанного во время открытия сделки. 


Fig_15_AvgACVvsSlowPeriod

Рис.15. Среднее АКФ vs период медленной SMA на EURUSD

Заключение

Функция автокорреляции — полезный индикатор, который может улучшить работу советника. Она улучшает результаты при тестировании, отфильтровывая периоды с низкой производительностью.

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



Перевод с английского произведен MetaQuotes Software Corp.
Оригинальная статья: https://www.mql5.com/en/articles/3299

Прикрепленные файлы |
AutoCorr.mq5 (4.12 KB)
Последние комментарии | Перейти к обсуждению на форуме трейдеров (2)
Vladimir Gulakov

Трейдеры и программисты идут параллельным курсом. Попытка пересечения с любой стороны и есть причина неудач.

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

Roman Shiredchenko


Да.... кстати, тема интересная, тож возьму к рассмотрению.
Несколько индикаторов на графике (Часть 01): Понимание концепций Несколько индикаторов на графике (Часть 01): Понимание концепций
Сегодня разберем, как можно добавить несколько индикаторов в график одновременно, не занимая при этом отдельную его область. При торговле много трейдеров чувствуют себя более уверенно, если одновременно смотрят на несколько индикаторов (например, RSI, STOCASTIC, MACD, ADX и другие), а в некоторых случаях даже на разные активы, составляющие тот или иной индекс.
Как разработать торговую систему на основе Bollinger Bands Как разработать торговую систему на основе Bollinger Bands
В этой статье мы поговорим о полосах Боллинджера (Bollinger Bands) — одном из самых популярных индикаторов в мире трейдинга. Мы обсудим технический анализ, а также научимся разрабатывать системы алгоритмической торговли на основе индикатора Bollinger Bands.
DoEasy. Элементы управления (Часть 1): Первые шаги DoEasy. Элементы управления (Часть 1): Первые шаги
С этой статьи начинаем обширную тему по созданию на MQL5 элементов управления в стиле Windows Forms. И начнём тему с создания класса панели. Без наличия элементов управления уже становится сложно обходиться. Поэтому мы создадим все возможные элементы управления в стиле Windows Forms.
WebSocket для MetaTrader 5 — Использование Windows API WebSocket для MetaTrader 5 — Использование Windows API
В этой статье мы используем WinHttp.dll, чтобы создать клиент WebSocket для MetaTrader 5-программ. В конечном итоге клиент должен быть выполнен в виде класса и протестирован во взаимодействии с WebSocket API от Binary.com.