Алексей Боровков – 10 роботов для автоматической торговли на Форекс (страница 15)
//+–+
bool CheckEquityProtection()
{
double currentEquity = AccountInfoDouble(ACCOUNT_EQUITY);
double drawdownPercent = ((initialEquity – currentEquity) / initialEquity) * 100;
return drawdownPercent < EquityProtectionPercent;
}
//+–+
//| Проверка дневного лимита сделок |
//+–+
void CheckDailyTradesLimit()
{
datetime currentDate = TimeCurrent();
MqlDateTime dateStruct;
TimeToStruct(currentDate, dateStruct);
// Если день сменился, сбрасываем счетчик
if(lastTradeDate != dateStruct.day)
{
todayTrades = 0;
lastTradeDate = dateStruct.day;
}
}
//+–+
//| Сброс счетчика дневных сделок |
//+–+
void ResetDailyTradesCounter()
{
datetime currentDate = TimeCurrent();
MqlDateTime dateStruct;
TimeToStruct(currentDate, dateStruct);
todayTrades = 0;
lastTradeDate = dateStruct.day;
}
//+–+
//| Открытие позиции |
//+–+
void OpenPosition(ENUM_ORDER_TYPE orderType)
{
// Проверяем лимит сделок
if(todayTrades >= MaxDailyTrades) return;
MqlTradeRequest request = {};
MqlTradeResult result = {};
request.action = TRADE_ACTION_DEAL;
request.symbol = _Symbol;
request.volume = LotSize;
request.type = orderType;
request.type_filling = ORDER_FILLING_IOC; // Немедленное исполнение или отмена
request.deviation = 1; // Минимальное отклонение
request.magic = MagicNumber;
// Установка цен
MqlTick lastTick;
SymbolInfoTick(_Symbol, lastTick);
if(orderType == ORDER_TYPE_BUY)
{
request.price = lastTick.ask;
request.sl = request.price – StopLoss_Pips * _Point;
request.tp = request.price + TakeProfit_Pips * _Point;
}
else // ORDER_TYPE_SELL
{
request.price = lastTick.bid;
request.sl = request.price + StopLoss_Pips * _Point;
request.tp = request.price – TakeProfit_Pips * _Point;
}
// Отправка ордера