Алексей Боровков – 10 роботов для автоматической торговли на Форекс (страница 3)
//+–+
//| Открытие позиции |
//+–+
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);