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.
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?
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.
MQL4:
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?