Скачать MetaTrader 5

Оценка эффективности торговых систем путем анализа их компонентов

6 августа 2015, 15:33
Alexander Fedosov
2
8 468

Введение

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


Определение критериев для оценки эффективности торговой системы

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

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

Составная торговая система — это набор отдельных блоков, имеющих свои алгоритмы и параметры и работающих совместно друг с другом. При этом работу любого из блоков, входящих в данную систему, можно оценить заданным набором критериев. Рассмотрим схему оценки эффективности системы, представленную на рис.1. Составная система состоит из трех составляющих ее блоков A, B, C, каждый из которых имеет свои собственные рабочие параметры. Работу и эффективность данной системы оценивать по трем параметрам: 1, 2, 3. Со временем происходит изменение условий рынка, на котором торгует эта система, и изменяются параметры 1-3 в сторону неудовлетворительных, что служит сигналом к тому, что пора перенастраивать систему. Это можно сделать следующими методами:

  1. Запустить оптимизацию всех девяти параметров с целью адаптировать систему под сегодняшние реалии рынка. Но в этом способе существует избыточность — зачем оптимизировать все параметры, если вполне возможно выяснить, какой из блоков стал хуже выполнять свою работу?
  2. Соответственно, второй способ. Создается общий для всех трех блоков системы набор критериев оценки К1, К2, К3, позволяющий оценить и сравнить эффективность работы каждого из блоков отдельно.

Преимущества данного метода:

  • Уход от избыточности. Незачем оптимизировать то, что и так превосходно работает.
  • Мониторинг системы. Можно производить замеры параметров К1-К3 через некоторые промежутки времени, тем самым выясняя, как ведет себя система и ее блоки вместе и отдельно в различное время рынка (торговые сессии, выход новостей и т.п.).
  • Анализ уязвимостей. Позволяет выяснить, какой из блоков тянет всю систему вниз, чтобы проводить оптимизацию, замену или улучшение только этого блока, а не всей системы в целом.

Рис.1. Составная торговая система

Рис.1. Составная торговая система


Пример оценки эффективности системы с помощью анализа ее компонентов

Для того чтобы протестировать эффективность всей торговой системы, проверим, как работают блоки системы отдельно друг от друга и как они работают совместно. Тестовая система будет состоять из двух блоков:

  1. Блок А. Основан на сигналах стандартного индикатора Parabolic SAR.
  2. Блок В. Основан на сигналах стандартного индикатора Accelerator Oscillator(AC).

Сразу же определимся с набором критериев оценки этих блоков:

  • Критерий К1 — чистая прибыль.
  • Критерий К2 — максимальная просадка.
  • Критерий К3 — прибыльные сделки (% от всех).

Для общей наглядности в качестве параметров общей эффективности системы выберем те же самые показатели:

  • Параметр 1 — чистая прибыль.
  • Параметр 2 — максимальная просадка.
  • Параметр 3 — прибыльные сделки (% от всех).

Примеры сигналов ко входу в рынок для этих индикаторов можно найти в документации по стандартной библиотеке MQL5: cигналы Parabolic SAR и cигналы Accelerator Oscillator (первые условия). Опишем для каждого из них условия входа и выясним условия, при которых они эффективны на заданном отрезке тестирования.

Все параметры написанного ниже тестового советника выглядят следующим образом:

Рис.2. Параметры советника


//+------------------------------------------------------------------+
//|                                                                  |
//|                                                Alexander Fedosov |
//|                           https://www.mql5.com/ru/users/alex2356 |
//+------------------------------------------------------------------+
#property copyright "Alexander Fedosov"
#property link      "https://www.mql5.com/ru/users/alex2356"
#property version   "1.00"
#property strict

#include "trading.mqh"

input int            tm = 1;                       //Test mode 1,2 or 3
input int            SL = 40;                      //Stop-loss
input int            TP = 70;                      //Take-profit
input bool           lot_const = false;            //Lot of balance?
input double         lt=0.01;                      //Lot if Lot of balance=false 
input double         Risk=2;                       //The risk in the lot of the balance, %
input int            Slippage= 5;                  //Slippage
input int            magic = 2356;                 //Magic number
input ENUM_TIMEFRAMES tf1 = PERIOD_H1;             //Timeframe for the calculation module1
input ENUM_TIMEFRAMES tf2 = PERIOD_M5;             //Timeframe for the calculation module2
input double         Step = 0.02;                  //Step PSAR
input double         Mxm = 0.2;                    //Maximum PSAR

