//+------------------------------------------------------------------+
//| myMACD.mq4 |
//| cuiyi |
//| 1010333562 |
//+------------------------------------------------------------------+
#property copyright "cuiyi"
#property link "1010333562"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
void OnTick(void)
{
double Macd[5],MacdMax,MacdMin,NowMacd,AverMacd,STD,Lot;
int total,T = 1;
if(Hour()>15 && Hour()<23) {Lot=NormalizeDouble(AccountBalance()/200,0);}
else {Lot=NormalizeDouble(AccountBalance()/400,0);}
if((Hour()*100 + Minute()) < 500 || (Hour()*100 + Minute()) > 2240) return;
if(AccountBalance()<600 || IsTradeAllowed()==false) return;
NowMacd=iMACD(NULL,T,10,20,6,PRICE_CLOSE,MODE_MAIN,0);
Macd[0]=iMACD(NULL,T,10,20,6,PRICE_CLOSE,MODE_MAIN,1);
Macd[1]=iMACD(NULL,T,10,20,6,PRICE_CLOSE,MODE_MAIN,2);
Macd[2]=iMACD(NULL,T,10,20,6,PRICE_CLOSE,MODE_MAIN,3);
Macd[3]=iMACD(NULL,T,10,20,6,PRICE_CLOSE,MODE_MAIN,4);
Macd[4]=iMACD(NULL,T,10,20,6,PRICE_CLOSE,MODE_MAIN,5);
AverMacd=(Macd[0]*5+Macd[1]*4+Macd[2]*3+Macd[3]*2+Macd[4])/(1+2+3+4+5);
MacdMax=Macd[ArrayMaximum(Macd)];
MacdMin=Macd[ArrayMinimum(Macd)];
STD=iStdDev(NULL,T,6,0,MODE_EMA,PRICE_CLOSE,0);
total=OrdersTotal();
if(total<1)
{
datetime lastTrade = 0;
int n;
if(STD<6) return;
for (n=0; n< OrdersHistoryTotal(); n++)
{
if(lastTrade < OrderOpenTime())
{
lastTrade = OrderOpenTime();
}
}
if(lastTrade < iTime(Symbol(),T,0))
{
if(NowMacd > AverMacd)
{
OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,0,"",0,0,Blue);
return;
}
if(NowMacd < AverMacd)
{
OrderSend(Symbol(),OP_SELL,Lot,Bid,3,0,0,"",0,0,Red);
return;
}
}
else return;
}
for(int i=0;i<OrdersTotal();i++)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(NowMacd < MacdMin)
{
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
Print("OrderClose error ",GetLastError());
}
break;
}
if(OrderType()==OP_SELL)
{
if(NowMacd > MacdMax)
{
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
Print("OrderClose error ",GetLastError());
}
break;
}
}
}
}