RSI EA cannot open trade , and if opened trade when closing an order will direct open order,

 
i having an few problem which is first i change abit an code then the EA cannot start trading anymore , the journal is running the chart only , second issue is if opened an buy/sell order,then closed order will direct open another order, my code to trigger open trade which is refer RSI indicator value, Thanks if someone knowing i meet what issue.

//+------------------------------------------------------------------+
//|                                                     CustomEA.mq4 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+

input bool   openbuy=TRUE;
input bool   opensell=TRUE;
input bool   closebysignal=TRUE;
input double stoploss=350;
input double takeprofit=300;
input double trailingstop=0;
input int    rsiperiod=5;
input double buylevel=30;
input double selllevel=80;
input double overboughtlevel=90;
input double oversoldlevel=10;
input double rsitakeprofitlevel=50;
input double lotsize=1.00;
input double risk=0;
input double manuallots=1;
input int    magicnumber=123456;
input string commentbuy="EA Operation Buy";
input string commentsell="EA Operation Sell";
input string comment="RSI EA";
input int    slippage=10;
bool isabove85 = FALSE;
bool isbelow15 = FALSE;

int orderbuy,ordersell;
int ticket;
int lotdigits;
double trail,itrailingstop;


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }




//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   Comment(" Orders: ", OrdersTotal(),"    ", " Bid: ", Bid, "    ", "Balance: ", AccountBalance(), "    "," Equity: ", AccountEquity(), "    "," Price: ",Ask);

  // Print("running");
//if(OrdersTotal()==1)
// {
//isbelow15 =False;
//isabove85 =False;
//}

   double stoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
   orderbuy=0;
   ordersell=0;


   for(int cnt=0; cnt<OrdersTotal(); cnt++)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==magicnumber && OrderComment()==comment)
           {
            if(OrderType()==OP_BUY)
              {
               orderbuy++;
              }
            if(OrderType()==OP_SELL)
              {
               ordersell++;
              }
            if(trailingstop>0)
              {
               itrailingstop=trailingstop;
               if(trailingstop<stoplevel)
                  itrailingstop=stoplevel;
               trail=itrailingstop*Point;
               double tsbuy=NormalizeDouble(Bid-trail,Digits);
               double tssell=NormalizeDouble(Ask+trail,Digits);
               if(OrderType()==OP_BUY && Bid-OrderOpenPrice()>trail && Bid-OrderStopLoss()>trail)
                 {
                  ticket=OrderModify(OrderTicket(),OrderOpenPrice(),tsbuy,OrderTakeProfit(),0,Blue);
                 }
               if(OrderType()==OP_SELL && OrderOpenPrice()-Ask>trail && (OrderStopLoss()-Ask>trail || OrderStopLoss()==0))
                 {
                  ticket=OrderModify(OrderTicket(),OrderOpenPrice(),tssell,OrderTakeProfit(),0,Blue);
                 }
              }
           }
        }

     }

//define rsi value
   double rsivalue=iRSI(Symbol(),0,rsiperiod,PRICE_CLOSE,0);
//closeorderbyrsi(rsivalue);

//check if rsi level go above 85
   if(rsivalue>=overboughtlevel)
     {
      isabove85=TRUE;
     }
   else
     {
      isabove85=FALSE;
     }

   if(rsivalue<=oversoldlevel)
     {
      isbelow15=TRUE;
     }
   else
     {
      isbelow15=FALSE;
     }
//+------------------------------------------------------------------+
//| OPEN POSITION                                          |
//+------------------------------------------------------------------+

   if(opensell && ordersell<1 && rsivalue < selllevel && isabove85)
     {
      opsell();
      isabove85=FALSE;
      //Print("flag above85 has been reset to false sohai");
     }



   if(openbuy && orderbuy < 1 && rsivalue>buylevel && isbelow15)

     {
      opbuy();
      isbelow15=FALSE;
      //Print("flag isbelow15 has been reset to false sohai");
     }




//   if(opensell && ordersell<1 && rsivalue<selllevel)
//     {
//      if(isabove85)
//        {
//         opsell();
//        }
//      else
//        {
//         Print("Sohai this isabove85 = false");
//        }
//      isabove85=false;
//      Print("flag above85 has been reset to false sohai");
//     }
//
//      if(openbuy && orderbuy < 1 && rsivalue>buylevel)
//
//        {
//         if(isbelow15)
//           {
//            opbuy();
//           }
//         else
//           {
//            Print("Sohai this isbelow15 = false");
//           }
//         isbelow15=false;
//         Print("flag isbelow15 has been reset to false sohai");
//        }







  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//|                         OPERATION BUY                                |
//+------------------------------------------------------------------+
void opbuy()
  {
   double stoplosslevel;
   double takeprofitlevel;
   if(stoploss>0)
     {
      stoplosslevel=Ask-stoploss*Point;
     }
   else
     {
      stoplosslevel=0.0;
     }
   if(takeprofit>0)
     {
      takeprofitlevel=Ask+takeprofit*Point;
     }
   else
     {
      takeprofitlevel=0.0;
     }
   ticket=OrderSend(Symbol(),OP_BUY,lotsize,Ask,slippage,stoplosslevel,takeprofitlevel,commentbuy,magicnumber,0,clrBlue);
  }

