if(Bid >= OrderOpenPrice()+(StopLoss*Point))PlaySound("alert.wav"); { OrderClose(OrderTicket(),OrderLots(),Bid,3,Red); } } elseYour IF is being executed (sound plays) but the orderClose isn't inside the if. Change to
if(Bid >= OrderOpenPrice()+(StopLoss*Point)) { PlaySound("alert.wav"); if (!OrderClose(OrderTicket(), OrderLots(), Bid, 3, Red)) { Alert( "EA OrderClose(ticket=", ticket, ", ...) failed: ", GetLastError() ); } } else...
Ok I tried your code sunday. I think the bug is not "sound alert", because I dont use in my original code. I put sound alert only to know if the condition are meet.
I don't know why, all functions are written with the same structure, but I have a problem only with OrderClose.
What is the difference between this next 2 codes?
Function with OrderClose: don't work
//==== Function StopLoss void MaxStopLoss() { for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { if(OrderType() == OP_SELL && OrderSymbol() == Symbol()) { //---- Max Stop Loss OP_SELL if(Bid >= OrderOpenPrice()+(StopLoss*Point)) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Red); } } else if(OrderType() == OP_BUY && OrderSymbol() == Symbol()) { //---- Max Stop Loss OP_BUY if(Ask <= OrderOpenPrice()-(StopLoss * Point)) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Red); } } } } } //---- End Function
Function with OrderModify: this one work
//==== Function Move to Breakeven void MoveToBE() { for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { if(OrderType() == OP_SELL && OrderSymbol() == Symbol()) { //---- Modify when hit First Target OP_SELL if((Bid <= OrderOpenPrice()-(FirstTarget*Point)) && (OrderStopLoss() != OrderOpenPrice() - (FirstStop*Point))) { OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() - (FirstStop*Point),0, 0, Blue); } } else if(OrderType() == OP_BUY && OrderSymbol() == Symbol()) { //---- Modify when hit First Target if((Ask >= OrderOpenPrice()+(FirstTarget*Point)) && (OrderStopLoss() != OrderOpenPrice()+(FirstStop*Point))) { OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice()+(FirstStop*Point),0,0, Blue); } } } } } //---- End Function
Thank's
OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);Change to:
if (!OrderClose(OrderTicket(), OrderLots(), Bid, 3, red)) Alert( "OrderClose(ticket=", OrderTicket(), ", ...) failed: ", GetLastError() );
So you find out why. Do you have any sleeps or modifies before the close, then you must refresh or Bid won't be valid.
Also 3 won't be valid on a 5 digit broker
Ok, if I understand, this code refresh the bid value.
if(!)
Must I use it for "OrderModify"?
Thank's
Thank's so much WHRoeder, with your code I've got error 129(Invalid Price).
I've chage this:
if (!OrderClose(OrderTicket(), OrderLots(), Bid, 3, red)) Alert( "OrderClose(ticket=", OrderTicket(), ", ...) failed: ", GetLastError() );
To:
if (!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 3, red)) Alert( "OrderClose(ticket=", OrderTicket(), ", ...) failed: ", GetLastError() );
Bid and Ask don't work with my broker. I don't know if this code work with 5 digits broker, but now it's work for me.
Thank's again!
pgforex
if(!)
Must I use it for "OrderModify"?
if(!orderClose(...)) Alert(...)
This issues an alert when orderClose/orderModify fails (returns false)
- 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, I don't know why but I have a bug with OrderClose() in the next function.
I know the condition are meet because sound alert work, but order still open.
Need help!
Thank's
pgforex