CTrading tr(magic,Slippage,lt,lot_const,Risk,5);
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(tm<1 || tm>3)
      return;
//--- Условия для входа в рынок для модуля на Parabolic SAR
   if(tm==1 && !tr.isOpened(magic))
     {
      double psar[],prc[];
      ArrayResize(psar,3);
      ArrayResize(prc,3);
      for(int i=0; i<3; i++)
        {
         psar[i]=iSAR(_Symbol,tf1,Step,Mxm,i);
         prc[i]=iClose(_Symbol,tf1,i);
        }

      if(psar[2]>prc[2] && psar[1]<prc[1] && psar[0]<prc[0])
         tr.OpnOrd(OP_BUY,lt,TP,SL);
      if(psar[2]<prc[2] && psar[1]>prc[1] && psar[0]>prc[0])
         tr.OpnOrd(OP_SELL,lt,TP,SL);

     }
//--- Условия для входа в рынок для модуля на AC
   if(tm==2 && !tr.isOpened(magic))
     {
      double ac[];
      ArrayResize(ac,3);
      for(int i=0; i<3; i++)
         ac[i]=iAC(Symbol(),tf2,i);

      if(ac[2]>0 && ac[1]>0 && ac[1]>ac[2])
         tr.OpnOrd(OP_BUY,lt,TP,SL);
      if(ac[2]<0 && ac[1]<0 && ac[1]<ac[2])
         tr.OpnOrd(OP_SELL,lt,TP,SL);

     }
//--- Условия для входа в рынок при совместной работе двух модулей
   if(tm==3 && !tr.isOpened(magic))
     {
      double psar[],prc[],ac[];
      ArrayResize(psar,3);
      ArrayResize(prc,3);
      ArrayResize(ac,3);
      for(int i=0; i<3; i++)
        {
         psar[i]=iSAR(_Symbol,tf1,Step,Mxm,i);
         prc[i]=iClose(_Symbol,tf1,i);
         ac[i]=iAC(Symbol(),tf2,i);
        }
      if((psar[2]>prc[2] && psar[1]<prc[1] && psar[0]<prc[0]) || (ac[2]>0 && ac[1]>0 && ac[1]>ac[2]))
         tr.OpnOrd(OP_BUY,lt,TP,SL);
      if((psar[2]<prc[2] && psar[1]>prc[1] && psar[0]>prc[0]) || (ac[2]<0 && ac[1]<0 && ac[1]<ac[2]))
         tr.OpnOrd(OP_SELL,lt,TP,SL);

     }

  }
//+------------------------------------------------------------------+

Самый первый параметр тестового советника это tm (Test mode), может принимать значения 1, 2 или 3. Эти значения соответствуют трем режимам работы:

  • tm = 1. Используются только условия входа в рынок с помощью индикатора Parabolic SAR. Режим работы только блока А.
  • tm = 2. Используются только условия входа в рынок с помощью индикатора Accelerator Oscillator. Режим работы только блока B.
  • tm = 3. Совместная работа обоих блоков. Работает вся система.

Изменяя параметр Test Mode, мы можем выяснить интересующие нас параметры: для блоков А и В это К1-К3, для всей системы — параметры 1-3. Далее представлены результаты тестирования блока на Parabolic SAR (рис.3), блока на AC (рис.4) и их совместной работы (рис.5).

Рис.3. Тестирование модуля Parabolic SAR



Рис.4. Тестирование модуля AC



Рис.5. Совместная работа модулей Parabolic SAR и AC

На основе результатов трех различных режимов работы для наглядности приведем сравнительную таблицу:

Test Mode Чистая Прибыль Прибыльные сделки,% Максимальная просадка
1 27,56 37,91 32,71
2 106,98 39,19 38,94
3 167,16 40,64 18,62

 

Моделирование ситуации ухудшения работы системы

А теперь изменим рабочие параметры работы блока А (Test Mode = 1) в сторону снижения эффективности его работы. Это даст нам ответ на вопрос, что будет происходить с системой при изменении в худшую сторону работы одного из его блоков.