//+------------------------------------------------------------------+
//|                          OPERATION SELL                                                        |
//+------------------------------------------------------------------+
void opsell()
  {
   double stoplosslevel;
   double takeprofitlevel;
   if(stoploss>0)
     {
      stoplosslevel=Bid+stoploss*Point;
     }
   else
     {
      stoplosslevel=0.0;
     }
   if(takeprofit>0)
     {
      takeprofitlevel=Bid-takeprofit*Point;
     }
   else
     {
      takeprofitlevel=0.0;
     }
   ticket=OrderSend(Symbol(),OP_SELL,lotsize,Bid,slippage,stoplosslevel,takeprofitlevel,commentsell,magicnumber,0,DeepPink);
  }




//+------------------------------------------------------------------+
//|                       OPERATION CLOSED SELL                                             |
//+------------------------------------------------------------------+
void closesell()
  {
   int total=OrdersTotal();
   for(int xs =total-1; xs>=0; xs--)
     {
      if(OrderSelect(xs,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol()&&OrderType()>=OP_SELL&& OrderMagicNumber()==magicnumber)
           {
            ticket=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,clrGold);
           }
        }


      isabove85=False;
      isbelow15=False;
     }
  }




//+------------------------------------------------------------------+
//|                        OPERATION CLOSED BUY                                            |
//+------------------------------------------------------------------+
void closebuy()
  {
   int total=OrdersTotal();
   for(int xb =total-1; xb>=0; xb--)
     {
      if(OrderSelect(xb,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol()&&OrderType()>=OP_SELL&& OrderMagicNumber()==magicnumber)
           {
            ticket=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,clrGold);
           }
        }

      isabove85=False;
      isbelow15=False;
     }
  }


//+------------------------------------------------------------------+
//| CLOSE POSITION BY RSI Trigger                                         |
//+------------------------------------------------------------------+
void closeorderbyrsi(double rsiValue)
  {
   int total = OrdersTotal();
   for(int cor=total-1; cor>=0; cor--)
     {
      if(OrderSelect(cor,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==magicnumber)
           {
            if(OrderType()==OP_BUY && rsiValue<=rsitakeprofitlevel)
              {
               ticket=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,clrGoldenrod);
              }
            if(OrderType()==OP_SELL && rsiValue>=rsitakeprofitlevel)
              {
               ticket=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,clrGoldenrod);
              }
           }
        }

     }

  }
//+------------------------------------------------------------------+
 
  1. Don't double post! You already had this thread open.
              General rules and best pratices of the Forum. - General - MQL5 programming forum #6 (2017)

  2.    ticket=OrderSend(Symbol(),OP_SELL,lotsize,Bid,slippage,stoplosslevel,takeprofitlevel,commentsell,magicnumber,0,DeepPink);
    

    Why did you post your MT4 question in the MT5 EA section instead of the MQL4 section, (bottom of the Root page)?
              General rules and best pratices of the Forum. - General - MQL5 programming forum? (2017)
    Next time, post in the correct place. The moderators will likely move this thread there soon.

  3. Your code
       if(rsivalue>=overboughtlevel)
         {
          isabove85=TRUE;
         }
       else
         {
          isabove85=FALSE;
         }
    Simplified.
       isabove85=rsivalue>=overboughtlevel;
    
  4.       takeprofitlevel=Ask+takeprofit*Point;

    You buy at the Ask and sell at the Bid. Pending Buy Stop orders become market orders when hit by the Ask.

    1. Your buy order's TP/SL (or Sell Stop's/Sell Limit's entry) are triggered when the Bid / OrderClosePrice reaches it. Using Ask±n, makes your SL shorter and your TP longer, by the spread. Don't you want the specified amount used in either direction?

    2. Your sell order's TP/SL (or Buy Stop's/Buy Limit's entry) will be triggered when the Ask / OrderClosePrice reaches it. To trigger close at a specific Bid price, add the average spread.
                MODE_SPREAD (Paul) - MQL4 programming forum - Page 3 #25

    3. The charts show Bid prices only. Turn on the Ask line to see how big the spread is (Tools → Options (control+O) → charts → Show ask line.)

      Most brokers with variable spreads widen considerably at end of day (5 PM ET) ± 30 minutes.
      My GBPJPY shows average spread = 26 points, average maximum spread = 134.
      My EURCHF shows average spread = 18 points, average maximum spread = 106.
      (your broker will be similar).
                Is it reasonable to have such a huge spreads (20 PIP spreads) in EURCHF? - General - MQL5 programming forum (2022)

  5. cacabo1234:
    i having an few problem which is first i change abit an code then the EA cannot start trading anymore , the journal is running the chart only , second issue is if opened an buy/sell order,then closed order will direct open another order, my code to trigger open trade which is refer RSI indicator value, Thanks if someone knowing i meet what issue.

    Your post is almost unintelligible. If you are using mechanical translation, you must use simple language structure.

  6. You broke it, go to your backups. Or, Use the debugger or print out your variables, including _LastError and prices and find out why. Do you really expect us to debug your code for you?
              Code debugging - Developing programs - MetaEditor Help
              Error Handling and Logging in MQL5 - MQL5 Articles (2015)
              Tracing, Debugging and Structural Analysis of Source Code - MQL5 Articles (2011)
              Introduction to MQL5: How to write simple Expert Advisor and Custom Indicator - MQL5 Articles (2010)

  7. Journals don't run on any chart, they just log messages. Not an issue.

  8. Your code says, if buy count is zero and RSI is above n, open an order. Why does it surprise you that it will open another order?

    You are looking at a signal. Act on a change of signal.
              Too many orders - MQL4 programming forum #1 (2017)

Reason: