Я много раз видел такие цифры и мониторинг трейдеров с подобной доходностью, но никогда не представлял как такое возможно реализовать. Рассматривая повнимательнее сделки трейдера из верхней строчки рейтинга портала, мне удалось приблизиться к решению данного вопроса. Технический и фундаментальный анализ в связке предоставляют такую возможность.
Рассмотрим недельный график пары EURUSD:
Ширина канала колеблется в пределах 10-15 тыс. пунктов по 5-ти знаку. Продолжительность тенденции от полугода до 5 и более лет. Последний коридор длится около двух лет и имеет ширину около 12 тыс пунктов. Открываясь небольшим лотом от границ канала можно спокойно достичь требуемой доходности и 100% сделок в плюс.
В эффективности и реальности данного метода торговли мы можем убедиться на примере трейдов пользователя:
fxsev
Что он делает в своей торговле? С июня месяца он ищет входы на покупку, стопом в его сделках в подавляющем большинстве служит стопаут при этом берется небольшой тейк. Но даже при этом хаотичном виде торговли мы видим его доходность. На его счету не было бы таких просадок, если бы он торговал на отбой от границ канала.
Лето как правило славится своим боковым движением по евре, набрав за это время ощутимый процент к депозиту, все последующие месяцы он ведет торговлю с понижением риска, что позволяет ему ежемесячно выводить по 200-300 долларов. Начинал он с суммы около 10 долларов.
Если протестировать подобную стратегию на истории мы получим следующие результаты. Открываясь по тренду всего лишь одним лотом на депо в 10000, через совсем небольшой промежуток времени мы получает 10000% прибыли. При этом мы сходили только в одну сторону канала а как мы видим наш коридор за последние 2 года содержит целых 5 таких проходов.
Чтобы протестировать стратегию можете воспользоваться моей версией ручного тестера:
//+------------------------------------------------------------------+
//| HandTester.mq4 |
//| Copyright 2016, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
//--- Inputs
extern double Lots = 0.1; // лот
extern int StopLoss = 150; // лось
extern int TakeProfit = 600; // язь
extern int BULevel = 150; // уровень БУ
extern int BUPoint = 30; // пункты БУ
extern int TrailingStop = 200; // трал
extern int TrailingStep = 20; // шаг трала
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
PutButton("B",100,120,"BUY");
PutButton("S",100,80,"SELL");
PutButton("C",100,40,"CLOSE");
PutEdit("L",60,30,(string)Lots);
PutLable("LT",10,32,"LOT");
PutEdit("SL",60,60,(string)StopLoss);
PutLable("ST",10,62,"SL");
PutEdit("TP",60,90,(string)TakeProfit);
PutLable("TK",10,92,"TP");
PutEdit("BU",60,120,(string)BULevel);
PutLable("Z",10,122,"BU");
PutEdit("TS",60,150,(string)TrailingStop);
PutLable("TR",10,152,"TS");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
ObjectDelete(0,"B");
ObjectDelete(0,"S");
ObjectDelete(0,"C");
ObjectDelete(0,"L");
ObjectDelete(0,"LT");
ObjectDelete(0,"SL");
ObjectDelete(0,"ST");
ObjectDelete(0,"TP");
ObjectDelete(0,"TK");
ObjectDelete(0,"BU");
ObjectDelete(0,"Z");
ObjectDelete(0,"TS");
ObjectDelete(0,"TR");
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutButton(string name,int x,int y,string text)
{
ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим текст
ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет текста
ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(0,name,OBJPROP_HIDDEN,false);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger(0,name,OBJPROP_ZORDER,0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutEdit(string name,int x,int y,string text)
{
//--- создадим поле ввода
ObjectCreate(0,name,OBJ_EDIT,0,0,0);
//--- установим координаты объекта
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размеры объекта
ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим текст
ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим способ выравнивания текста в объекте
ObjectSetInteger(0,name,OBJPROP_ALIGN,ALIGN_CENTER);
//--- установим (true) или отменим (false) режим только для чтения
ObjectSetInteger(0,name,OBJPROP_READONLY,false);
//--- установим угол графика, относительно которого будут определяться координаты объекта
ObjectSetInteger(0,name,OBJPROP_CORNER,0);
//--- установим цвет текста
ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutLable(string name,int x,int y,string text)
{
//--- создадим текстовую метку
ObjectCreate(0,name,OBJ_LABEL,0,0,0);
//--- установим координаты метки
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger(0,name,OBJPROP_CORNER,0);
//--- установим текст
ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет
ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
}
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера |
//+------------------------------------------------------------------+
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);
}
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
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 Trailing()
{
bool mod;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==OP_BUY)
{
if(Bid-OrderOpenPrice()>TrailingStop*Point)
{
if(OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point)
{
mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,OrderTakeProfit(),0,Yellow);
return;
}
}
}
if(OrderType()==OP_SELL)
{
if((OrderOpenPrice()-Ask)>TrailingStop*Point)
{
if(OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*Point || OrderStopLoss()==0)
{
mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,OrderTakeProfit(),0,Yellow);
return;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void BU()
{
bool m;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
{
if(OrderOpenPrice()<=(Bid-(BULevel+BUPoint)*Point) && OrderOpenPrice()>OrderStopLoss())
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+BUPoint*Point,OrderTakeProfit(),0,Yellow);
return;
}
}
if(OrderType()==OP_SELL)
{
if(OrderOpenPrice()>=(Ask+(BULevel+BUPoint)*Point) && (OrderOpenPrice()<OrderStopLoss() || OrderStopLoss()==0))
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-BUPoint*Point,OrderTakeProfit(),0,Yellow);
return;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(BULevel>0) BU();
if(TrailingStop>0) Trailing();
if(ObjectGetInteger(0,"B",OBJPROP_STATE)==1)
{
PutOrder(0,Ask);
ObjectSetInteger(0,"B",OBJPROP_STATE,false);
}
if(ObjectGetInteger(0,"S",OBJPROP_STATE)==1)
{
PutOrder(1,Bid);
ObjectSetInteger(0,"S",OBJPROP_STATE,false);
}
if(OrdersTotal()>0 && ObjectGetInteger(0,"C",OBJPROP_STATE)==1)
{
CloseAll();
ObjectSetInteger(0,"C",OBJPROP_STATE,false);
}
}
//+------------------------------------------------------------------+
Данная версия открывает несколько ордеров одновременно, также сразу их закрывает. Если вам нужна версия в которой можно будет менять лот и другие параметры во время тестирования, обращайтесь в
Стол заказов MQL.
Комментарии (19)
9 ATSForex Сообщений: 180 - ATS Forex
8 Paguk Сообщений: 328 - суровый трейдер
23 poker Сообщений: 867
35 AM2 Автор Сообщений: 16564 - Андрей
23 poker Сообщений: 867
35 AM2 Автор Сообщений: 16564 - Андрей
10 fxsev Сообщений: 118 - Эдуард
6 vasdco Сообщений: 116 - Мастер
35 AM2 Автор Сообщений: 16564 - Андрей
6 vasdco Сообщений: 116 - Мастер
21 Drughemp Сообщений: 793 - Александр
оставляющий предыдущие прорисовки на своих местах?
Примерно так, как на скрине вначале (недельный график пары EURUSD).
MTF — чтоб накладывать каналы бОльших периодов на рабочий, «канал в канале» — так ещё интереснее ))).
Было б классно!
11 preasto Сообщений: 445
13 maximyc Сообщений: 23
4 kostik83 Сообщений: 3 - kostik
35 AM2 Автор Сообщений: 16564 - Андрей
4 kostik83 Сообщений: 3 - kostik
35 AM2 Автор Сообщений: 16564 - Андрей
4 kostik83 Сообщений: 3 - kostik
1 Myazhkand Сообщений: 40 - Myazhkand
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий