Алексей Боровков – 10 роботов для автоматической торговли на Форекс (страница 16)
if(!OrderSend(request, result))
{
Print("Ошибка открытия позиции: ", GetLastError());
}
else
{
todayTrades++;
Print("Позиция открыта. Сегодня сделок: ", todayTrades);
}
}
//+–+
//| Функция закрытия всех позиций |
//+–+
void CloseAllPositions()
{
for(int i = PositionsTotal()-1; i >= 0; i–)
{
ulong ticket = PositionGetTicket(i);
if(PositionSelectByTicket(ticket))
{
if(PositionGetString(POSITION_SYMBOL) == _Symbol &&
PositionGetInteger(POSITION_MAGIC) == MagicNumber)
{
MqlTradeRequest request = {};
MqlTradeResult result = {};
request.action = TRADE_ACTION_DEAL;
request.position = ticket;
request.symbol = _Symbol;
request.volume = PositionGetDouble(POSITION_VOLUME);
request.deviation = 1;
if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)
{
request.type = ORDER_TYPE_SELL;
request.price = SymbolInfoDouble(_Symbol, SYMBOL_BID);
}
else
{
request.type = ORDER_TYPE_BUY;
request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
}
OrderSend(request, result);
}
}
}
}
```
Дополнительные функции для реального скальпинга:
```mq5
//+–+
//| Функция мониторинга стакана цен (упрощенная) |
//+–+
void MonitorMarketDepth()
{
// В MT5 нет прямого доступа к Level II, но можно использовать
// символьные свойства для получения информации о спросе/предложении
MqlTick lastTick;
SymbolInfoTick(_Symbol, lastTick);
// Можно добавить логику анализа объема на текущих ценах
// Например, отслеживать крупные лимитные ордера
}
//+–+
//| Функция анализа кластеров объемов |
//+–+
void AnalyzeVolumeClusters()
{