Алексей Боровков – 10 роботов для автоматической торговли на Форекс (страница 4)
// Закрываем BUY позицию если быстрая MA пересекла медленную сверху вниз
if(positionType == POSITION_TYPE_BUY && fastMA[0] < slowMA[0])
{
ClosePosition(i);
}
// Закрываем SELL позицию если быстрая MA пересекла медленную снизу вверх
else if(positionType == POSITION_TYPE_SELL && fastMA[0] > slowMA[0])
{
ClosePosition(i);
}
}
}
}
//+–+
//| Закрытие позиции |
//+–+
void ClosePosition(int positionIndex)
{
// Получаем информацию о позиции
ulong ticket = PositionGetTicket(positionIndex);
if(ticket <= 0) return;
// Подготовка торгового запроса
MqlTradeRequest request;
MqlTradeResult result;
ZeroMemory(request);
ZeroMemory(result);
request.action = TRADE_ACTION_DEAL;
request.position = ticket;
request.symbol = _Symbol;
request.volume = PositionGetDouble(POSITION_VOLUME);
request.magic = MagicNumber;
request.comment = "Close by signal";
// Установка цены закрытия
if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)
{
request.price = SymbolInfoDouble(_Symbol, SYMBOL_BID);
request.type = ORDER_TYPE_SELL;
}
else
{
request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
request.type = ORDER_TYPE_BUY;
}
request.deviation = 10;
request.type_filling = ORDER_FILLING_FOK;
// Отправка запроса на закрытие
if(OrderSend(request, result))
{
if(result.retcode == TRADE_RETCODE_DONE)
{
Print("Позиция закрыта успешно. Тикет: ", result.order);
}
else
{
Print("Ошибка закрытия позиции. Код: ", result.retcode);
}
}
}
//+–+
//| Управление трейлинг-стопом |
//+–+
void ManageTrailingStop()
{
if(!UseTrailingStop) return;
for(int i = PositionsTotal() – 1; i >= 0; i–)