Алексей Боровков – 10 роботов для автоматической торговли на Форекс (страница 22)
double fib_2000 = 2.0;
double fib_2240 = 2.24;
double fib_2618 = 2.618;
// Проверяем паттерн Гартли (Gartley)
// AB = 0.618 XA, BC = 0.382-0.886 AB, CD = 1.272-1.618 BC, XD = 0.786 XA
if(MathAbs(AB_XA – fib_0618) < FiboTolerance &&
(MathAbs(BC_AB – fib_0382) < FiboTolerance ||
MathAbs(BC_AB – fib_0886) < FiboTolerance) &&
(MathAbs(CD_BC – fib_1272) < FiboTolerance ||
MathAbs(CD_BC – fib_1618) < FiboTolerance) &&
MathAbs(XD_XA – fib_0786) < FiboTolerance)
{
return PATTERN_GARTLEY;
}
// Проверяем паттерн Бабочка (Butterfly)
// AB = 0.786 XA, BC = 0.382-0.886 AB, CD = 1.618-2.24 BC, XD = 1.272-1.618 XA
if(MathAbs(AB_XA – fib_0786) < FiboTolerance &&
(MathAbs(BC_AB – fib_0382) < FiboTolerance ||
MathAbs(BC_AB – fib_0886) < FiboTolerance) &&
(MathAbs(CD_BC – fib_1618) < FiboTolerance ||
MathAbs(CD_BC – fib_2240) < FiboTolerance) &&
(MathAbs(XD_XA – fib_1272) < FiboTolerance ||
MathAbs(XD_XA – fib_1618) < FiboTolerance))
{
return PATTERN_BUTTERFLY;
}
// Проверяем паттерн Краб (Crab)
// AB = 0.382-0.618 XA, BC = 0.382-0.886 AB, CD = 2.618-3.618 BC, XD = 1.618 XA
if((MathAbs(AB_XA – fib_0382) < FiboTolerance ||
MathAbs(AB_XA – fib_0618) < FiboTolerance) &&
(MathAbs(BC_AB – fib_0382) < FiboTolerance ||
MathAbs(BC_AB – fib_0886) < FiboTolerance) &&
(MathAbs(CD_BC – fib_2618) < FiboTolerance ||
MathAbs(CD_BC – 3.618) < FiboTolerance) &&
MathAbs(XD_XA – fib_1618) < FiboTolerance)
{
return PATTERN_CRAB;
}
// Проверяем паттерн Летучая мышь (Bat)
// AB = 0.382-0.5 XA, BC = 0.382-0.886 AB, CD = 1.618-2.618 BC, XD = 0.886 XA
if((MathAbs(AB_XA – fib_0382) < FiboTolerance ||
MathAbs(AB_XA – fib_0500) < FiboTolerance) &&
(MathAbs(BC_AB – fib_0382) < FiboTolerance ||
MathAbs(BC_AB – fib_0886) < FiboTolerance) &&
(MathAbs(CD_BC – fib_1618) < FiboTolerance ||
MathAbs(CD_BC – fib_2618) < FiboTolerance) &&
MathAbs(XD_XA – fib_0886) < FiboTolerance)
{
return PATTERN_BAT;
}
// Проверяем паттерн Акула (Shark)
// 0X = 1.13-1.618 XA, AB = 1.13-1.618 0X, BC = 0.886-1.13 AB
// Специфический паттерн, требует особой логики
return PATTERN_NONE;
}
//+–+
//| Отображение паттерна на графике |
//+–+
void DrawPattern(const PatternPoints &pattern)
{
// Удаляем старые линии
DeletePatternLines();
// Создаем уникальные имена для объектов
string prefix = "HP_"+IntegerToString(MagicNumber)+"_";
// Рисуем линии паттерна