//+------------------------------------------------------------------+ //| ModifyOrder.mqh | //| Patrick Bouché. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Patrick Bouché." #property link "http://www.mql5.com" //Parameters required for modifying position => structure MqlTradeRequest : //ENUM_TRADE_REQUEST_ACTIONS action; Trade operation types: done // TRADE_ACTION_DEAL : for market order done // TRADE_ACTION_PENDING : for pending order NA // TRADE_ACTION_SLTP : modify SL and/or TG of opened position NA // TRADE_ACTION_MODIFY : modify parameters price/SL/TG of pending order NA // TRADE_ACTION_REMOVE : delete pending order NA //ulong magic; Expert Advisor ID (magic number) done //ulong order; Order ticket NA //string symbol; Trade symbol done //double volume; Requested volume for a deal in lots done //double price; Price done //double stoplimit; StopLimit level of the order done //double sl; Stop Loss level of the order done //double tp; Take Profit level of the order done //ulong deviation; Maximal possible deviation from the requested price done //ENUM_ORDER_TYPE type; Order types: done // ORDER_TYPE_BUY done // ORDER_TYPE_SELL done // ORDER_TYPE_BUY_LIMIT || ORDER_TYPE_BUY_STOP done // ORDER_TYPE_SELL_LIMIT || ORDER_TYPE_SELL_STOP done // ORDER_TYPE_SELL_STOP done // ORDER_TYPE_SELL_STOP_LIMIT done //ENUM_ORDER_TYPE_FILLING type_filling; Order execution types: done // ORDER_FILLING_AON : All or nothing (volumes) done // ORDER_FILLING_CANCEL NA // ORDER_FILLING_RETURN NA //ENUM_ORDER_TYPE_TIME type_time; Order execution times: done // ORDER_TIME_GTC : Good Til Cancelled done // ORDER_TIME_DAY : Good Til end of trading day done //datetime expiration; Order expiration time (for pending orders) done //string comment Order comment done void MODIFYORDER(string sym,long ticket,double price,double SL,double TG,string expire) { MqlTradeRequest Trequest; MqlTradeResult Tresult; MqlDateTime Tdate; datetime date; string text; Trequest.action=TRADE_ACTION_MODIFY; //Setting other parameters: Trequest.symbol=sym; Trequest.order=ticket; Trequest.price=price; Trequest.sl=NormalizeDouble(SL,_Digits); Trequest.tp=NormalizeDouble(TG,_Digits); Trequest.deviation=30; //Setting expiration of pending order if needed if(expire=="DAY") Trequest.type_time=ORDER_TIME_DAY; else if(expire=="GTC") Trequest.type_time=ORDER_TIME_GTC; //Trequest.expiration= //Sending order OrderSend(Trequest,Tresult); //Analysing result if(Tresult.retcode==10009 || Tresult.retcode==10008) { date=TimeCurrent(); TimeToStruct(date,Tdate); StringConcatenate(text,"Order #",Tresult.order," modified on the: ",Tdate.day," at: ",Tdate.hour,":",Tdate.min," new price: ",Tresult.price, " new SL: ",Trequest.sl,", new TG: ",Trequest.tp); PrintComment(text); } else { date=TimeCurrent(); TimeToStruct(date,Tdate); StringConcatenate(text,"Error modifying order #",GetLastError()," on the: ",Tdate.day," at: ",Tdate.hour,":",Tdate.min); PrintComment(text); ResetLastError(); } }