Механическая торговая система «20/200 pips». Результаты торговли на 2010 год.

Опубликовано: 01.01.2007

Прошло уже больше двух с половиной лет со дня последней публикации тестов системы "20/200 pips". За это время накопилось большое количество исторических данных для проведения еще одного теста «out-of-sample».

История создания торговой системы «20/200 pips».

Напомню кратко, как была придумана система «20/200 pips». Система была написана в далеком 2006 году, и опубликована на сайте www.autoforex.ru в июне 2007 года в виде торгового советника. Система была разработана таким образом, чтобы иметь возможность торговать в вечернее время после работы. В те далекие времена с интернетом, было туго, поэтому и приходилось подключаться к интернету через обычный модем по телефонной линии. Постоянные обрывы связи и проблемы на стороне провайдера требовали, чтобы система торговли была некритична к этим показателям. К тому же, мне некогда было сидеть за компьютером, наблюдая в окошках терминала Metatrader, как меняется ситуация на форексе. Исходя из всего выше перечисленного, были придуманы правила механической торговой системы «20/200 pips».

Правила торговли «20/200 pips».

Правила торговли, на самом деле очень просты. Торговля идет по валютной паре EUR/USD на временном интервале H1 (часовой интервал), используются цены открытия часовых баров.

Вход осуществляется в 18.00 CET (20.00 по Москве). Для определения направления торговли смотрим, как изменилась цена открытия за некоторый промежуток времени (Open[t1]-Open[t2]). Если цена выросла на величину большую некоторого значения (delta), то покупаем. Если цена упала на величину большую, чем delta, то продаем

