Help me fix my EA so that it trades once per signal when it hit either SL, TP or trailing stop. I want it to wait for next signal
- Experts: Hedg System
- Need code for EA: only one trade per signal - event the trade has been close.
- # need help to edit EA
The EA keeps opening trades when current one is closed by either SL, TP or Trailing Stop, because conditions remain valid.
I want help to make EA trade only once per signal. It should wait for next signal before opening trade when the current trade is closed; even if trade conditions remain valid.
Please find the source code and insert for me if possible.
Thank you
you can always wrap if orderstotal()==0 around the orderloop then it will only order when there are no open orders.
It's a quick fix.
I have not encountered this problem before. I tried but it ended up something else. Embarrassing, I know.
But it's always right to ask for help
//+------------------------------------------------------------------+ #property copyright " " #property link " " #property description "Stochastic EA" #property version "1.0" #property strict extern int MagicNumber=10001; extern double Lots=0.1; extern double StopLoss=50; extern double TakeProfit=100; extern int TrailingStop=30; extern int Slippage=3; static input ENUM_TIMEFRAMES timeframe=PERIOD_D1;// One trade per bar... datetime time; //+------------------------------------------------------------------+ // expert start function //+------------------------------------------------------------------+ int start() { if(time!=iTime(_Symbol,timeframe,0)) { double MyPoint=Point; if(Digits==3 || Digits==5) MyPoint=Point*10; double TheStopLoss=0; double TheTakeProfit=0; if(TotalOrdersCount()==0) { int result=0; if((iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_MAIN,0)>iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_SIGNAL,0))) // Here is your open buy rule { result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"Stoch EA",MagicNumber,0,Blue); if(result>0) { TheStopLoss=0; TheTakeProfit=0; if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint; if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint; OrderSelect(result,SELECT_BY_TICKET); OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green); } return(0); } if((iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_MAIN,0)<iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_SIGNAL,0))) // Here is your open Sell rule { result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"Stoch EA",MagicNumber,0,Red); if(result>0) { TheStopLoss=0; TheTakeProfit=0; if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint; if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint; OrderSelect(result,SELECT_BY_TICKET); OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green); } return(0); } } time=iTime(_Symbol,timeframe,0); } for(int cnt=0;cnt<OrdersTotal();cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if(OrderType()<=OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber ) { if(OrderType()==OP_BUY) { if((iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_MAIN,0)<iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_SIGNAL,0))) //here is your close buy rule { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red); } if(TrailingStop>0) { if(Bid-OrderOpenPrice()>MyPoint*TrailingStop) { if(OrderStopLoss()<Bid-MyPoint*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green); return(0); } } } } else { if((iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_MAIN,0)>iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_SIGNAL,0))) // here is your close sell rule { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red); } if(TrailingStop>0) { if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop)) { if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyPoint*TrailingStop,OrderTakeProfit(),0,Red); return(0); } } } } } } return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int TotalOrdersCount() { int result=0; for(int i=0;i<OrdersTotal();i++) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderMagicNumber()==MagicNumber) result++; } return (result); } //+------------------------------------------------------------------+
Added a time filter one trade per bar for example.
//+------------------------------------------------------------------+ #property copyright " " #property link " " #property description "Stochastic EA" #property version "1.0" #property strict extern int MagicNumber=10001; extern double Lots=0.1; extern double StopLoss=50; extern double TakeProfit=100; extern int TrailingStop=30; extern int Slippage=3; bool trade=0; //+------------------------------------------------------------------+ // expert start function //+------------------------------------------------------------------+ int start() { double MyPoint=Point; if(Digits==3 || Digits==5) MyPoint=Point*10; double TheStopLoss=0; double TheTakeProfit=0; if(TotalOrdersCount()==0) { int result=0; if((iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_MAIN,0)>iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_SIGNAL,0))) // Here is your open buy rule { if(trade==0) { trade=1; result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"Stoch EA",MagicNumber,0,Blue); if(result>0) { TheStopLoss=0; TheTakeProfit=0; if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint; if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint; OrderSelect(result,SELECT_BY_TICKET); OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green); } return(0); } } if((iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_MAIN,0)<iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_SIGNAL,0))) // Here is your open Sell rule { if(trade==1) { trade=0; result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"Stoch EA",MagicNumber,0,Red); if(result>0) { TheStopLoss=0; TheTakeProfit=0; if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint; if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint; OrderSelect(result,SELECT_BY_TICKET); OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green); } return(0); } } } for(int cnt=0;cnt<OrdersTotal();cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if(OrderType()<=OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber ) { if(OrderType()==OP_BUY) { if((iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_MAIN,0)<iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_SIGNAL,0))) //here is your close buy rule { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red); } if(TrailingStop>0) { if(Bid-OrderOpenPrice()>MyPoint*TrailingStop) { if(OrderStopLoss()<Bid-MyPoint*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green); return(0); } } } } else { if((iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_MAIN,0)>iStochastic(NULL,0,34,55,3,MODE_EMA,1,MODE_SIGNAL,0))) // here is your close sell rule { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red); } if(TrailingStop>0) { if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop)) { if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyPoint*TrailingStop,OrderTakeProfit(),0,Red); return(0); } } } } } } return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int TotalOrdersCount() { int result=0; for(int i=0;i<OrdersTotal();i++) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderMagicNumber()==MagicNumber) result++; } return (result); } //+------------------------------------------------------------------+
Or you can add a trade flag like this.
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use