EA Does not work in Zero Spread account

 

Hello,


I have an EA that works well in trading accounts with some spread, but it does not function properly in trading accounts where the spread is zero. In a zero spread account, the limit orders automatically close instantly after being opened, and the EA continues to operate indefinitely. Upon reviewing the code, I discovered that there is an "if" condition that is causing the current issue. In a zero spread account, this condition evaluates to true and deletes pending orders. I'm unsure why this "if" condition is important and what its purpose is. If I remove this "if" condition, the EA works fine in both spread and zero spread accounts, but I'm concerned about potential consequences on trading performance if I remove it.

Here is the code :

     
BuyLimitMagic = 9;
SellLimitMagic = 99;
Range = 21;
   if(Digits == 3 || Digits == 5)
      Pips = 10.0 * Point;
   else
      Pips = Point;

 double value1= Orders1() - PendingOrder1() - MarketInfo(Symbol(), MODE_SPREAD) * Pips;
      if(value1> 0.0 && value1> Range * Pips)
         DeletePendingOrders(BuyLimitMagic);

      double value2= PendingOrder2() - Order2() - MarketInfo(Symbol(), MODE_SPREAD) * Pips;
      if(value2> 0.0 && value2> Range * Pips)
         DeletePendingOrders(SellLimitMagic);

double Orders1()
  {
   int cmd_0;
   double order_open_price_4;
   for(int pos_12 = 0; pos_12 < OrdersTotal(); pos_12++)
     {
      OrderSelect(pos_12, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() != Symbol() || OrderMagicNumber() != BuyLimitMagic)
         continue;
      cmd_0 = OrderType();
      if(cmd_0 == OP_BUY)
         order_open_price_4 = OrderOpenPrice();
      if(cmd_0 == OP_SELL)
         order_open_price_4 = OrderOpenPrice();
     }
   return (order_open_price_4);
  }

double PendingOrder1()
  {
   int cmd_0;
   double order_open_price_4;
   for(int pos_12 = 0; pos_12 < OrdersTotal(); pos_12++)
     {
      OrderSelect(pos_12, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() != Symbol() || OrderMagicNumber() != BuyLimitMagic)
         continue;
      cmd_0 = OrderType();
      if(cmd_0 == OP_BUYLIMIT)
         order_open_price_4 = OrderOpenPrice();
      if(cmd_0 == OP_SELLLIMIT)
         order_open_price_4 = OrderOpenPrice();
     }
   return (order_open_price_4);
  }

double Order2()
  {
   int cmd_0;
   double order_open_price_4;
   for(int pos_12 = 0; pos_12 < OrdersTotal(); pos_12++)
     {
      OrderSelect(pos_12, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() != Symbol() || OrderMagicNumber() != SellLimitMagic)
         continue;
      cmd_0 = OrderType();
      if(cmd_0 == OP_BUY)
         order_open_price_4 = OrderOpenPrice();
      if(cmd_0 == OP_SELL)
         order_open_price_4 = OrderOpenPrice();
     }
   return (order_open_price_4);
  }

double PendingOrder2()
  {
   int cmd_0;
   double order_open_price_4;
   for(int pos_12 = 0; pos_12 < OrdersTotal(); pos_12++)
     {
      OrderSelect(pos_12, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() != Symbol() || OrderMagicNumber() != SellLimitMagic)
         continue;
      cmd_0 = OrderType();
      if(cmd_0 == OP_BUYLIMIT)
         order_open_price_4 = OrderOpenPrice();
      if(cmd_0 == OP_SELLLIMIT)
         order_open_price_4 = OrderOpenPrice();
     }
   return (order_open_price_4);
  }

void DeletePendingOrders(int deletependingorder_magic)
  {
   for(int pos_0 = OrdersTotal() - 1; pos_0 >= 0; pos_0--)
     {
      OrderSelect(pos_0, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() != Symbol() || OrderMagicNumber() != deletependingorder_magic)
         continue;
      if(OrderType() > OP_SELL)
         OrderDelete(OrderTicket());
     }
  }


Please help me understand this code and what could be the reason behind this condition closing pending orders only in zero spread accounts. Additionally, how can I rewrite this code so that it will work in zero spread accounts the same way as in spread accounts?

Documentation on MQL5: Constants, Enumerations and Structures / Trade Constants / Trade Operation Types
Documentation on MQL5: Constants, Enumerations and Structures / Trade Constants / Trade Operation Types
  • www.mql5.com
Trade Operation Types - Trade Constants - Constants, Enumerations and Structures - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 
any errors?
 
Michael Charles Schefe #:
any errors?

Error :


It closing Pending order instantly which is opened by EA in zero spread account.

 
anuj71 #:

Error :


It closing Pending order instantly which is opened by EA in zero spread account.

Looks like decompiled code. In which case you should delete it before you get a ban
 
Paul Anscombe #:
Looks like decompiled code. In which case you should delete it before you get a ban
This not a de-compiled.
 
anuj71 #:
This not a de-compiled.
Post all the code