je peux te donner l'astuce en MQL5:
void MoveToBreakEven()
{
//--- reset the error value
ResetLastError();
// Normalization of the digits
double nDigits = CalculateNormalizedDigits();
// We calculate the
ask price
double
ask = NormalizeDouble(SymbolInfoDouble(Symbol(), SYMBOL_ASK), Digits());
// We calculate the
Bid price
double
Bid = NormalizeDouble(SymbolInfoDouble(Symbol(), SYMBOL_BID), Digits());
//--- number of current pending orders
uint
total = PositionsTotal();
double ticksize = SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_SIZE);
double pips = 0.0;
if (ticksize == 0.00001 || ticksize == 0.001)
pips = ticksize * 10;
else
pips = ticksize;
for(uint i = 0; i <
total; i++)
{
ulong ticket = PositionGetTicket(i);
if(PositionSelectByTicket(ticket))
{
// Check we are on the right symbol
if (PositionGetString(POSITION_SYMBOL) != Symbol())
continue;
//--- check Expert Magic number
if(PositionGetInteger(POSITION_MAGIC) != Expert_MagicNumber)
continue;
//Prepare the prices
double TakeProfitPrice = 0;
double StopLossPrice = 0;
double OpenPrice = PositionGetDouble(POSITION_PRICE_OPEN);
double positionTakeProfit = PositionGetDouble(POSITION_TP);
double positionStopLoss = PositionGetDouble(POSITION_SL);
// Get position type
long positionType = PositionGetInteger(POSITION_TYPE);
if (positionType == POSITION_TYPE_BUY)
{
if ((
Bid - positionStopLoss) > (pips * WHENTOMOVETOBE))
{
positionStopLoss =
Bid - (pips * WHENTOMOVETOBE);
positionTakeProfit =
Bid + (pips * TakeProfit);
if (!m_trade.PositionModify(ticket, positionStopLoss, positionTakeProfit))
{
Comment(__FUNCTION__,", #1 => false. Result Retcode: ",m_trade.ResultRetcode(),", LastError: ", GetLastError(),", description of result: ",m_trade.ResultRetcodeDescription());
}
}
}
else if (positionType == POSITION_TYPE_SELL)
{
if ((positionStopLoss -
ask) > (pips * WHENTOMOVETOBE))
{
positionStopLoss =
ask + (pips * WHENTOMOVETOBE);
positionTakeProfit =
ask - (pips * TakeProfit);
if (!m_trade.PositionModify(ticket, positionStopLoss, positionTakeProfit))
{
Comment(__FUNCTION__,", #1 => false. Result Retcode: ",m_trade.ResultRetcode(),", LastError: ", GetLastError(),", description of result: ",m_trade.ResultRetcodeDescription());
}
}
}
}
}
}