Алексей Боровков – 10 роботов для автоматической торговли на Форекс (страница 21)
return bearPattern;
}
}
}
}
}
return result;
}
//+–+
//| Сбор экстремумов из ZigZag |
//+–+
void CollectExtremes(double &extremes[], datetime ×[], int &bars[])
{
ArrayResize(extremes, 0);
ArrayResize(times, 0);
ArrayResize(bars, 0);
for(int i = 100; i >= 0; i–)
{
if(zigzagBuffer[i] != 0 && zigzagBuffer[i] != EMPTY_VALUE)
{
int size = ArraySize(extremes);
ArrayResize(extremes, size + 1);
ArrayResize(times, size + 1);
ArrayResize(bars, size + 1);
extremes[size] = zigzagBuffer[i];
times[size] = timeBuffer[i];
bars[size] = i;
}
}
// Ограничиваем количество экстремумов
int count = ArraySize(extremes);
if(count > 20)
{
ArrayResize(extremes, 20);
ArrayResize(times, 20);
ArrayResize(bars, 20);
}
}
//+–+
//| Проверка типа паттерна |
//+–+
PATTERN_TYPE CheckPatternType(const PatternPoints &pattern)
{
// Вычисляем соотношения Фибоначчи
double XA = MathAbs(pattern.A – pattern.X);
double AB = MathAbs(pattern.B – pattern.A);
double BC = MathAbs(pattern.C – pattern.B);
double CD = MathAbs(pattern.D – pattern.C);
// Отношения
double AB_XA = (XA != 0) ? AB / XA : 0;
double BC_AB = (AB != 0) ? BC / AB : 0;
double CD_BC = (BC != 0) ? CD / BC : 0;
double XC_XA = (XA != 0) ? MathAbs(pattern.C – pattern.X) / XA : 0;
double XD_XA = (XA != 0) ? MathAbs(pattern.D – pattern.X) / XA : 0;
// Уровни Фибоначчи
double fib_0382 = 0.382;
double fib_0500 = 0.5;
double fib_0618 = 0.618;
double fib_0707 = 0.707;
double fib_0786 = 0.786;
double fib_0886 = 0.886;
double fib_1130 = 1.13;
double fib_1272 = 1.272;
double fib_1414 = 1.414;
double fib_1618 = 1.618;