Для моделирования снижения эффективности системы изменим один параметр, относящийся к работе блока А — это Timeframe for the calculation module1 — следующим образом, показанном на рис.6. Это изменит период его расчета, основанного на Parabolic SAR, что повлияет на места входа в рынок, а следовательно, изменит эффективность работы всей системы.

Рис.6. Моделирование снижения эффективности системы


Рис.7. Результат изменения параметра модуля на основе Parabolic SAR

Для наглядности сравним наблюдаемые нами показатели работы блока А с двумя различными значениями его параметра Timeframe for the calculation module1:

Timeframe for the calculation module1 Чистая прибыль Прибыльные сделки,% Максимальная просадка
1 Hour 27.56 37.91 32.71
4 Hours 2.54 36.73 43.21

 

Очевидно, что расчет по 4-часовому периоду дал нам ухудшенные результаты работы модуля, причем по всем трем критериям оценки. Тестирование всей системы с намеренно ухудшенными значениями одной из ее составляющих также снизили параметры 1-3 эффективности системы, что и показано на рис.8.

Рис.8. Совместная работа модулей Parabolic SAR (ухудшен) и AC

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

Timeframe for the calculation module1 Чистая прибыль (модуль 1) Прибыльные сделки,%
(модуль 1)
Максимальная просадка,%
(модуль 1)
Чистая прибыль
(система)
Прибыльные сделки,%
(система)
Максимальная просадка,%
(система)
4 Hours 2.54 36.73 43.21 139.34 40.00 24.9
1 Hour 27.56 37.91 32.71 167.16 40.64 18.62

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


Заключение

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

  • Данный метод оценки менее избыточен, чем оптимизация всех параметров систем, за счет выявления только тех составляющих, которые требуют оптимизации и улучшения.
  • Создание торговых систем в виде составных с использованием блоков, поддающихся оценке по заданным критериям, позволяет более эффективно управлять ими, выявлять слабые места, более гибко модернизировать.
Для корректного тестирования необходимо создать отдельную папку, например, MQL4\Experts\article1924, и положить оба файла в неё.
Прикрепленные файлы |
trading.mqh (14.94 KB)
analysis.mq4 (3.37 KB)
Yury Kirillov
Yury Kirillov | 6 авг 2015 в 15:49
Хорошая статья, только слишком короткая. :-)
Вадим Платонов
Вадим Платонов | 10 янв 2016 в 05:47
Тема  статьи всегда актуальна, а вот сама статья не понравилась. Пример банален - по сути пара  торговых советников засунутые в один. Конечно логичнее и проще оптимизировать их по одному. А что предложит автор для торгового советника с бальной оценкой, когда есть n программных блоков дающих сигналы на вход, m программных блоков дающих сигналы на выход и решение о входе - выходе принимается по сумме набранных балов. Как тогда придумать критерии оценки K1-К3? 
Управление терминалом MetaTrader с помощью DLL Управление терминалом MetaTrader с помощью DLL

В данной статье рассматривается управление элементами интерфейса MetaTrader с использованием вспомогательной DLL-библиотеки на примере изменения настроек рассылки Push-сообщений. К статье приложен исходный код библиотеки и пример скрипта.

Price Action. Автоматизация торговли по внутреннему бару Price Action. Автоматизация торговли по внутреннему бару

В статье описывается создание советника для MetaTrader 4, торгующего по внутреннему бару, включая принцип нахождения внутреннего бара, правила установки отложенных и стоп-ордеров. Приведены результаты тестирования и оптимизации.

Price Action. Автоматизация торговли по паттерну "Поглощение" Price Action. Автоматизация торговли по паттерну "Поглощение"

В статье описывается создание советника для MetaTrader 4, торгующего по паттерну "Поглощение", включая принцип нахождения паттерна, правила установки отложенных и стоп-ордеров. Приведены результаты тестирования и оптимизации.

Применение нечеткой логики в трейдинге средствами MQL4 Применение нечеткой логики в трейдинге средствами MQL4

В данной статье предлагаются примеры применения теории нечетких множеств в трейдинге средствами MQL4. Описывается разработка индикатора и советника с использованием библиотеки FuzzyNet для MQL4.