How too use this EA?
Hi!
You had same errors in the code in the OrderModify areas.
Here is the correct code, enjoy!
#property version "1.20" #property strict int RiskBoost=3; int magicalNumber = 2427892; extern int StopL = 750; //StopLoss(in pips) extern int TakeProfit = 1750; //TakeProfit int slippage = 3; extern double Lots = 0.20; // Lot size extern int Trailing =95; //Trailing stop (in pips) extern double percent = 0.02; //percent riked by trade extern bool AutoLots=True; int depotinit=500; bool saving=false; int MovingPeriod = 200; extern int x1=0; extern int x2=150; extern int x3=500; extern int ADXP=14; extern int ADXS=20; int filtre=5; int ticket = 0; double iDoji=8.5; bool res=false; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ int start() { double ADX=iADX(Symbol(),0,ADXP,PRICE_HIGH,MODE_MAIN,0); double STOCHM_1 = iStochastic(Symbol(),0,8,3,3,MODE_SMMA,0, MODE_MAIN, 1); double STOCHS_1 = iStochastic(Symbol(),0,8,3,3,MODE_SMMA,0, MODE_SIGNAL, 1); double MA =iMA(Symbol(),0,MovingPeriod,0,MODE_EMA,PRICE_CLOSE,0); AutoLot(); double close=Close[1]; if((IsEveningStar()==0) && (IsDojiCandle()==0) && (IsBearishEngulfing()==0)) { filtre=1; } if((IsMorningStar()==0) && (IsDojiCandle()==0) && (IsBullishEngulfing()==0)) { filtre=0; } if(ADX>ADXS && isPositionOpen()==False && Close[1]<Open[1] && Algo()>0 && filtre==1 ) { OpenBuy(); } if(ADX>ADXS && isPositionOpen()==False && Close[1]>Open[1] && Algo()<0 && filtre==0 ) { OpenSell(); } if(ADX<ADXS && isPositionOpen()==False && Close[1]<Open[1] && STOCHM_1 > STOCHS_1 && filtre==1) { OpenBuy(); } if(ADX<ADXS && isPositionOpen()==False && Close[1]>Open[1] && STOCHM_1 < STOCHS_1 && filtre==0) { OpenSell(); } if((ADX>ADXS && Algo()<0) ) { CloseBuy(); } if((ADX>ADXS && Algo()>0)) { CloseSell(); } if((ADX<ADXS && STOCHM_1 < STOCHS_1)) { CloseBuy(); } if((ADX<ADXS && STOCHM_1 > STOCHS_1)) { CloseSell(); } Trail(); return(0); } //+------------------------------------------------------------------+ void CloseSell() { int total=OrdersTotal(); for(int y=OrdersTotal()-1; y>=0; y--) { if(OrderSelect(y,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderMagicNumber()==magicalNumber) { ticket=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,Black); } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CloseBuy() { int total=OrdersTotal(); for(int y=OrdersTotal()-1; y>=0; y--) { if(OrderSelect(y,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==magicalNumber) { ticket=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,Black); } } } //*************************************************************************** void OpenBuy() { double EMA_D5_1 = iMA(Symbol(),PERIOD_D1,5,0,MODE_EMA,PRICE_CLOSE,1); double EMA_D5_0 = iMA(Symbol(),PERIOD_D1,5,0,MODE_EMA,PRICE_CLOSE,0); double EMA_D20_0 = iMA(Symbol(),PERIOD_D1,20,0,MODE_EMA,PRICE_CLOSE,0); double EMA_D130_0 = iMA(Symbol(),PERIOD_MN1,6,0,MODE_EMA,PRICE_CLOSE,0); double BuyLots=Lots; double SellLots=Lots; if ((EMA_D5_0 > EMA_D20_0) && (EMA_D5_0 > EMA_D5_1) && (EMA_D20_0 > EMA_D130_0)) { BuyLots=Lots; SellLots=Lots; } if ((EMA_D5_0 < EMA_D20_0) && (EMA_D5_0 < EMA_D5_1) && (EMA_D20_0 < EMA_D130_0)) { BuyLots=Lots; SellLots=Lots; } ticket=OrderSend(Symbol(),OP_BUY,BuyLots,Ask,slippage,Ask-StopL*Point,Ask+TakeProfit*Point,"BUY",magicalNumber,0,Green); if (ticket>=0) { if(OrderSelect(ticket,SELECT_BY_TICKET)) { if (OrderType()==OP_BUY ) { res=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-StopL*Point,Bid+TakeProfit*Point,0,clrNONE); } if (OrderType()==OP_SELL) { res=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+StopL*Point,Ask-TakeProfit*Point,0,clrNONE); } if(!res) Print("Error in OrderModify. Error code=",GetLastError()); else Print("Order modified successfully."); } } } //******************************************************************************* void OpenSell() { double EMA_D5_1 = iMA(Symbol(),PERIOD_D1,5,0,MODE_EMA,PRICE_CLOSE,1); double EMA_D5_0 = iMA(Symbol(),PERIOD_D1,5,0,MODE_EMA,PRICE_CLOSE,0); double EMA_D20_0 = iMA(Symbol(),PERIOD_D1,20,0,MODE_EMA,PRICE_CLOSE,0); double EMA_D130_0 = iMA(Symbol(),PERIOD_MN1,6,0,MODE_EMA,PRICE_CLOSE,0); double BuyLots=Lots; double SellLots=Lots; if ((EMA_D5_0 > EMA_D20_0) && (EMA_D5_0 > EMA_D5_1) && (EMA_D20_0 > EMA_D130_0)) { BuyLots=Lots; SellLots=Lots; } if ((EMA_D5_0 < EMA_D20_0) && (EMA_D5_0 < EMA_D5_1) && (EMA_D20_0 < EMA_D130_0)) { BuyLots=Lots; SellLots=Lots; } double ATR=iATR(NULL,0,20,0); ticket = OrderSend(Symbol(),OP_SELL,SellLots,Bid,slippage,Bid+StopL*Point,Bid-TakeProfit*Point,"SELL",magicalNumber,0,Green); if (ticket>=0) { if(OrderSelect(ticket,SELECT_BY_TICKET)) { if (OrderType()==OP_BUY ) { res=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-StopL*Point,Bid+TakeProfit*Point,0,clrNONE); } if (OrderType()==OP_SELL) { res=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+StopL*Point,Ask-TakeProfit*Point,0,clrNONE); } if(!res) Print("Error in OrderModify. Error code=",GetLastError()); else Print("Order modified successfully."); } } } //************************************************************** int Trail() { for(int cnt=0;cnt<OrdersTotal();cnt++) { bool ch = OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(!ch) Print("Error in OrderSelect. Error code=",GetLastError()); else // Print("Order selected successfully."); if( OrderSymbol()==Symbol() && OrderMagicNumber()==magicalNumber) { if(OrderType()==OP_BUY) { if(Trailing>0) { if(Bid-OrderOpenPrice()>Point*Trailing) { if(OrderStopLoss()<Bid-Point*Trailing) { res =OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0,Green); return(0); if(!res) Print("Error in OrderModify. Error code=",GetLastError()); else Print("Order modified Trailing successfully."); } } } } if(OrderType()==OP_SELL) { if(Trailing>0) { if((OrderOpenPrice()-Ask)>(Point*Trailing)) { if((OrderStopLoss()>(Ask+Point*Trailing)) || (OrderStopLoss()==0)) { res =OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*Trailing,OrderTakeProfit(),0,Green); return(0); if(!res) Print("Error in OrderModify. Error code=",GetLastError()); else Print("Order modified Trailing successfully."); } } } } } } return(0); } //-------------------------------------------------------------- void AutoLot() { if(AutoLots == True) { double tickvalue = MarketInfo(Symbol(),MODE_TICKVALUE); Lots=MathRound(((AccountBalance()*percent*tickvalue)/StopL)*100)/100; if(Lots<0.01) {Lots=0.01;} if((AccountBalance()>=1.5*depotinit || AccountBalance()<=0.6*depotinit) && saving==true) { Lots=0.01; } //double tickvalue = MarketInfo(Symbol(),MODE_TICKVALUE*10); } } //////////////////////////////////////////////////////////////////////////// bool isPositionOpen() { for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==magicalNumber && OrderSymbol()==Symbol()) { return true; } } return false; } /////////////////////////// double Algo() { double a1 = iAC(Symbol(),PERIOD_W1 , 0); double a2 = iAC(Symbol(),PERIOD_D1 , 0); double a3 = iAC(Symbol(), PERIOD_H4, 0); return(x1 * a1 + x2 * a2 + x3 * a3); } ////////////////////////////////////////////////// int IsMorningStar() {int retval=0; if( (Body(3) > Body(2)) && // Star body smaller than the previous one (Body(1) > Body(2)) && // Body of star smaller than bodies of first and last candles (Close[3] < Open[3]) && // First is a down candle (Close[1] > Open[1]) && // Third is an up candle (Close[1] > (BodyLo(3) + Body(3)*0.5)) // The third candle closes above the midpoint of the first candle ) retval=1; return (retval); } int IsEveningStar() {int retval=0; if( (Body(3) > Body(2)) && // Star body smaller than the previous one (Body(1) > Body(2)) && // Body of star smaller than bodies of first and last candles (Close[3] > Open[3]) && // First is an up candle (Close[1] < Open[1]) && // Third is a down candle (Close[1] < (BodyHi(3) - Body(3)*0.5)) // The third candle closes below the midpoint of the first candle ) retval=1; return (retval); } int IsBullishEngulfing() {int retval=0; if( (Close[2] < Open[2]) && // First is a down candle (Close[1] > Open[1]) && // Second is an up candle (Body(2) < Body(1)) // First engulfed by second ) retval=1; return (retval); } int IsBearishEngulfing() {int retval=0; if( (Close[2] > Open[2]) && // First is an up candle (Close[1] < Open[1]) && // Second is a down candle (Body(2) < Body(1)) // First engulfed by second ) retval=1; return (retval); } int IsDojiCandle() {int retval=0; if( (Body(1) < ((High[1] - Low[1])/iDoji)) ) retval=1; return (retval); } double Body (int iCandle) { double CandleOpen, CandleClose; CandleOpen=Open[iCandle]; CandleClose=Close[iCandle]; return (MathMax(CandleOpen, CandleClose)-(MathMin(CandleOpen, CandleClose))); } double BodyLo (int iCandle) { return (MathMin(Open[iCandle], Close[iCandle])); } double BodyHi (int iCandle) { return (MathMax(Open[iCandle], Close[iCandle])); }
Hi,
I tried the original EA by vsebastein3, it seems to work fine to me. In testing I didn't get the order modify errors oscarlondero mentions. I also tried oscarlondero proposed order modify changes to the EA, the changes gave me order modify errors. The order modify operation may depend on the build of your MT4, Im running build 1010. Cheers.
I tried the original EA by vsebastein3, it seems to work fine to me. In testing I didn't get the order modify errors oscarlondero mentions. I also tried oscarlondero proposed order modify changes to the EA, the changes gave me order modify errors. The order modify operation may depend on the build of your MT4, Im running build 1010. Cheers.
What does the name mean?
thanks for the EA.
But i wish you could tell us the trading strategy it uses so that we can know where to start from to modify it.
thanks
![MQL5 - Language of trade strategies built-in the MetaTrader 5 client terminal](https://c.mql5.com/i/registerlandings/logo-2.png)
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
Accelerator Bot for USDJPY H4:
This EA uses different indicators: ADX, Stochatisc, Accelerator... This EA is optimized for USDJPY TF H4, but it can work on others if you optimize it.
Author: vsebastien3