1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Welcome back! Thank you for being a part of this Traders Community. Let's discuss and share :)
    Selamat datang kembali! Trimakasih telah menjadi bagian dari Komunitas Trader ini. Mari berdiskusi dan berbagi :)
    Dismiss Notice

help with this EA code please!

Discussion in 'Belajar MQL dari Nol' started by Vzlademd, 05 Apr 2020.

Tags:
  1. Vzlademd

    Vzlademd New Member

    Equity
    Credit
    Ref Point
    Hello, I have a crossover ea of 2 EMAs, but what I need is that when the 4 period ema crosses the 100 ema the command 50pips will open after having crossed, currently the robot that I have opens it immediately, I made some modifications using a double variable called Preciobuy and another PrecioSell that saves the price so that when the bid is above that value, it will mount the operation but it doesn't work for me, I don't know what to do .. please help.

    I will leave my code so that you can see it and you can help me:

    //-----------------------------------------------------------------------------´´
    extern int MagicNumber=10001;
    extern double Lots =0.10;
    extern double StopLoss=0;
    extern double TakeProfit=50;
    extern int TrailingStop=0;
    extern int Slippage=3;
    double Preciobuy=iMA(NULL,0,100,0,MODE_EMA,PRICE_CLOSE,0);
    double Preciosell=iMA(NULL,0,100,0,MODE_EMA,PRICE_CLOSE,0);
    double preciobuy2=Preciobuy+50;
    double preciosell2=Preciosell-50;
    //+------------------------------------------------------------------+
    // 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((iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0)>iMA(NULL,0,100,0,MODE_EMA,PRICE_CLOSE,0))&&(iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0)>preciobuy2)) // Here is your open buy rule
    {
    result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"EA Generator",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((iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0)<iMA(NULL,0,100,0,MODE_EMA,PRICE_CLOSE,0))&&(iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0)<preciosell2)) // Here is your open Sell rule
    {
    result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"EA Generator",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((iMA(NULL,0,4,0,MODE_EMA,PRICE_CLOSE,0)<iMA(NULL,0,100,0,MODE_EMA,PRICE_CLOSE,0))&&(iMA(NULL,0,4,0,MODE_EMA,PRICE_CLOSE,0)<preciosell2)) //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((iMA(NULL,0,4,0,MODE_EMA,PRICE_CLOSE,0)>iMA(NULL,0,100,0,MODE_EMA,PRICE_CLOSE,0))&&(iMA(NULL,0,4,0,MODE_EMA,PRICE_CLOSE,0)>preciobuy2)) // 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);
     
    Last edited: 05 Apr 2020
  2. stadevata

    stadevata Active Member Credit Hunter

    Equity
    Credit
    Ref Point
    • First ... let take a look sample code on ur open buy rule :

      --> iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0)>iMA(NULL,0,100,0,MODE_EMA,PRICE_CLOSE,0)
      above code mean EMA4 > EMA100 not EMA4 crossing EMA100


    • Second.. U need EMA4 and EMA100 at previous candle to determine its cross or not :

      EMAbuyCrossValue -->
      iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0)>iMA(NULL,0,100,0,MODE_EMA,PRICE_CLOSE,0) && iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,1)<=iMA(NULL,0,100,0,MODE_EMA,PRICE_CLOSE,1)

      EMAsellCrossValue -->
      iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0)<iMA(NULL,0,100,0,MODE_EMA,PRICE_CLOSE,0) && iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,1)>=iMA(NULL,0,100,0,MODE_EMA,PRICE_CLOSE,1)


    • Second.. U dont need preciobuy and preciosell after get EMA Buy cross value

      trigger buy logic --> if (Ask > EMAbuyCrossValue+50) then BUY

      trigger sell logic --> if (Bid < EMAbuyCrossValue-50) then SELL
     

Share This Page