diff --git a/MtApi5/Mt5CommandType.cs b/MtApi5/Mt5CommandType.cs index 3ffd8dbc..38aeed5c 100755 --- a/MtApi5/Mt5CommandType.cs +++ b/MtApi5/Mt5CommandType.cs @@ -101,6 +101,7 @@ namespace MtApi5 //CTrade PositionClose = 64, PositionOpen = 65, + PositionModify = 6066, //PositionOpenWithResult = 1065, //Backtesting diff --git a/MtApi5/MtApi5Client.cs b/MtApi5/MtApi5Client.cs index bbf578fc..a3f02434 100755 --- a/MtApi5/MtApi5Client.cs +++ b/MtApi5/MtApi5Client.cs @@ -547,6 +547,20 @@ namespace MtApi5 return SendCommand(Mt5CommandType.PositionClose, commandParameters); } + /// + /// Modifies existing position + /// + /// >Ticket of the position + /// Stop loss + /// Take profit + /// + public bool PositionModify(ulong ticket, double sl, double tp) + { + var commandParameters = new ArrayList { ticket, sl,tp }; + + return SendCommand(Mt5CommandType.PositionModify, commandParameters); + } + /// ///Closes a position with the specified ticket. /// diff --git a/mq5/MtApi5.mq5 b/mq5/MtApi5.mq5 index 6f8f7d4b..f5d8c1de 100644 --- a/mq5/MtApi5.mq5 +++ b/mq5/MtApi5.mq5 @@ -552,6 +552,9 @@ int executeCommand() // case 1065: //PositionOpenWithResult // Execute_PositionOpen(true); // break; + case 6066: //PositionModify + Execute_PositionModify(); + break; case 66: //BacktestingReady Execute_BacktestingReady(); break; @@ -3255,6 +3258,41 @@ void Execute_MarketBookRelease() } } +void Execute_PositionModify() +{ + ulong ticket; + double sl; + double tp; + + if (!getULongValue(ExpertHandle, 0, ticket, _error)) + { + PrintParamError("PositionModify", "ticket", _error); + sendErrorResponse(ExpertHandle, -1, _error, _response_error); + return; + } + if (!getDoubleValue(ExpertHandle, 1, sl, _error)) + { + PrintParamError("PositionModify", "sl", _error); + sendErrorResponse(ExpertHandle, -1, _error, _response_error); + return; + } + if (!getDoubleValue(ExpertHandle, 2, tp, _error)) + { + PrintParamError("PositionModify", "tp", _error); + sendErrorResponse(ExpertHandle, -1, _error, _response_error); + return; + } + + CTrade trade; + bool ok = trade.PositionModify(ticket,sl,tp); + Print("command PositionModify: result = ", ok); + + if (!sendBooleanResponse(ExpertHandle, ok, _response_error)) + { + PrintResponseError("PositionModify", _response_error); + } +} + void Execute_PositionOpen(bool isTradeResultRequired) { string symbol;