Гридер — советник, торгующий сеткой отложенных ордеров.
Идея позаимствована с сайта mql4.com.
Стратегия торговли проста как мир. Ставится ордер на покупку, либо на продажу и лочится стоп-ордером на расстоянии Delta1.
Далее набрасывается сетка из лимитных, либо стоповых ордеров на расстоянии delta один от другого. При достижении ценой профита — Profit, всё закрывается и продолжаем заново. Работаем на минутках.
Основная идея:
Если уровень ADX ниже 40, то считаем, что флет и выставляются лимитные ордеры, если выше, то стоповые;
Если DI+ выше чем DI-, то покупаем, если наоборот, то продаем.
Все линии по индикатору — ADX.
Дополнительные настройки — это klot — коэффициент на который умножается каждый следующий отложенный ордер, и pluslot — количество лотов, которое прибавляется при каждом следующем отложенном ордере.
Рис.1. Результат работы эксперта.
Код советника:
//+------------------------------------------------------------------+
//| Proffessor_v1_2011.mq4 |
//| Copyright © 2011, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
extern double lot = 0.1; //лот
extern int MAX_Lines = 5; //максимальное колличество отложенных ордеров каждого направления
extern double klot = 1; //коэффициент умножения лотов при удалении от цены
extern double pluslot = 0.1; //коэффициент доливки лота при удалении от цены
extern int plusDelta = -5; //коэффициент увеличения расстояния между отложенными ордерами
//если значение отрицательное, то расстояние уменьшается на данное кол-во пунктов
extern double Delta1 = 70; //первая дельта от цены для стопового ордера
extern int Delta = 60; //расстояние между отложенными ордерами
extern double ProfitClose = 0.8; //закрывать все ордера при получении профита(в долларах)
extern double f = 40; //параметр границы флета по ADX
extern double bar = 2; //сдвиг по барам ADX
extern double timeframe = 1; //таймфрейм для индикатора ADX 0-текущий,1-1минута, 2-5минут, 3-15минут, 4-30минут, 5-1час
//6-4часа, 7-день, 8-неделя, 9-месяц
extern int magic = 123; //магик
extern int StartHour = 0; //час начала работы советника
extern int EndHour = 24; //час окончания работы советника
extern int pop = 3; //количество попыток закрыть ордер
int init() {
Comment("ProfessorSoft_v3_2011");
return (0);
}
int deinit() {
Comment("");
return (0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
bool ticket;
double Lots;
int x,q;
bool trade=false;
trade=true;
double iflet,ibuy,isell;
int _timeframe;
if(timeframe==1)_timeframe=1;
else if(timeframe==0)_timeframe=0;
else if(timeframe==2)_timeframe=5;
else if(timeframe==3)_timeframe=15;
else if(timeframe==4)_timeframe=30;
else if(timeframe==5)_timeframe=60;
else if(timeframe==6)_timeframe=240;
else if(timeframe==7)_timeframe=1440;
else if(timeframe==8)_timeframe=10080;
else _timeframe=43200;
if(OrdersTotal()==0 && trade==true && time()==true)
{
ticket=-1;
iflet=iADX( Symbol(), _timeframe, 14, PRICE_CLOSE,MODE_MAIN, bar);
ibuy=iADX( Symbol(), _timeframe, 14, PRICE_CLOSE,MODE_PLUSDI, bar);
isell=iADX( Symbol(), _timeframe, 14, PRICE_CLOSE,MODE_MINUSDI, bar);
if(iflet<f && ibuy>isell)//условие для покупки и определение флета
{
Lots=lot;
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",magic,0,Blue);
if(ticket==-1)return(0);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Delta1*Point,3,0,0,"",magic,0,Red);
for(x=1;x<=MAX_Lines;x++)
{
Lots=NormalizeDouble(Lots*klot,2)+pluslot;
OrderSend(Symbol(),OP_BUYLIMIT,Lots,Ask-(Delta1+x*NormalizeDouble(Delta+plusDelta*x/2,0))*Point,3,0,0,"",magic,0,Blue);
OrderSend(Symbol(),OP_SELLLIMIT,Lots,Bid+x*NormalizeDouble(Delta+plusDelta*x/2,0)*Point,3,0,0,"",magic,0,Red);
}
}
else if(iflet<f && ibuy<isell)//условие для продажи и определение флета
{
Lots=lot;
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",magic,0,Red);
if(ticket==-1)return(0);
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Delta1*Point,3,0,0,"",magic,0,Blue);
for(x=1;x<=MAX_Lines;x++)
{
Lots=NormalizeDouble(Lots*klot,2)+pluslot;
OrderSend(Symbol(),OP_BUYLIMIT,Lots,Ask-x*NormalizeDouble(Delta+plusDelta*x/2,0)*Point,3,0,0,"",magic,0,Blue);
OrderSend(Symbol(),OP_SELLLIMIT,Lots,Bid+(Delta1+x*NormalizeDouble(Delta+plusDelta*x/2,0))*Point,3,0,0,"",magic,0,Red);
}
}
else if(iflet>f && ibuy>isell)//условие для покупки и определение тренда
{
Lots=lot;
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",magic,0,Blue);
if(ticket==-1)return(0);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Delta1*Point,3,0,0,"",magic,0,Red);
for(x=1;x<=MAX_Lines;x++)
{
Lots=NormalizeDouble(Lots*klot,2)+pluslot;
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-(Delta1+x*NormalizeDouble(Delta+plusDelta*x/2,0))*Point,3,0,0,"",magic,0,Blue);
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+x*NormalizeDouble(Delta+plusDelta*x/2,0)*Point,3,0,0,"",magic,0,Red);
}
}
else if(iflet>f && ibuy<isell)//условие для продажи и определение тренда
{
Lots=lot;
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",magic,0,Red);
if(ticket==-1)return(0);
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Delta1*Point,3,0,0,"",magic,0,Blue);
for(x=1;x<=MAX_Lines;x++)
{
Lots=NormalizeDouble(Lots*klot,2)+pluslot;
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-x*NormalizeDouble(Delta+plusDelta*x/2,0)*Point,3,0,0,"",magic,0,Blue);
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+(Delta1+x*NormalizeDouble(Delta+plusDelta*x/2,0))*Point,3,0,0,"",magic,0,Red);
}
}
else return(0);
}
if(OrdersTotal()>0)
{
Comment(" Balance ",AccountBalance(),"\n Equity ",AccountEquity(),"\n Profit ",OrdersProfit());
if(OrdersProfit()>=ProfitClose)
{
for (int i=OrdersTotal()-1;i>=0;i--)
{
bool closed;
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)
{
for(q=0;q<pop;q++)
{
closed=false;
closed=OrderClose(OrderTicket(),OrderLots(),Bid,3,Blue);
if(closed==true)q=pop;
}
}
if(OrderType()==OP_SELL)
{
for(q=0;q<pop;q++)
{
closed=false;
closed=OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
if(closed==true)q=pop;
}
}
Sleep(1000);
if(OrderType()>1 ) OrderDelete(OrderTicket());
}
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
bool time()
{
if (StartHour<EndHour)
{if (Hour()>=StartHour && Hour()<EndHour) return(true); else return(false);}
if (StartHour>EndHour)
{if (Hour()>=EndHour && Hour()<StartHour) return(false); else return(true);}
}
double OrdersProfit()
{
double rezultSymb=0;
string SMB=Symbol();
int i;
for (i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
{
if(OrderSymbol()!= SMB) continue;
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
rezultSymb+=OrderProfit();
}
}
}
return(rezultSymb);
}
Чем вам не грааль?