реклама
Бургер менюБургер меню

Алексей Боровков – 10 роботов для автоматической торговли на Форекс (страница 9)

18

}

}

//+–+

//| Функция открытия позиции |

//+–+

void OpenPosition(ENUM_ORDER_TYPE orderType)

{

MqlTradeRequest request = {};

MqlTradeResult result = {};

request.action = TRADE_ACTION_DEAL;

request.symbol = _Symbol;

request.volume = LotSize;

request.type = orderType;

request.type_filling = ORDER_FILLING_FOK;

request.deviation = 10;

request.magic = MagicNumber;

// Установка цен

if(orderType == ORDER_TYPE_BUY)

{

request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);

request.sl = request.price – StopLoss_Points * _Point;

request.tp = request.price + TakeProfit_Points * _Point;

}

else // ORDER_TYPE_SELL

{

request.price = SymbolInfoDouble(_Symbol, SYMBOL_BID);

request.sl = request.price + StopLoss_Points * _Point;

request.tp = request.price – TakeProfit_Points * _Point;

}

// Отправка ордера

if(!OrderSend(request, result))

{

Print("Ошибка открытия позиции: ", GetLastError());

}

else

{

Print("Позиция успешно открыта. Тикет: ", result.order);

}

}

//+–+

//| Функция трейлинг-стопа |

//+–+

void TrailingStop()

{

ulong posTicket = PositionGetTicket(0);

if(!PositionSelectByTicket(posTicket)) return;

double currentSL = PositionGetDouble(POSITION_SL);

double currentPrice = PositionGetDouble(POSITION_PRICE_CURRENT);

ENUM_POSITION_TYPE posType = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);

double newSL = currentSL;

double trailingStep = TrailingStop_Points * _Point;

if(posType == POSITION_TYPE_BUY)

{

if(currentPrice – currentSL > trailingStep)

{

newSL = currentPrice – trailingStep;

if(newSL > currentSL)

{

ModifyPositionSL(newSL);

}

}

}

else if(posType == POSITION_TYPE_SELL)

{

if(currentSL – currentPrice > trailingStep)