int BuyTicketOrder = OrderSend(Symbol(),OP_BUYSTOP,LotSize,Buy_Price,3,Buy_Price-(StopLoss*pips),Buy_Price+(TakeProfit*pips),NULL,MagicNumber,0,Green); int BuyTicketOrder_TP = OrderSend(Symbol(),OP_BUYSTOP,0.02,Buy_Price,3,Buy_Price-(TP_SL*pips),Buy_Price+(TP_pips*pips),NULL,MagicNumber_TP,0,Green); if(OpenOrdersThisPair(Symbol())>=1) { for(int b=OrdersTotal()-1; b >= 0; b--) { if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES)) if(OrderMagicNumber()== MagicNumber||MagicNumber_TP) if(OrderSymbol()==Symbol()) if(OrderType()==OP_BUYSTOP) { DeleteOrder(); Print("GBPUSD BUYSTOP DELETED"); } } }
Sorry about that - hope that's better? Yes the for loop is supposed to be like that, what is the logic problem? Thx
- You should have edited your original post.
if(OrderMagicNumber()== MagicNumber||MagicNumber_TP) if( false || 2 ) if( false || true ) if( false ) // MagicNumber_TP not selected.
Bool and int are interchangeable. (8 < 7 < 6 is true)for(int b=OrdersTotal()-1; b >= 0; b--) if(OrderSelect(b,SELECT_BY_POS) && (OrderMagicNumber()== MagicNumber||OrderMagicNumber()==MagicNumber_TP) && OrderSymbol()==Symbol() && OrderType()==OP_BUYSTOP ){ DeleteOrder(); Print("GBPUSD BUYSTOP DELETED"); }
Harami57: still only deletes one trade, the MagicNumber one....
| Posted code doesn't delete any trades. Post your code. |
WHRoeder:
if(OrderMagicNumber()== MagicNumber||MagicNumber_TP) if( false || 2 ) if( false || true ) if( false ) // MagicNumber_TP not selected.
Doesn't
if(false || true) equate to true?
I would think that
if(OrderMagicNumber()== MagicNumber||MagicNumber_TP)
would always be true unless MagicNumber_TP equals 0
GumRai - yes you're right, thank you. I forgot the DeleteOrder() function was user-defined, not part of the MQL4 library.
Here is the DeleteOrder() function. How can I modify to get rid of both BuyStops?
void DeleteOrder(){ for(int i=OrdersTotal()-1; i>=0; i--) { if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if(OrderMagicNumber()== MagicNumber && OrderSymbol()==Symbol()&& OrderType()>OP_SELL) if(!OrderDelete(OrderTicket(),CLR_NONE))//if Order Close unsuccessful Print("Order Close failed, order number:", OrderTicket(), "Error: ", GetLastError()); } }
GumRai - yes you're right, thank you. I forgot the DeleteOrder() function was user-defined, not part of the MQL4 library.
Here is the DeleteOrder() function. How can I modify to get rid of both BuyStops?
First of all, you do as WHRoeder pointed out
(OrderMagicNumber()== MagicNumber||OrderMagicNumber()==MagicNumber_TP)
Then
DeleteOrder(); //Change this to DeleteOrder(OrderTicket()); //And then in your function void DeleteOrder(int ticket) { if(OrderSelect(ticket,SELECT_BY_TICKET)) if(!OrderDelete(OrderTicket(),CLR_NONE))//if Order Close unsuccessful Print("Order Delete failed, order number:",ticket,"Error: ",GetLastError()); }
Not compiled or tested
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hello All,
With these two order open orders:
int BuyTicketOrder = OrderSend(Symbol(),OP_BUYSTOP,LotSize,Buy_Price,3,Buy_Price-(StopLoss*pips),Buy_Price+(TakeProfit*pips),NULL,MagicNumber,0,Green);
int BuyTicketOrder_TP = OrderSend(Symbol(),OP_BUYSTOP,0.02,Buy_Price,3,Buy_Price-(TP_SL*pips),Buy_Price+(TP_pips*pips),NULL,MagicNumber_TP,0,Green);
When this code is executed, only the first order "BuyTicketOrder" is deleted, not "BuyTicketOrder_TP"
if(OpenOrdersThisPair(Symbol())>=1)
{
for(int b=OrdersTotal()-1; b >= 0; b--)
{
if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()== MagicNumber||MagicNumber_TP)
if(OrderSymbol()==Symbol())
if(OrderType()==OP_BUYSTOP)
{
DeleteOrder();
Print("GBPUSD BUYSTOP DELETED");
}
}
}
Any Ideas? Thx