Stochastic_v4





//+------------------------------------------------------------------+
//|                                                   Stochastic.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int  cnt,TrailingStop,per; 
  int slippage,StopLoss,TakeProfit;
  slippage = 3;
  double AlligatorHigh,AlligatorLow,Temp;
  double StoM0,StoS0,StoM1,StoS1,StoM2,StoS2,StoM3,StoS3;
  double AC3,AC2,AC1;
  double DeltaLimit;
  double DeltaOpen,DeltaOpen1,AngleOpen,DeltaClose;
  

DeltaOpen = 0.1;
DeltaOpen1 = 0.1;
AngleOpen = 2;
DeltaClose = 4;
DeltaLimit = 0;
StopLoss = 50;
TakeProfit = 100;
TrailingStop =15;
// íà÷àëî áëîêà ïîêóïêè 
if (OrdersTotal() < 1)
{ 

if ((Period() < 60) || (Minute() != 0) || (AccountFreeMargin() < 100))  //  (Mod(Minute,15) > 0) then 
//Íå òîðãîâàòü íà ìàëåíüêèõ ïåðèîäàõ è â èíòåðâàëå 
return(0);

}

per = PERIOD_H4;
StoM1 = iStochastic(Symbol(),per,10,5,5,MODE_EMA,0,MODE_MAIN,1);
StoM2 = iStochastic(Symbol(),per,10,5,5,MODE_EMA,0,MODE_MAIN,2);
StoM3 = iStochastic(Symbol(),per,10,5,5,MODE_EMA,0,MODE_MAIN,3);
StoS1 = iStochastic(Symbol(),per,10,5,5,MODE_EMA,0,MODE_SIGNAL,1);
StoS2 = iStochastic(Symbol(),per,10,5,5,MODE_EMA,0,MODE_SIGNAL,2);
StoS3 = iStochastic(Symbol(),per,10,5,5,MODE_EMA,0,MODE_SIGNAL,3);



AC1 = iAC(Symbol(),per,1); 
AC2 = iAC(Symbol(),per,2); 
AC3 = iAC(Symbol(),per,3); 

if (OrdersTotal() <1) 
{ 
//Ìîæíî æäàòü ñèãíàëà íà ïðîäàæó 
if ((StoM2 > (StoM1 + AngleOpen)) && ((StoM1+DeltaOpen1) < StoS1) && ((StoM2-DeltaOpen) > StoS2) && ((StoM3-DeltaOpen) > StoS3) && ((AC1 < AC2)))
{ 
//Åñòü ïåðåñå÷åíèå 
OrderSend(Symbol(),OP_SELL,MathMax(0.1,MathFloor(AccountFreeMargin()/500)/10),Ask+DeltaLimit*Point,slippage, Ask+StopLoss*Point+DeltaLimit*Point, Bid-TakeProfit*Point+DeltaLimit*Point,"Sell",0,0,Blue); 
//SetOrder(OP_SELLLIMIT,Lots,Ask+DeltaLimit*Point,Slippage, Ask+StopLoss*Point+DeltaLimit*Point, Bid-TakeProfit*Point+DeltaLimit*Point,Blue); 
Alert("Sell - ",Symbol(),"\n","Date - ",TimeToStr(CurTime()),"\n","Balance - ",AccountBalance()); 

} 

//Ìîæíî æäàòü ñèãíàëà íà ïðîäàæó 
if ((StoM2 < StoM1 - AngleOpen) && (StoM1-DeltaOpen1 > StoS1) && (StoM2+DeltaOpen < StoS2) && (StoM3+DeltaOpen < StoS3) && ((AC1 > AC2))) 
{ 
//Åñòü ïåðåñå÷åíèå 
OrderSend(Symbol(),OP_BUY,MathMax(0.1,MathFloor(AccountFreeMargin()/500)/10),Bid-DeltaLimit*Point,slippage, Bid-StopLoss*Point-DeltaLimit*Point, Ask+TakeProfit*Point-DeltaLimit*Point,"Buy",0,0,Red); 
//SetOrder(OP_BUYLIMIT,Lots,Bid-DeltaLimit*Point,Slippage, Bid-StopLoss*Point-DeltaLimit*Point, Ask+TakeProfit*Point-DeltaLimit*Point,Red); 
Alert("Buy - ",Symbol(),"\n","Date - ",TimeToStr(CurTime()),"\n","Balance - ",AccountBalance()); 

} 
return(0);
}// êîíåö áëîêà ïîêóïêè 

StoM0 = iStochastic(Symbol(),per,10,5,5,MODE_EMA,0,MODE_MAIN,0);
StoS1 = iStochastic(Symbol(),per,10,5,5,MODE_EMA,0,MODE_SIGNAL,0);

// ïåðåìåùåíèå îòëîæåííûõ ïîçèöèé è ñòîïëîñîâ ïî îòêðûòûì ïîçèöèÿì 
for (cnt=1; cnt<OrdersTotal(); cnt++) // íà÷àëî öèêëà ïåðåáîðêè ïîçèöèé èç îêíà òîðãîâëè 
{ 
 OrderSelect(cnt, SELECT_BY_POS);
if (OrderSymbol()==Symbol()) 
{ 
if (OrderType()==OP_BUY)  /* Äëèííàÿ ïîçèöèÿ */ 
{ 
if ((Bid-OrderOpenPrice())>(15*Point) && OrderStopLoss()<OrderOpenPrice()) 
{ 

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+5*Point,OrderTakeProfit(),Pink);
 /* äåëî ñäåëàëè - âûõîäèì. */ 
} 
if ((Bid-OrderOpenPrice())>(TrailingStop*Point))
{ 
/* äà, ïîçèöèÿ èìååò ïðèáûëü áîëüøå ÷åì çíà÷åíèå òðåéëèíã ñòîïà 
(íàïðèìåð 30 ïóíêòîâ). òåïåðü íàäî ïðîâåðèòü, ìîæíî ëè 
ïîñòàâèòü ñòîï ëó÷øå ÷åì îí áûë ðàíåå? */ 
if (OrderStopLoss()<(Bid-TrailingStop*Point)) 
{ 
/* ìåíÿåì ñòîïëîññ íà óðîâåíü Bid-Trailing Stop */ 
OrderModify(OrderTicket(),OrderOpenPrice(), 
Bid-TrailingStop*Point,OrderTakeProfit(),Pink); 
} 
return(0);
//Exit; /* äåëî ñäåëàëè - âûõîäèì. */ 

} 
if (/*(Close[1] < AlligatorHigh) or*/ (StoM1+DeltaClose < StoM2))
{ 
OrderClose(OrderTicket(),OrderLots( ) ,Bid,slippage,Green); 
//Alert("Balance - ",Balance,"\n","FreeMargin - ",FreeMargin,"\n","Margin - ",Margin,"\n","TotalProfit - ",TotalProfit); 
Alert("Balance - ",AccountBalance(),"\n","FreeMargin - ",AccountFreeMargin(),"\n","Margin - ",AccountMargin(),"\n","TotalProfit - ",AccountProfit()); 
} 
//Exit; 
return(0);
} 

if (OrderType()==OP_SELL) /*Êîðîòêàÿ ïîçèöèÿ */ 
{ 
if (((OrderOpenPrice() - Ask)>(15*Point)) && OrderStopLoss()>OrderOpenPrice()) 
{ 
OrderModify(OrderTicket(),OrderOpenPrice(), 
OrderOpenPrice()-5*Point,OrderTakeProfit(),Pink); 
//Exit; /* äåëî ñäåëàëè - âûõîäèì. */ 
return(0);
} 
/* ñíà÷àëà ïðîâåðèì - åñòü ëè ïðîôèò ó ýòîé ñäåëêè áîëüøå ÷åì 
óðîâåíü òðåéëèíã ñòîïà? ïðîâåðÿåì Ask, òàê êàê ïîçèöèÿ SELL */ 
if ((OrderOpenPrice()-Ask)>(TrailingStop*Point)) 
{ 
/* äà, ïîçèöèÿ èìååò ïðèáûëü áîëüøå ÷åì çíà÷åíèå òðåéëèíã ñòîïà 
(íàïðèìåð 30 ïóíêòîâ). òåïåðü íàäî ïðîâåðèòü, ìîæíî ëè 
ïîñòàâèòü ñòîï ëó÷øå ÷åì îí áûë ðàíåå? */ 
if (OrderStopLoss()>(Ask+TrailingStop*Point) || 
OrderStopLoss()==0 ) /* îáÿçàòåëüíîå óñëîâèå!!! */ 
{ 
/* ìåíÿåì ñòîïëîññ íà óðîâåíü Ask+Trailing Stop */ 
OrderModify(OrderTicket(),OrderOpenPrice(), 
Ask+TrailingStop*Point,OrderTakeProfit(),Pink); 
} 
return(0);
} 
if (/*(Close[1] > AlligatorLow) ||*/ (StoM1-DeltaClose > StoM2) )
{ 
OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Green); 
Alert("Balance - ",AccountBalance(),"\n","FreeMargin - ",AccountFreeMargin(),"\n","Margin - ",AccountMargin(),"\n","TotalProfit - ",AccountProfit()); 
} 
return(0);
}/* êîíöîâêà êîðîòêîé ïîçèöèè */ 
} 
} // êîíåö öèêëà ïåðåáîðêè ïîçèöèé èç îêíà òîðãîâëè 
  
  
  
   return(0);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar


Indicator Curves created:


Indicators Used:

Stochastic oscillator
Bill Williams Accelerator/Decelerator oscillator


Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders
It automatically opens orders when conditions are reached
It can change open orders parameters, due to possible stepping strategy
It Closes Orders by itself

Other Features:


It issuies visual alerts to the screen