Выход из сделки происходит по взятию профита, или достижению уровня StopLoss. Уровни TakeProfit и StopLoss выбираются соответственно 20 и 200 пунктов (это для котировок с 4 знаками после запятой, а для пятизначных котировок, такие сейчас котируют на Альпари, уровни выбираются 200 и 2000 соответственно. Более подробно о пятом знаке после запятой читайте в статье «Пятизначные котировки от Альпари. На что обратить внимание трейдеру»

Сопровождение сделок не требуется, т.к. во время открытия сделки на сервер дилингового центра передаются так же параметры TakeProfit и StopLoss. Сделка будет закрыта автоматически на стороне дилингового центра при достижении цены валютной пары соответствующего уровня. Таким образом, нам не нужно быть постоянно подключенным к интернету и не требуется держать Metatrader запущенным на компьютере. Все, что необходимо, один раз в сутки в 18.00 CET (20.00 московского времени) включать компьютер, запускать Metatrader, запускать советника и дождаться пока будет открыта сделка. И все. Обычно вся процедура занимала не больше 5 минут.

Прибыльный советник.

Для того чтобы иметь возможность оптимизировать параметры торговой системы был написан советник на MQL4. Его код представлен ниже. Обратите внимание, что это код советника для работы с пятизначными котировками.

//+------------------------------------------------------------------+
//|                                               20/200 expert.mq4  |
//|                                                    1H   EUR/USD  |
//|                                                    Smirnov Pavel |
//|                                                 www.autoforex.ru |
//+------------------------------------------------------------------+

#property copyright "Smirnov Pavel"
#property link      "www.autoforex.ru"

extern int TakeProfit = 200; // Уровень тейкпрофит в пунктах
extern int StopLoss = 2000; // уровень стоплосс в пунктах
extern int TradeTime=18;
extern int t1=7;
extern int t2=2;
extern int delta=70;
extern double lot = 0.1;

int ticket;
bool cantrade=true;

int OpenLong(double volume=0.1)
{
  int slippage=10;
  string comment="20/200 expert (Long)";
  color arrow_color=Red;
  int magic=0;

  ticket=OrderSend(Symbol(),OP_BUY,volume,Ask,slippage,Ask-StopLoss*Point,
                      Ask+TakeProfit*Point,comment,magic,0,arrow_color);
  if(ticket>0)
  {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
    {
      Print("Buy order opened : ",OrderOpenPrice());
      return(0);
    }
  }
  else
  {
    Print("Error opening Buy order : ",GetLastError());
    return(-1);
  }
}

int OpenShort(double volume=0.1)
{
  int slippage=10;
  string comment="20/200 expert (Short)";
  color arrow_color=Red;
  int magic=0;

  ticket=OrderSend(Symbol(),OP_SELL,volume,Bid,slippage,Bid+StopLoss*Point,
                      Bid-TakeProfit*Point,comment,magic,0,arrow_color);
  if(ticket>0)
  {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
      {
        Print("Sell order opened : ",OrderOpenPrice());
        return(0);
      }
  }
  else
  {
    Print("Error opening Sell order : ",GetLastError());
    return(-1);
  }
}

int init()
{
  return(0);
}

int deinit()
{
  return(0);
}

int start()
{
  if((TimeHour(TimeCurrent())>TradeTime)) cantrade=true;
  // проверяем есть ли открытые ордера ...
  if(OrdersTotal()<1)
  {
    // ... если нет ни одного открытого ордера, то идем дальше
    // проверяем настало ли время для торговли
    if((TimeHour(TimeCurrent())==TradeTime)&&(cantrade))
    {
      // ... если настало время, то
      if ((Open[t1]-Open[t2])>delta*Point) //Если цена изменилась на величину delta
      {
        //условие выполнено значит входим в короткую позицию:
        // проверяем есть ли свободные деньги для открытия короткой позиции
        if(AccountFreeMarginCheck(Symbol(),OP_SELL,lot)<=0 || GetLastError()==134)
        {
          Print("Not enough money");
          return(0);
        }
        OpenShort(lot);
        cantrade=false; //запрещаем торговать повторно до следующего бара
        return(0);
      }
      if ((Open[t2]-Open[t1])>delta*Point) //Если цена изменилась на величину delta
      {
        // условие выполнено значит входим в длинную позицию
        // проверяем есть ли свободные деньги на счету
        if(AccountFreeMarginCheck(Symbol(),OP_BUY,lot)<=0 || GetLastError()==134)
        {
          Print("Not enough money");
          return(0);
        }
        OpenLong(lot);
        cantrade=false;
        return(0);
      }
    }
  }
  return(0);
}

Оптимизация советника проводилась в период с 1999 по 2007 года, именно тогда были подобраны параметры первой версии советника. Вот они (для пятизначных котировок):

TakeProfit = 200;
StopLoss = 2000;
TradeTime=18;
t1=7;
t2=2;
delta=70;

Как теперь уже неоспоримо, данные параметры являются оптимальными и позволяют системе приносить прибыль на протяжении длительного времени. Ниже представлен график изменения баланса системы. На графике выделен промежуток, на котором оптимизировался советник и происходил подбор параметров. Все остальное – это так называемый тест «out-of-sample». Как видите, система дает прибыль на протяжении длительного времени.

График кривой баланса механической торговой системы 20/200 pips

Так же ниже представлен отчет тестера стратегий терминала Metatrader.

График кривой баланса механической торговой системы 20/200 pips

В прибыльности данной стратегии сомневаться не приходится. Советник прибыльный. Он приносит небольшую, но стабильную прибыль. Есть, конечно, периоды, когда данная система не приносит прибыль, но она и не терпит убытков, она «топчется на месте». Кривая баланса либо идет вверх, либо стоит на месте, но никогда вниз.

Различные версии торгового советника.

В результате различного рода экспериментов над системой были созданы и другие версии советника. Вторая версия советника, его код и результаты тестирования подробно рассмотрены в статье Торговая система "20/200 pips" - продолжаем эксперименты. Третья версия советника рассмотрена в статье Торговая система «20/200 pips» - новые идеи. В новых версиях были добавлены внешние параметры, а также другие возможности, позволяющие получить бОльшую прибыль на периоде оптимизации. Однако, как оказалось, это не приводит к получению бОльшей прибыли в реальности а, лишь является результатом излишней подгонки под кривую. Другими словами, чем больше параметров, тем более тщательно можно подогнать систему под кривую. Я лично никогда не доверял системам с большим числом настроек и параметров. Поэтому ко всем изменениям основной – первой версии советника, которая представлена здесь, в этой статье, отношусь крайне подозрительно.

Использование механической торговой системы «20/200 pips» для торговли на реале.

Скажу сразу, что данной системой торговли я пользовался на реале, но совсем недолго. Система прибыльная, но приносит маленькую прибыль, а это очень сложно, в первую очередь – психологически, получать маленькую прибыль. Ведь TakeProfit у системы всего 20 (старых, четырехзначных пипсов), а это лишь 20$ при торговле 0.1 лотом. Когда ты видишь, какие движения происходят на форексе, то не можешь удержаться, чтобы не «прокатиться» на этих движениях. Поэтому я много раз сливал депозиты, торгуя руками, только потому, что хотелось по-быстрому срубить «бабла». Именно поэтому забросил разработку систем, и именно поэтому у системы «20/200 pips» не было шанса поторговать на реале. Однако, внимательно изучая отчеты тестера (чистая прибыль за 12 лет составляет примерно 10000$, т.е. в среднем за год – 800$) понимаешь, что система, которая удваивает депозит в течение года, просто обязана торговать на реале.

Секрет для трейдеров желающих получать прибыль от торговой системы «20/200 pips».

Механическая торговая система, которая представлена в этой статье уже в таком виде может, и приносит небольшую прибыль. Однако ее можно значительно улучшить. Секрет прост – система совершает большое количество сделок (более 1700 сделок за 12 лет.) и все, что необходимо сделать, это наложить фильтр на эти сделки. Т.е. попытаться отфильтровать убыточные сделки, оставляя прибыльные. В коде эксперта дополнительные условия (фильтры) ставятся прямо перед открытием сделки. Например, можно проверять, чтобы обе свечи, на которых проверяется разность цен открытия, были одинакового цвета (обе бычьи или обе медвежьи). Или смотреть, чтобы цена на момент открытия сделки не находилась в локальном экстремуме (т.е. если пришел сигнал на открытие сделки вверх, то проверить, что цена не находится в локальном максимуме). Таких фильтров можно придумать огромное количество. Проблема только в том, что все их нужно добавлять в код и тестировать, тестировать, и еще раз тестировать, а это, поверьте, отнимает много времени.

Заключение.

Лично я нашел пару фильтров, о которых шла речь выше. Также я изменил немного входные параметры торговой системы и получил систему, которая, все же, и дает примерно такую же прибыль, как и данная в статье торговая система, однако профит фактор ее поднялся к 2. Т.е. выросла стабильность системы. Этого и следует ожидать, т.к. количество сделок при наложении фильтра уменьшается, уменьшается и прибыль системы (сделок же меньше стало), однако отношение количества прибыльных сделок к количеству убыточных, при этом, растет. Одним из главных показателей результативности наложения фильтра является спрямление кривой баланса. При этом исчезают зоны «топтания» системы на месте и баланс начинает расти равномерно.

Данная, улучшенная система выставлена на чемпионате Automated Trading Championship 2010 модернизированная таким образом, чтобы выставлять максимально допустимый размер сделки, ну, и написана она, конечно же, на MQL5. Никаких параметров и фильтров этой системы я вам не выдам, даже и не просите, т.к. мне ни к чему плодить своих конкурентов на конкурсе, да и попасть под множественную регистрацию совсем не хочется. А для тех трейдеров, кто с головой дружит, а не только «в нее кушает» я и так сказал достаточно много, чтобы сделать из торговой системы «20/200 pips» нечто стоящее.

С Уважением
Павел Смирнов.