EA with OrderModify that modifys all open orders

EA with OrderModify that modifys all open orders

Manage alerts

Loading saved threads...

Mathias Halén · External communityPost link
External question — Stack Overflow Stack Exchange Author: Mathias Halén Original post: https://stackoverflow.com/questions/67749267 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. EDIT: This problem was caused by missing {}. if(OrderComment() == myTradeID) and lots of code under neeth that line should be inside a {} So I'm building an EA that reads from a file on the computer that has a string with information on what type of Order (NewOrder, AdjustOrder, or CancelOrder). void AdjustTradeOrder(string myType,string mySymbole,string myTradeID,int myPosition,double myEntry,double myStopLoss,double myTakeProfit) The problem I'm having is that inside the code below the EA sometimes just changes the right order but sometimes it changes all open orders and that's a big problem. I'm trying to check if the myTradeID is the same as the comment on the selected order ID and only then should it modify the order. But sometimes it modifies all orders. Any idea why? //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ void AdjustTradeOrder(string myType,string mySymbole,string myTradeID,int myPosition,double myEntry,double myStopLoss,double myTakeProfit) { if(commentOnOpenOrders(myTradeID) && !commentOnOpenHistory(myTradeID)) { //--- get minimum stop level double minstoplevel=MarketInfo(mySymbole,MODE_STOPLEVEL); double price=MarketInfo(mySymbole,MODE_ASK); ; double minilot = MarketInfo(mySymbole,MODE_MINLOT); color orderColor; if(myPosition==0) { orderColor = clrGreen; } else { orderColor = clrRed; } //+------------------------------------------------------------------+ int PositionIndex; // <-- this variable is the index used for the loop int TotalNumberOfOrders; // <-- this variable will hold the number of orders currently in the Trade pool TotalNumberOfOrders = OrdersTotal(); // <-- we store the number of Orders in the variable for(PositionIndex = TotalNumberOfOrders - 1; PositionIndex >= 0 ; PositionIndex --) // <-- for loop to loop through all Orders . . COUNT DOWN TO ZERO ! { //Print("----------> AdjustTradeOrder Part 3"); if(! OrderSelect(PositionIndex, SELECT_BY_POS, MODE_TRADES)) continue; // <-- if the OrderSelect fails advance the loop to the next PositionIndex if(OrderComment() == myTradeID) Print(myEntry + " ;" + myTakeProfit + " ;" + myTakeProfit); if(myEntry==0 && myTakeProfit==0 && myStopLoss>0) // MODIFT ONLY SL { Print("-----> ONLY SL"); if(! OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(myStopLoss,Digits),OrderTakeProfit(),0,orderColor)) Print("[ONLY SL] - Order OrderModify failed, order number: ", OrderTicket(), " Error: ", GetLastError()); else Print("[ONLY SL] - OrderSend placed successfully"); deleteFile_AdjustTrade(fileName_Adjusted); } else if(myEntry>0 && myTakeProfit==0 && myStopLoss>0) // MODIFT ENTY & SL { Print("-----> MODIFT ENTY & SL"); if(! OrderModify(OrderTicket(), NormalizeDouble(myEntry,Digits), NormalizeDouble(myStopLoss,Digits),OrderTakeProfit(),0,orderColor)) Print("[MODIFT ENTY & SL] - Order OrderModify failed, order number: ", OrderTicket(), " Error: ", GetLastError()); else Print("[MODIFT ENTY & SL] - OrderSend placed successfully"); deleteFile_AdjustTrade(fileName_Adjusted); } else if(myEntry>0 && myTakeProfit==0 && myStopLoss==0) // MODIFT ONLY ENTY { Print("-----> MODIFT ONLY ENTY"); if(! OrderModify(OrderTicket(), NormalizeDouble(myEntry,Digits), OrderStopLoss(),OrderTakeProfit(),0,orderColor)) Print("[MODIFT ONLY ENTY] - Order OrderModify failed, order number: ", OrderTicket(), " Error: ", GetLastError()); else Print("[MODIFT ONLY ENTY] - OrderSend placed successfully"); deleteFile_AdjustTrade(fileName_Adjusted); } else if(myEntry>0 && myTakeProfit>0 && myStopLoss==0) // MODIFT ENTY & TP { Print("-----> MODIFT ENTY & TP"); if(! OrderModify(OrderTicket(), NormalizeDouble(myEntry,Digits), OrderStopLoss(),NormalizeDouble(myTakeProfit,Digits),0,orderColor)) Print("[MODIFT ENTY & TP] - Order OrderModify failed, order number: ", OrderTicket(), " Error: ", GetLastError()); else Print("[MODIFT ENTY & TP] - OrderSend placed successfully"); deleteFile_AdjustTrade(fileName_Adjusted); } else if(myEntry==0 && myTakeProfit>0 && myStopLoss==0) // MODIFT ONLY TP { Print("-----> ONLY Modify TAKEPROFIT"); if(! OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(),NormalizeDouble(myTakeProfit,Digits),0,orderColor)) Print("[ONLY Modify TAKEPROFIT] - Order OrderModify failed, order number: ", OrderTicket(), " Error: ", GetLastError()); else Print("[ONLY Modify TAKEPROFIT] - OrderSend placed successfully"); deleteFile_AdjustTrade(fileName_Adjusted); } else if(myEntry>0 && myTakeProfit>0 && myStopLoss>0) // MODIFT ALL { Print("-----> MODIFT ALL"); if(! OrderModify(OrderTicket(), NormalizeDouble(myEntry,Digits), NormalizeDouble(myStopLoss,Digits),NormalizeDouble(myTakeProfit,Digits),0,orderColor)) Print("[MODIFT AL] - Order OrderModify failed, order number: ", OrderTicket(), " Error: ", GetLastError()); else Print("[MODIFT AL] - OrderSend placed successfully"); deleteFile_AdjustTrade(fileName_Adjusted); } if(myEntry==0 && myTakeProfit>0 && myStopLoss>0) // MODIFT SL & TP { Print("-----> MODIFT SL & TP"); if(! OrderModify(OrderTicket(),OrderOpenPrice(), NormalizeDouble(myStopLoss,Digits),NormalizeDouble(myTakeProfit,Digits),0,orderColor)) Print("[MODIFT SL & TP] - Order OrderModify failed, order number: ", OrderTicket(), " Error: ", GetLastError()); else Print("[MODIFT SL & TP] - OrderSend placed successfully"); deleteFile_AdjustTrade(fileName_Adjusted); } else { Print("-----> Don't Know What whent wrong."); Print( "myType = "+myType + ";"+ "mySymbole = "+mySymbole + ";"+ "myTradeID = "+myTradeID + ";"+ "myPosition = "+IntegerToString(myPosition) + ";"+ "myEntry = "+DoubleToStr(myEntry) + ";"+ "myStopLoss = "+DoubleToStr(myStopLoss) + ";"+ "myTakeProfit = "+DoubleToStr(myTakeProfit) ); } } //+------------------------------------------------------------------+ } else { //Print("TradeID Already exists = "+myTradeID); } } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+
Quote
Report
PaulB · External communityPost link
External answer — Stack Overflow Stack Exchange Author: PaulB Original post: https://stackoverflow.com/a/67753366 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. You should never use the comment parameter of OrderSend() to store any critical information. It if often overwritten or appended to by your broker and is therefore considered very unreliable. The magic number parameter is specifically used for filtering trades, and this is what you should be using. It is difficult to correct your code without having access to the full EA, but the following should help you along your way. void AdjustTradeOrder(string myType,string mySymbole,int magicNumber,int myPosition,double myEntry,double myStopLoss,double myTakeProfit) { //--- get minimum stop level double minstoplevel=MarketInfo(mySymbole,MODE_STOPLEVEL); double price=MarketInfo(mySymbole,MODE_ASK); ; double minilot = MarketInfo(mySymbole,MODE_MINLOT); color orderColor; if(myPosition==0) orderColor = clrGreen; else orderColor = clrRed; for(int i=OrdersTotal()-1; i>=0; i--) { //Print("----------> AdjustTradeOrder Part 3"); if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; // <-- if the OrderSelect fails advance the loop to the next PositionIndex if(OrderSymbol()!=Symbol()) continue; // Not the correct order symbol if(OrderMagicNumber()!=magicNumber) continue; // Not the correct magic number Print(DoubleToStr(myEntry, Digits) + " ;" + DoubleToStr(myTakeProfit, Digits) + " ;" + DoubleToStr(myTakeProfit, Digits)); if(myEntry==0 && myTakeProfit==0 && myStopLoss>0) { // MODIFT ONLY SL Print("-----> ONLY SL"); if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(myStopLoss,Digits),OrderTakeProfit(),0,orderColor)) Print("[ONLY SL] - Order OrderModify failed, order number: ", OrderTicket(), " Error: ", GetLastError()); else Print("[ONLY SL] - OrderSend placed successfully"); deleteFile_AdjustTrade(fileName_Adjusted); } else if(myEntry>0 && myTakeProfit==0 && myStopLoss>0) { // MODIFT ENTY & SL Print("-----> MODIFT ENTY & SL"); if(!OrderModify(OrderTicket(), NormalizeDouble(myEntry,Digits), NormalizeDouble(myStopLoss,Digits),OrderTakeProfit(),0,orderColor)) Print("[MODIFT ENTY & SL] - Order OrderModify failed, order number: ", OrderTicket(), " Error: ", GetLastError()); else Print("[MODIFT ENTY & SL] - OrderSend placed successfully"); deleteFile_AdjustTrade(fileName_Adjusted); } else if(myEntry>0 && myTakeProfit==0 && myStopLoss==0) { // MODIFT ONLY ENTY Print("-----> MODIFT ONLY ENTY"); if(!OrderModify(OrderTicket(), NormalizeDouble(myEntry,Digits), OrderStopLoss(),OrderTakeProfit(),0,orderColor)) Print("[MODIFT ONLY ENTY] - Order OrderModify failed, order number: ", OrderTicket(), " Error: ", GetLastError()); else Print("[MODIFT ONLY ENTY] - OrderSend placed successfully"); deleteFile_AdjustTrade(fileName_Adjusted); } else if(myEntry>0 && myTakeProfit>0 && myStopLoss==0) { // MODIFT ENTY & TP Print("-----> MODIFT ENTY & TP"); if(!OrderModify(OrderTicket(), NormalizeDouble(myEntry,Digits), OrderStopLoss(),NormalizeDouble(myTakeProfit,Digits),0,orderColor)) Print("[MODIFT ENTY & TP] - Order OrderModify failed, order number: ", OrderTicket(), " Error: ", GetLastError()); else Print("[MODIFT ENTY & TP] - OrderSend placed successfully"); deleteFile_AdjustTrade(fileName_Adjusted); } else if(myEntry==0 && myTakeProfit>0 && myStopLoss==0) { // MODIFT ONLY TP Print("-----> ONLY Modify TAKEPROFIT"); if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(),NormalizeDouble(myTakeProfit,Digits),0,orderColor)) Print("[ONLY Modify TAKEPROFIT] - Order OrderModify failed, order number: ", OrderTicket(), " Error: ", GetLastError()); else Print("[ONLY Modify TAKEPROFIT] - OrderSend placed successfully"); deleteFile_AdjustTrade(fileName_Adjusted); } else if(myEntry>0 && myTakeProfit>0 && myStopLoss>0) { // MODIFT ALL Print("-----> MODIFT ALL"); if(! OrderModify(OrderTicket(), NormalizeDouble(myEntry,Digits), NormalizeDouble(myStopLoss,Digits),NormalizeDouble(myTakeProfit,Digits),0,orderColor)) Print("[MODIFT AL] - Order OrderModify failed, order number: ", OrderTicket(), " Error: ", GetLastError()); else Print("[MODIFT AL] - OrderSend placed successfully"); deleteFile_AdjustTrade(fileName_Adjusted); } if(myEntry==0 && myTakeProfit>0 && myStopLoss>0) { // MODIFT SL & TP Print("-----> MODIFT SL & TP"); if(! OrderModify(OrderTicket(),OrderOpenPrice(), NormalizeDouble(myStopLoss,Digits),NormalizeDouble(myTakeProfit,Digits),0,orderColor)) Print("[MODIFT SL & TP] - Order OrderModify failed, order number: ", OrderTicket(), " Error: ", GetLastError()); else Print("[MODIFT SL & TP] - OrderSend placed successfully"); deleteFile_AdjustTrade(fileName_Adjusted); } else { Print("-----> Don't Know What whent wrong."); Print("myType = "+myType + ";"+ "mySymbole = "+mySymbole + ";"+ "myMagicNo = "+IntegerToString(magicNumber) + ";"+ "myPosition = "+IntegerToString(myPosition) + ";"+ "myEntry = "+DoubleToStr(myEntry) + ";"+ "myStopLoss = "+DoubleToStr(myStopLoss) + ";"+ "myTakeProfit = "+DoubleToStr(myTakeProfit)); } } }
Quote
Report

