I updated my code. Simplified it and added your recommendations.
Code:
extern int MA_Period=5;
extern int MA_Method=1;
extern double Lots=0.1;
int init() {return(0);}
int deinit(){return(0);}
int start()
{
int BarOpen = 0; //Run Once Per Bar
if (Open[0] != BarOpen)
{
BarOpen=Open[0];
if (Close[2]<iMA(NULL,0,MA_Period,0,MA_Method,0,2)&&Close[1]>iMA(NULL,0,MA_Period,0,MA_Method,0,1)) // Uptrend
{
int total = OrdersTotal(); //Close Short Positions
for(int i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS);
if(OrderSymbol()==Symbol()&& OrderType()==1)
{bool result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );}
}
OrderSend (Symbol(),0,Lots,Ask,3,NULL,NULL,NULL,0,0,Green); // Open Long Position
}
if (Close[2]>iMA(NULL,0,MA_Period,0,MA_Method,0,2)&&Close[1]<iMA(NULL,0,MA_Period,0,MA_Method,0,1)) //Downtrend
{
total = OrdersTotal(); //Close Long Positions
for(i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS);
if(OrderSymbol()==Symbol()&& OrderType()==0)
{result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );}
}
OrderSend (Symbol(),0,Lots,Bid,3,NULL,NULL,NULL,0,0,Green); //Open Short
}
return(0);
}
}
It seems to be working much better

, except for the multiple trades per bar issue. Can you help me with that ?
Capture.PNG
Thanks.