Продолжая наблюдать за успешными трейдерами рассмотрим сигнал «Mom Fund» на сервисе сигналы:
www.mql5.com/ru/signals/267224
Торгуется более десятка валютных пар. За время существования счета, около полугода, баланс увеличен на 50%, с 674000 до 972000 баксов, хотя в мониторинге цифра 368%. Просадка 11%.
Далее рассмотрим стиль торговли:
По сделкам видно что торговля достаточно сумбурная, но можем заметить что в основном сделки открываются на каждой часовой свече после превышения уровней перекупленности перепроданности. Некоторые из сделок не закрываются достаточно длительное время а другие закрываются быстро.
По аналогии в советнике будем открывать 2 типа сделок: долгосрочные без стопов и доливками и краткосрочные против ренда со стопами.
Тренд будем определять по МА на дневках, а уровни для открытия по индикатору RSI. Закрываться сделки у нас будут по общему профиту или убытку в валюте или по стопам.
По данному алгоритму набросаем следующий советник:
//+------------------------------------------------------------------+
//| Fond.mq4 |
//| Copyright 2017, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
//--- Inputs
extern double Lots = 0.1; // лот
extern double Loss = 3000; // лось в рублях
extern double Profit = 1000; // язь в рублях
extern int StopLoss = 2222; // лось
extern int TakeProfit = 150; // язь
extern int MAPeriod = 4; // период MA
extern int RSIPeriod = 14; // период RSI
extern int RSILevel = 20; // уровень RSI
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
{
int r=0;
color clr=Green;
double sl=0,tp=0;
if(type==1 || type==3 || type==5)
{
clr=Red;
if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits);
if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
}
if(type==0 || type==2 || type==4)
{
clr=Blue;
if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits);
if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
}
r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutTrendOrder(int type,double price)
{
int r=0;
color clr=Green;
if(type==1 || type==3 || type==5)
{
clr=Red;
}
if(type==0 || type==2 || type==4)
{
clr=Blue;
}
r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,0,0,"",Magic,0,clr);
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CountTrades()
{
int count=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()<2) count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
{
bool cl;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==0 && (ot==0 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
}
if(OrderType()==1 && (ot==1 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
}
}
}
}
}
//+------------------------------------------------------------------+
//| Профит всех ордеров по типу ордера |
//+------------------------------------------------------------------+
double AllProfit(int ot=-1)
{
double pr=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==0 && (ot==0 || ot==-1))
{
pr+=OrderProfit()+OrderCommission()+OrderSwap();
}
if(OrderType()==1 && (ot==1 || ot==-1))
{
pr+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
return(pr);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OpenPos()
{
double ma=iMA(NULL,PERIOD_D1,MAPeriod,0,0,0,0);
double rsi=iRSI(NULL,0,RSIPeriod,0,0);
if(rsi<RSILevel && Ask>ma)
{
PutOrder(1,Bid);
PutTrendOrder(0,Ask);
}
if(rsi>100-RSILevel && Bid<ma)
{
PutOrder(0,Ask);
PutTrendOrder(1,Bid);
}
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(t!=Time[0])
{
OpenPos();
t=Time[0];
}
if(AllProfit()>=Profit || AllProfit()<-Loss) CloseAll();
}
//+------------------------------------------------------------------+
Оптимизируем его с начала 15-го года по сегодняшний день и в результате получаем следующий график:
А сейчас попробуем немного изменить условия входа, закупаться будем когда цена ниже МА на дневках а продавать когда выше:
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OpenPos()
{
double ma=iMA(NULL,PERIOD_D1,MAPeriod,0,0,0,0);
double rsi=iRSI(NULL,0,RSIPeriod,0,0);
if(rsi<RSILevel && Ask<ma)
{
PutOrder(1,Bid);
PutTrendOrder(0,Ask);
}
if(rsi>100-RSILevel && Bid>ma)
{
PutOrder(0,Ask);
PutTrendOrder(1,Bid);
}
}
После оптимизации мы увидим что по этому алгоритму мы больше приблизились к торговле оригинала, но зато выросла просадка:
П.С. Дальнейшие эксперименты я предпочитаю доверить вам, уважаемые пользователи
Скачать советник можно по ссылке:
www.opentraders.ru/downloads/1550/
Комментарии (6)
Открытие ордеров:
• По-шагу. Шаг вверх – покупка, шаг вниз – продажа. Для работы в тренде.
• Против шага. Шаг вверх – продажа, шаг вниз – покупка. Для работы во флете.
• По-шагу и против шага. Шаг вверх – покупка и продажа, шаг вниз – продажа и покупка. Для агрессивного входа в рынок.
Шаг задаётся в пунктах.
Фильтры открытия ордеров:
Фильтром служит цена открытия свечи (open). Если цена выше open – советник покупает, если ниже – продает.
Можно выбирать все доступные свечи:
M1, M5, M15, M30, H1, H4, D1, W1, MN.
Открытие ордера
Открытие происходит одним ордером, объёмом равным произведению объёма ордера в настройках на количество уровней.
Например, выбраны H1, H4, D1.
При этом H1-бык, H4-медведь, D1-медведь
Советник при прохождении цены вверх на 1 шаг открывает buy = 0,01х1=0,01
при прохождении цены вниз на 1 шаг открывает sell = 0,01х2=0,02
Закрытие по прибыли
• по индивидуальному для каждого ордера тейкпрофиту в пунктах.
• Sell по суммарной прибыли в валюте депозита.
• Buy по суммарной прибыли в валюте депозита.
• Все по суммарной прибыли в валюте депозита.
10 cardon Сообщений: 376
35 AM2 Автор Сообщений: 16266 - Андрей
а вот взято 2 периода Н1 и D1
10 cardon Сообщений: 376
forexsystemsru.com/sovetniki-eksperty-foreks-roboty/84811-sovetnik-miner.html
10 cardon Сообщений: 376
Андрей, можете в этот сов (по ссылке к-ю cardon дал) добавить— время начала/окончания в час.мин., — направление первого ордера(Бай или Селл), — и общий лок по времени окончания?
Или сделать подобный, по описанию в таком виде?
В общем — этот сов. типа того, что в моём текущем ТЗ по открытию ордеров на каждой свече.
***
Дело в том, что на 2м этапе тестирую советники так:
ставлю на демку на какой-то период и оставляю там.
Далее, когда завершаешь цикл работы советника локом, то на графике остается и сетка незакрытых ордеров, и метки по закрытым.
В т.ч. и когда лок идёт вместо СЛ.
И понимать ситуацию и схему работы советника, в т.ч. что там можно подправить, значительно нагляднее и легче.
Вопрос пока снят, т.к. как видно — сов. сейчас в активной доработке у автора. Редактирован: 22 апреля 2017, 15:23
11 preasto Сообщений: 445
напр. запуск на открытие Лондона, Нью-Йорка и т.д., или стартовать ночью, после 3-4ч., а выключать, иногда, по времени, когда тебя рядом нет ).
11 preasto Сообщений: 445
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий