Торговая система Форекс - "20/200 pips", 2018 год.

Опубликовано: 27.05.2018, раздел: Лаборатория

Когда создавалась система "20/200 pips", главным критерием была торговля в период с 18.00 до 24.00, когда я находился дома, после основной работы. Это вылилось в систему, которая давала сигналы на вход в рынок в 20.00 по московскому времени. Выход происходит по Стоп Лоссу или Тейк Профиту автоматически. Соотношение Тейк Профита к Стоп Лоссу - 20/200 pips, отсюда и название. В дальнейшем, правда, на Альпари перешли к 5-ти значным котировкам, поэтому соотношение стало 200/2000. Но это никакой роли не играло.

кривая баланса

Содержание

Правила торговли

Сигналы на покупку и продажу генерируются по следующему принципу:
В момент времени TradeTime (например, в 20.00 по Москве) проверить изменение цены за период от t = TradeTime - t1 до t = TradeTime - t2. Если цена за этот период выросла на величину больше delta, то входим в длинную позицию. И наоборот, если цена упала, то входим в короткую. Значения TradeTime, t1, t2, delta находим с помощью оптимизации.

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

Фильтруем торговые сигналы

В данную версию советника, я также включил фильтры, которыми можно отфильтровывать некоторые сигналы на торговлю. В данном случае мы запрещаем торговать по понедельникам dayout=1 и в январе monthout=1. Это две внешние переменные, которые можно задавать перед запуском советника. Значение 1 - это номер дня или месяца. Понедельник и Январь были подобраны с помощью тестера и показали наилучшие результаты. С этими фильтрами система показывает результаты лучше, чем без них, поэтому из использование имеет смысл.

Фильтры появились не сразу. Когда система настроена и показывает хорошие результаты торговли на Форексе, то всегда хочется их улучшить. Один из способов - попытаться отфильтровать неудачные сделки. Что я и сделал, используя простейшие средства, в духе данного советника.

Результаты тестирования советника

Ниже, привожу скриншот результатов тестирования советника на исторических данных. Период выбран большой: с 1999 года по 2018. История котировок от Альпари. Время перелома доходности где-то в 2012-2013 годах. Что то видать изменилось в это время. Это можно попытаться понять, если покопаться поглубже. Чем, возможно, я займусь в ближайшее время. По крайне мере можно попытаться. Итак результаты:

результаты тестов

Настройки тестера

Встроенный в Метатрейдер 4 тестер торговых стратегий, имеет некоторые настройки. Я использовал модель по ценам открытия. Это в самый раз подходит для тестирования моей системы, т.к. для анализа используются цены открытия часовых баров, а открытие сделки происходит в момент появления нового ценового бара в 18.00 CET (время терминала), т.е. тоже по цене открытия:

настройки тестера

Настройки советника

Перед запуском советника необходимо его настроить, задав все внешние параметры. Однако, в коде советника, у всех этих параметров есть значение по умолчанию, поэтому настройку его можно не производить. Но, всегда будет полезно проверить все ли параметры соответствуют нашим замыслам. Нажимаем кнопку "Свойства эксперта" в окне настроек тестера и проверяем настройки. Вот настройки моего советника для тестирования на исторических котировках от Альпари:

настройки советника

Код советника на MQL4

С самого начала код советника был написан на MQL4 и с тех пор нисколько не изменился. Было сделано несколько модификаций, некоторые из их есть на этом сайте, но основной код для тестирования не изменялся. Комментарии в коде помогут понять, что и как:

//+------------------------------------------------------------------+
//| 20 pips expert.mq4 |
//| EUR/USD |
//| www.autoforex.ru |
//| |
//+------------------------------------------------------------------+

#property copyright "hwmaster"
#property link "www.autoforex.ru"

extern int TakeProfit = 220;
extern int StopLoss = 2200;
extern int TradeTime=18;
extern int t1=7;
extern int t2=2;
extern int delta=70;

extern int dayout=1;
extern int monthout=1;

extern int trades=1;
extern double lot = 0.01;

extern int magic=54321;
int ticket;
bool cantrade=true;

//функция открытия длинной позиции
int OpenLong(double volume=0.01, int slippage=10, string comment="EUR/USD 20 pips expert (Long)", color arrow_color=Red, int magic_num=0){
ticket=OrderSend(Symbol(),OP_BUY,volume,Ask,slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,magic_num,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.01, int slippage=10, string comment="EUR/USD 20 pips expert (Short)", color arrow_color=Red,int magic_num=0){
ticket=OrderSend(Symbol(),OP_SELL,volume,Bid,slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,magic_num,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(){
if((Symbol()!="EURUSD")||(Period()!=PERIOD_H1)){Alert("Советник может торговать только на EUR/USD H1");}
return(0);
}

int deinit(){
return(0);
}

int OrdersTotalMagic(){
int res,tot;
tot=OrdersTotal();
res=0;
for(int i=0;i<tot;i++){
if(OrderSelect(i,SELECT_BY_POS)){
if(OrderMagicNumber()==magic) res++;
}
else{continue;}
}
return(res);
}

int start(){
int total;
//cantrade используется, чтобы исключить несколько сигналов на торговлю в течени одной часовой свечи.
if((TimeHour(TimeCurrent())>TradeTime)) cantrade=true;
// проверяем есть ли открытые ордера с нашим магическим номером magic
total=OrdersTotalMagic();
//Заходим в режим торговли, только после проверок. Количество одновременно открытых ордеров должно быть меньше trades, тогда можно торговать.
if((total<trades)&&(Symbol()=="EURUSD")&&(Period()==PERIOD_H1)&&(cantrade)){
// проверяем возможность встать в позицую, смотрим текущее время, текущий день, текущий месяц:
if((TimeHour(TimeCurrent())==TradeTime)&&(cantrade)&&(TimeDayOfWeek(TimeCurrent())!=dayout)&&(TimeMonth(TimeCurrent())!=monthout)){
//проверяем условие входа в короткую позицию и открываем её
if((Open[t1]>(Open[t2]+delta*Point))){
OpenShort(lot,10,"EUR/USD 20 pips expert (Short)",Blue,magic);
cantrade=false;
return(0);
}
//проверяем условие входа в длинную позицию и открываем её
if (((Open[t1]+delta*Point)<Open[t2])){
OpenLong(lot,10,"EUR/USD 20 pips expert (Long)",Blue,magic);
cantrade=false;
return(0);
}
}
}
return(0);
}

Заключение

Торговая система "20/200 pips" давала хорошие результаты вплоть до 2012 года. Затем, что-то случилось и система перестала приносить прибыль. С чем это связано, еще предстоит разобраться, однако, возможно, мы так и не узнаем, что случилось и почему стратегия перестала работать. На Форексе такое случается. Но я, все же, верю, что систему можно перенастроить под изменившиеся условия на финансовых рынках. Если у вас есть идеи по поводу системы, вы всегда можете связаться со мной по емайл, указанному в разделе контактов. Удачи вам в ваших исследованиях.

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