Алексей Боровков – 10 роботов для автоматической торговли на Форекс (страница 24)
ObjectDelete(0, name);
}
}
}
//+–+
//| Получение названия паттерна |
//+–+
string GetPatternName(PATTERN_TYPE type)
{
switch(type)
{
case PATTERN_GARTLEY: return "Gartley";
case PATTERN_BUTTERFLY: return "Butterfly";
case PATTERN_CRAB: return "Crab";
case PATTERN_BAT: return "Bat";
case PATTERN_SHARK: return "Shark";
case PATTERN_CYPHER: return "Cypher";
default: return "Unknown";
}
}
//+–+
//| Открытие сделки по паттерну |
//+–+
void OpenPatternTrade(const PatternPoints &pattern)
{
// Получаем текущую цену
MqlTick lastTick;
if(!SymbolInfoTick(_Symbol, lastTick)) return;
// Определяем направление сделки
ENUM_ORDER_TYPE orderType;
double entryPrice;
double slPrice, tpPrice;
if(pattern.direction == 1) // Бычий паттерн – покупаем
{
orderType = ORDER_TYPE_BUY;
entryPrice = lastTick.ask;
// Стоп-лосс ниже точки D
slPrice = pattern.D – StopLoss_Points * _Point;
// Тейк-профит на уровне точки B или A (в зависимости от паттерна)
if(pattern.type == PATTERN_GARTLEY || pattern.type == PATTERN_BAT)
tpPrice = entryPrice + (pattern.B – pattern.D);
else
tpPrice = entryPrice + TakeProfit_Points * _Point;
}
else // Медвежий паттерн – продаем
{
orderType = ORDER_TYPE_SELL;
entryPrice = lastTick.bid;
// Стоп-лосс выше точки D
slPrice = pattern.D + StopLoss_Points * _Point;
// Тейк-профит на уровне точки B или A
if(pattern.type == PATTERN_GARTLEY || pattern.type == PATTERN_BAT)
tpPrice = entryPrice – (pattern.D – pattern.B);
else
tpPrice = entryPrice – TakeProfit_Points * _Point;
}
// Открываем сделку
MqlTradeRequest request = {};
MqlTradeResult result = {};
request.action = TRADE_ACTION_DEAL;
request.symbol = _Symbol;
request.volume = LotSize;
request.type = orderType;
request.price = entryPrice;
request.sl = slPrice;