// clives ma trailer

extern int malength = 35;
extern int matype = 3;
extern int tf = 1;
extern int buffer = 2;

double currma1, pipdigits;
int buytrades, selltrades;

int init()
{
pipdigitscalc();
}

int start()
{
currma1 = iMA(Symbol(),tf,malength,0,matype,0,1);

buytrades = 0; selltrades = 0;
for(int counter1 = 0; counter1 <= OrdersTotal()-1; counter1++)
{
OrderSelect(counter1, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol())
{
if(OrderType() == OP_BUY) buytrades++;
if(OrderType() == OP_SELL) selltrades++;
}
}  

if(buytrades > 0 && Bid < (currma1 - (buffer * pipdigits))) closeallbuytrades();
if(selltrades > 0 && Ask > (currma1 + (buffer * pipdigits))) closeallselltrades();

return(0);
}

double pipdigitscalc()
{
int digits = MarketInfo(Symbol(),MODE_DIGITS);
if(digits == 2 || digits == 3) pipdigits = 0.01;
else if(digits == 4 || digits == 5) pipdigits = 0.0001;
return(0);
}

void closeallbuytrades()
{
for(int counter5 = 0; counter5 <= OrdersTotal()-1; counter5++)
{
OrderSelect(counter5, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderType() == OP_BUY)
{
while(IsTradeContextBusy()) Sleep(10);
OrderClose(OrderTicket(),OrderLots(),Ask,100,CLR_NONE); 
counter5--;
}
}
return(0);
}

void closeallselltrades()
{
for(int counter6 = 0; counter6 <= OrdersTotal()-1; counter6++)
{
OrderSelect(counter6, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderType() == OP_SELL)
{
while(IsTradeContextBusy()) Sleep(10);
OrderClose(OrderTicket(),OrderLots(),Ask,100,CLR_NONE); 
counter6--;
}
}
return(0);
}