Need Help in Deleting 1 Pending Order Symbol from many existing symbols

 
Dear All friends
Now I'm creating an EA to run concurrently on multiple symbols. In certain situations, I need to delete just 1 symbol from the many symbols that are currently open. Until now I still fail in using the OrderSelect and Orderdelete commands to delete that  symbol.

I'm very happy if there are friends who can help me in coding. Thank you very much.
 

FxNewbie:

 Until now I still fail in using the OrderSelect and Orderdelete commands to delete that  symbol.

Are you using MT4?

Show your code that you are trying to use.

 

I assume you use mq4 code – so this simple code should do the trick. I recommend using loop starting from the OrdersTotal and counting down (this way when some trades are closed, we won’t miss the other trades in the queue):

string symbol = “EURUSD”;
for(int i=OrdersTotal()-1; i>=0; i--) {

      if(OrderSelect(i,SELECT_BY_POS))   {

            if(OrderSymbol()==symbol)

              if(OrderType()>1){
                               //delete pending trades

                               bool res = OrderDelete(OrderTicket());

                }

                else {
                               //here you can add a function to close market trades (use proper prices to close)

if(OrderType()==OP_BUY){
                             bool res = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(), MODE_BID),Digits),100);            

}

else if(OrderType()==OP_SELL){
                             bool res = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(), MODE_ASK),Digits),100);        

}

        }

    }

} 
 
Keith Watford #:

Are you using MT4?

Show your code that you are trying to use.

As you have not responded, I will assume that you are using MQL4 and will move this topic to the MQL4 section.

 
Marzena Maria Szmit #:
if(OrderType()==OP_BUY){
  bool res = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(), MODE_BID),Digits),100);            
}
else if(OrderType()==OP_SELL){
  bool res = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(), MODE_ASK),Digits),100);        
}
  1. MT4: You can use OrderClosePrice() instead of Bid/Ask and be direction independent — no need to check order type to get the close price.
    MT5: you can use PositionGetDouble(POSITION_PRICE_CURRENT)

    Simplified:

     bool res = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),100);            
    
  2. You used NormalizeDouble, It's use is usually wrong, as it is in your case.

    1. Floating point has a infinite number of decimals, it's your not understanding floating point and that some numbers can't be represented exactly. (like 1/10.)
                Double-precision floating-point format - Wikipedia, the free encyclopedia

      See also The == operand. - MQL4 programming forum (2013)

    2. Print out your values to the precision you want with DoubleToString - Conversion Functions - MQL4 Reference.

    3. SL/TP (stops) need to be normalized to tick size (not Point) — code fails on non-currencies.
                On 5Digit Broker Stops are only allowed to be placed on full pip values. How to find out in mql? - MQL4 programming forum (2011)

      And abide by the limits Requirements and Limitations in Making Trades - Appendixes - MQL4 Tutorial and that requires understanding floating point equality Can price != price ? - MQL4 programming forum (2012)

    4. Open price for pending orders need to be adjusted. On Currencies, Point == TickSize, so you will get the same answer, but it won't work on non-currencies. So do it right.
                Trailing Bar Entry EA - MQL4 programming forum (2013)
                Bid/Ask: (No Need) to use NormalizeDouble in OrderSend - MQL4 programming forum (2012)

    5. Lot size must also be adjusted to a multiple of LotStep and check against min and max. If that is not a power of 1/10 then NormalizeDouble is wrong. Do it right.
                (MT4 2013)) (MT5 2022))

    6. MathRound() and NormalizeDouble() are rounding in a different way. Make it explicit.
                MT4:NormalizeDouble - MQL5 programming forum (2017)
                How to Normalize - Expert Advisors and Automated Trading - MQL5 programming forum (2017)

    7. Prices you get from the terminal are already correct (normalized).

    8. PIP, Point, or Tick are all different in general.
                What is a TICK? - MQL4 programming forum (2014)

Reason: