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

Alexander Fedosov | 6 августа, 2015

Введение

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


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

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

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

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

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

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

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

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


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

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

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

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

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

Примеры сигналов ко входу в рынок для этих индикаторов можно найти в документации по стандартной библиотеке 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. Эти значения соответствуют трем режимам работы:

Изменяя параметр 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, и положить оба файла в неё.