Post Reply

Quoted from Forex.com.bd-Editorial External answer — Stack Overflow Stack Exchange Author: PaulB Source score (net votes, not local likes): 0 Original post: https://stackoverflow.com/a/67753366 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. You should never use the comment parameter of OrderSend() to store any critical information. It if often overwritten or appended to by your broker and is therefore considered very unreliable. The magic number parameter is specifically used for filtering trades, and this is what you should be using. It is difficult to correct your code without having access to the full EA, but the following should help you along your way. void AdjustTradeOrder(string myType,string mySymbole,int magicNumber,int myPosition,double myEntry,double myStopLoss,double myTakeProfit) { //--- get minimum stop level double minstoplevel=MarketInfo(mySymbole,MODE_STOPLEVEL); double price=MarketInfo(mySymbole,MODE_ASK); ; double minilot = MarketInfo(mySymbole,MODE_MINLOT); color orderColor; if(myPosition==0) orderColor = clrGreen; else orderColor = clrRed; for(int i=OrdersTotal()-1; i>=0; i--) { //Print("----------> AdjustTradeOrder Part 3"); if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; // <-- if the OrderSelect fails advance the loop to the next PositionIndex if(OrderSymbol()!=Symbol()) continue; // Not the correct order symbol if(OrderMagicNumber()!=magicNumber) continue; // Not the correct magic number Print(DoubleToStr(myEntry, Digits) + " ;" + DoubleToStr(myTakeProfit, Digits) + " ;" + DoubleToStr(myTakeProfit, Digits)); if(myEntry==0 && myTakeProfit==0 && myStopLoss>0) { // MODIFT ONLY SL Print("-----> ONLY SL"); if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(myStopLoss,Digits),OrderTakeProfit(),0,orderColor)) Print("[ONLY SL] - Order OrderModify failed, order number: ", OrderTicket(), " Error: ", GetLastError()); else Print("[ONLY SL] - OrderSend placed successfully"); deleteFile_AdjustTrade(fileName_Adjusted); } else if(myEntry>0 && myTakeProfit==0 && myStopLoss>0) { // MODIFT ENTY & SL Print("-----> MODIFT ENTY & SL"); if(!OrderModify(OrderTicket(), NormalizeDouble(myEntry,Digits), NormalizeDouble(myStopLoss,Digits),OrderTakeProfit(),0,orderColor)) Print("[MODIFT ENTY & SL] - Order OrderModify failed, order number: ", OrderTicket(), " Error: ", GetLastError()); else Print("[MODIFT ENTY & SL] - OrderSend placed successfully"); deleteFile_AdjustTrade(fileName_Adjusted); } else if(myEntry>0 && myTakeProfit==0 && myStopLoss==0) { // MODIFT ONLY ENTY Print("-----> MODIFT ONLY ENTY"); if(!OrderModify(OrderTicket(), NormalizeDouble(myEntry,Digits), OrderStopLoss(),OrderTakeProfit(),0,orderColor)) Print("[MODIFT ONLY ENTY] - Order OrderModify failed, order number: ", OrderTicket(), " Error: ", GetLastError()); else Print("[MODIFT ONLY ENTY] - OrderSend placed successfully"); deleteFile_AdjustTrade(fileName_Adjusted); } else if(myEntry>0 && myTakeProfit>0 && myStopLoss==0) { // MODIFT ENTY & TP Print("-----> MODIFT ENTY & TP"); if(!OrderModify(OrderTicket(), NormalizeDouble(myEntry,Digits), OrderStopLoss(),NormalizeDouble(myTakeProfit,Digits),0,orderColor)) Print("[MODIFT ENTY & TP] - Order OrderModify failed, order number: ", OrderTicket(), " Error: ", GetLastError()); else Print("[MODIFT ENTY & TP] - OrderSend placed successfully"); deleteFile_AdjustTrade(fileName_Adjusted); } else if(myEntry==0 && myTakeProfit>0 && myStopLoss==0) { // MODIFT ONLY TP Print("-----> ONLY Modify TAKEPROFIT"); if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(),NormalizeDouble(myTakeProfit,Digits),0,orderColor)) Print("[ONLY Modify TAKEPROFIT] - Order OrderModify failed, order number: ", OrderTicket(), " Error: ", GetLastError()); else Print("[ONLY Modify TAKEPROFIT] - OrderSend placed successfully"); deleteFile_AdjustTrade(fileName_Adjusted); } else if(myEntry>0 && myTakeProfit>0 && myStopLoss>0) { // MODIFT ALL Print("-----> MODIFT ALL"); if(! OrderModify(OrderTicket(), NormalizeDouble(myEntry,Digits), NormalizeDouble(myStopLoss,Digits),NormalizeDouble(myTakeProfit,Digits),0,orderColor)) Print("[MODIFT AL] - Order OrderModify failed, order number: ", OrderTicket(), " Error: ", GetLastError()); else Print("[MODIFT AL] - OrderSend placed successfully"); deleteFile_AdjustTrade(fileName_Adjusted); } if(myEntry==0 && myTakeProfit>0 && myStopLoss>0) { // MODIFT SL & TP Print("-----> MODIFT SL & TP"); if(! OrderModify(OrderTicket(),OrderOpenPrice(), NormalizeDouble(myStopLoss,Digits),NormalizeDouble(myTakeProfit,Digits),0,orderColor)) Print("[MODIFT SL & TP] - Order OrderModify failed, order number: ", OrderTicket(), " Error: ", GetLastError()); else Print("[MODIFT SL & TP] - OrderSend placed successfully"); deleteFile_AdjustTrade(fileName_Adjusted); } else { Print("-----> Don't Know What whent wrong."); Print("myType = "+myType + ";"+ "mySymbole = "+mySymbole + ";"+ "myMagicNo = "+IntegerToString(magicNumber) + ";"+ "myPosition = "+IntegerToString(myPosition) + ";"+ "myEntry = "+DoubleToStr(myEntry) + ";"+ "myStopLoss = "+DoubleToStr(myStopLoss) + ";"+ "myTakeProfit = "+DoubleToStr(myTakeProfit)); } } }

Cancel quote

Checking account access…