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

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

18

//+–+

//| Открытие позиции |

//+–+

void OpenPosition(ENUM_ORDER_TYPE orderType)

{

// Подготовка данных для торгового запроса

MqlTradeRequest request;

MqlTradeResult result;

ZeroMemory(request);

ZeroMemory(result);

// Установка символа

request.symbol = _Symbol;

request.volume = LotSize;

request.magic = MagicNumber;

request.comment = OrderComment;

// Установка типа ордера

request.type = orderType;

// Расчет цены входа

if(orderType == ORDER_TYPE_BUY)

{

request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);

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

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

}

else if(orderType == ORDER_TYPE_SELL)

{

request.price = SymbolInfoDouble(_Symbol, SYMBOL_BID);

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

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

}

// Установка отклонения от цены

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, " Комментарий: ", result.comment);

}

}

else

{

Print("Ошибка OrderSend. Код ошибки: ", GetLastError());

}

}

//+–+

//| Проверка условий для закрытия позиции |

//+–+

void CheckForClose()

{

// Получаем значения индикаторов на текущем баре

double fastMA[1], slowMA[1];

if(CopyBuffer(fastMAHandle, 0, 0, 1, fastMA) < 1) return;

if(CopyBuffer(slowMAHandle, 0, 0, 1, slowMA) < 1) return;

// Проверяем все открытые позиции

for(int i = PositionsTotal() – 1; i >= 0; i–)

{

if(PositionGetSymbol(i) == _Symbol && PositionGetInteger(POSITION_MAGIC) == MagicNumber)

{

long positionType = PositionGetInteger(POSITION_TYPE);