NotUnctuous:
I have corrected all the warnings except this one below. Usually the void function doesn't require a return operator,
so
how do I add the if statement and extra pair of { } to the order close
as the return value needs to be checked according to the meta editor. (post 600 build)
Any clues gratefully accepted:)
Regards
Patrick
void closeAllFastEMATrades(string reason) { for(int cnt=OrdersTotal()-1; cnt>=0; cnt--) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==magicNumber) { Print(reason+" Closing ",OrderType()==OP_BUY ? "BUY" : "SELL"," @ "+OrderProfit()+":ask="+Ask+":bid="+Bid); bool result=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,Blue); } } }
You code says "if it's a buy order try to close it. If the close fails and it is a sell order try to close it." Obviously not what you want. | if(OrderType()==OP_BUY) { Print(reason+" Closing BUY @ "+OrderProfit()+":ask="+Ask+":bid="+Bid); if(OrderClose(OrderTicket(),OrderLots(),Bid,3,Blue)) { } else if(OrderType()==OP_SELL) { Print(reason+" Closing SELL @ "+OrderProfit()+":ask="+Ask+":bid="+Bid); HERE----------->OrderClose(OrderTicket(),OrderLots(),Ask,3,Blue); } } |
If it's a buy order try to close it (or issue an error message,) otherwise close the sell (or issue.) | if(OrderType()==OP_BUY) { Print(reason+" Closing BUY @ "+OrderProfit()+":ask="+Ask+":bid="+Bid); if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Blue)) { Print("buy close failed "...); } } // buy // else if(OrderType()==OP_SELL) Unnecessary test unless you open else // pending orders. Must be a sell { Print(reason+" Closing SELL @ "+OrderProfit()+":ask="+Ask+":bid="+Bid); if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Blue)) { Print("sell close failed "...); } } |
NotUnctuous:
I have corrected all the warnings except this one below. Usually the void function doesn't require a return operator,
so
how do I add the if statement and extra pair of { } to the order close
as the return value needs to be checked according to the meta editor. (post 600 build)
Any clues gratefully accepted:)
Regards
Patrick
Hi NotUnctuous,
Getting warnings or errors about not all paths returning a value isn't about the return operator especially in a void function but more to do with sections of code possible unclear.
Try this and see if you get any warnings or errors:
//+------------------------------------------------------------------+ void closeAllFastEMATrades(string reason) { for(int cnt=0;cnt<OrdersTotal()-1;cnt++) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false) Print("Failed to select orders, error : "+GetLastError());//check for order select fail //if(OrderSymbol()!=Symbol || OrderMagicNumber()!=magicNumber)continue; if(OrderMagicNumber()!=magicNumber)continue; if(OrderType()==OP_BUY) { if(OrderClose(OrderTicket(),OrderLots(),Bid,3,Blue)==false) Print("Failed to close order , error : "+IntegerToString(GetLastError(),0,0));//check for order close else Print(reason+" Closing BUY @ "+DoubleToString(OrderTakeProfit(),Digits)+ " :ask = "+DoubleToString(Ask,Digits)+" :bid = "+DoubleToString(Bid,Digits)); } if(OrderType()==OP_SELL) { if(OrderClose(OrderTicket(),OrderLots(),Bid,3,Blue)==false) Print("Failed to close order , error : "+IntegerToString(GetLastError(),0,0));//check for order close else Print(reason+" Closing BUY @ "+DoubleToString(OrderTakeProfit(),Digits)+ " :ask = "+DoubleToString(Ask,Digits)+" :bid = "+DoubleToString(Bid,Digits)); } } } //+------------------------------------------------------------------+
Make sure when you print a double you convert it to string, integers not converted to string will also give a warning.
Also, Print before closing an order will delay the execution of the order so send order first then print parameters if you want to.
Hope it helps.
Thank you angevoyageur, WHRoeder and thrdel for your help.
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
Any clues gratefully accepted:)
Regards
Patrick