Алексей Боровков – 10 роботов для автоматической торговли на Форекс (страница 20)
// Ищем паттерны среди экстремумов
for(int i = 4; i < extremeCount; i++)
{
// Проверяем XABCD паттерны
for(int x = i-4; x <= i-4; x++)
for(int a = x+1; a <= i-3; a++)
for(int b = a+1; b <= i-2; b++)
for(int c = b+1; c <= i-1; c++)
for(int d = c+1; d <= i; d++)
{
// Проверяем временные рамки паттерна
int patternBars = extremeBars[d] – extremeBars[x];
if(patternBars < MinPatternBars || patternBars > MaxPatternBars) continue;
// Проверяем бычий паттерн (X – low, A – high, B – low, C – high, D – low)
if(extremes[x] < extremes[a] && extremes[a] > extremes[b] &&
extremes[b] < extremes[c] && extremes[c] > extremes[d])
{
PatternPoints bullPattern;
bullPattern.X = extremes[x];
bullPattern.A = extremes[a];
bullPattern.B = extremes[b];
bullPattern.C = extremes[c];
bullPattern.D = extremes[d];
bullPattern.timeX = extremeTimes[x];
bullPattern.timeA = extremeTimes[a];
bullPattern.timeB = extremeTimes[b];
bullPattern.timeC = extremeTimes[c];
bullPattern.timeD = extremeTimes[d];
bullPattern.direction = 1;
// Проверяем тип паттерна
bullPattern.type = CheckPatternType(bullPattern);
if(bullPattern.type != PATTERN_NONE)
{
// Проверяем, что точка D – последняя (или почти последняя)
int barsSinceD = iBarShift(_Symbol, _Period, extremeTimes[d]);
if(barsSinceD <= 3) // Паттерн свежий
{
return bullPattern;
}
}
}
// Проверяем медвежий паттерн (X – high, A – low, B – high, C – low, D – high)
if(extremes[x] > extremes[a] && extremes[a] < extremes[b] &&
extremes[b] > extremes[c] && extremes[c] < extremes[d])
{
PatternPoints bearPattern;
bearPattern.X = extremes[x];
bearPattern.A = extremes[a];
bearPattern.B = extremes[b];
bearPattern.C = extremes[c];
bearPattern.D = extremes[d];
bearPattern.timeX = extremeTimes[x];
bearPattern.timeA = extremeTimes[a];
bearPattern.timeB = extremeTimes[b];
bearPattern.timeC = extremeTimes[c];
bearPattern.timeD = extremeTimes[d];
bearPattern.direction = -1;
// Проверяем тип паттерна
bearPattern.type = CheckPatternType(bearPattern);
if(bearPattern.type != PATTERN_NONE)
{
// Проверяем, что точка D – последняя (или почти последшая)
int barsSinceD = iBarShift(_Symbol, _Period, extremeTimes[d]);
if(barsSinceD <= 3) // Паттерн свежий
{