← К каталогу
Исходный код · ID 4704

Multi-Wave Pattern Recognition EA

patterndatabase_forwardtest_hpo40.mqh
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Данная библиотека представляет собой базу данных паттернов для системы распознавания многоуровневых ценовых паттернов. Она хранит свинг-паттерны, определяемые последовательностью направлений волн, коэффициентами Фибоначчи амплитуд и соотношениями длительностей. Библиотека совместима с MQL4 и MQL5.

В базе содержится около 60 паттернов, разделённых на группы покупки (groupType 8) и продажи (groupType 9). Среди них — классические двойные и тройные дно/вершина, треугольники, флаги, пентаграммы, клинья, паттерны «чашка с ручкой» и прямоугольники.

Функция ApplyHistoricalPatternProfile применяет профиль HPO40, который деактивирует ряд паттернов при использовании в историческом форвард-тестировании. Это позволяет контролировать, какие паттерны участвуют в бэктесте.

Важно: библиотека предназначена для работы со свинг-паттернами, определяемыми по волновой структуре, и не предназначена для распознавания свечных формаций (Engulfing, Hammer, Doji и т.п.), для которых требуется отдельный модуль.

Состав библиотеки

Классов: 0 · методов: 0 · конструкторов: 0 · деструкторов: 0 · отдельных функций: 4

Функции
Функция int BuildDirectionSignature(Pattern &p)

Вычисляет битовую маску (signature) на основе последовательности направлений волн паттерна

Функция void InitPatterns()

Инициализирует базу паттернов, заполняя глобальный массив всеми определёнными паттернами

Функция bool HistoricalPatternPairAllowed(string patternName, int groupType)

Проверяет, разрешён ли указанный паттерн в профиле исторического форвард-тестирования HPO40

Функция void ApplyHistoricalPatternProfile()

Применяет профиль HPO40, деактивируя паттерны, не разрешённые в историческом тестировании

Получить полный код

Поиск по коду файла

#property strict

#ifndef __MW_PATTERN_DATABASE_MQH__
#define __MW_PATTERN_DATABASE_MQH__

#include "PatternTypes.mqh"

Pattern g_Patterns[MAX_PATTERNS];
int     g_PatternCount = 0;

int BuildDirectionSignature(Pattern &p)
{
   int sig = 0;

   for(int i = 0; i < p.waveCount; i++)
   {
      sig <<= 1;

      if(p.dirs[i] > 0)
         sig |= 1;
   }

   return sig;
}

void SetPattern(
   int idx,
   string name,
   int waves,
   string dirs,
   string fibs,
   string durs,
   int group,
   int merrill = 0
)
{
   if(idx < 0 || idx >= MAX_PATTERNS)
      return;

   g_Patterns[idx].name = name;
   g_Patterns[idx].waveCount = waves;
   g_Patterns[idx].groupType = group;
   g_Patterns[idx].active = true;
   g_Patterns[idx].merrillCode = merrill;

   string d[];
   int dc = StringSplit(dirs, ',', d);

   string f[];
   int fc = StringSplit(fibs, ',', f);

   string r[];
   int rc = StringSplit(durs, ',', r);

   if(dc != waves || fc != waves || rc != waves)
   {
      g_Patterns[idx].active = false;

      Print(
         "PATTERN INIT ERROR: ",
         name,
         " - Expected ",
         waves,
         " values, got dirs=",
         dc,
         " fibs=",
         fc,
         " durs=",
         rc
      );

      return;
   }

   for(int i = 0; i < waves; i++)
   {
      g_Patterns[idx].dirs[i] = (char)StringToInteger(d[i]);
      g_Patterns[idx].fibs[i] = (float)StringToDouble(f[i]);
      g_Patterns[idx].durs[i] = (float)StringToDouble(r[i]);
   }

   g_Patterns[idx].directionSignature =
      BuildDirectionSignature(g_Patterns[idx]);
}

void InitPatterns()
{
   int idx = 0;

   SetPattern(
      idx++,
      "W:DoubleBottom",
      4,
      "-1,1,-1,1",
      "1,0.618,1,1.272",
      "1,0.786,1,0.786",
      8
   );

   SetPattern(
      idx++,
      "W:DeepBottom",
      4,
      "-1,1,-1,1",
      "1,0.886,1,1.13",
      "1,0.5,1,0.5",
      8
   );

   SetPattern(
      idx++,
      "W:ShallowBottom",
      4,
      "-1,1,-1,1",
      "1,0.382,1,1.618",
      "1,1,1,1",
      8
   );

   SetPattern(idx++, "W:W1",  6, "-1,1,-1,1,-1,1", "1,0.618,1,0.618,1,1.272", "1,0.786,1,0.786,1,0.786", 8, 54321);
   SetPattern(idx++, "W:W2",  6, "-1,1,-1,1,-1,1", "1,0.786,1,0.786,1,1.272", "1,0.618,1,0.618,1,0.618", 8, 53421);
   SetPattern(idx++, "W:W3",  6, "-1,1,-1,1,-1,1", "1,0.886,1,0.886,1,1.13",  "1,0.5,1,0.5,1,0.5",     8, 52431);
   SetPattern(idx++, "W:W4",  6, "-1,1,-1,1,-1,1", "1,0.618,1,0.618,1,1.618", "1,1,1,1,1,1",             8, 52341);
   SetPattern(idx++, "W:W5",  6, "-1,1,-1,1,-1,1", "1,0.786,1,0.786,1,1.618", "1,0.786,1,0.786,1,0.786", 8, 51432);
   SetPattern(idx++, "W:W6",  6, "-1,1,-1,1,-1,1", "1,0.886,1,0.886,1,1.618", "1,0.618,1,0.618,1,0.618", 8, 51342);
   SetPattern(idx++, "W:W7",  6, "-1,1,-1,1,-1,1", "1,0.618,1,0.618,1,2.618", "1,0.5,1,0.5,1,0.5",     8, 41352);
   SetPattern(idx++, "W:W8",  6, "-1,1,-1,1,-1,1", "1,0.786,1,0.786,1,2.618", "1,0.786,1,0.786,1,0.786", 8, 41253);
   SetPattern(idx++, "W:W9",  6, "-1,1,-1,1,-1,1", "1,0.886,1,0.886,1,2.618", "1,0.618,1,0.618,1,0.618", 8, 41235);
   SetPattern(idx++, "W:W10", 6, "-1,1,-1,1,-1,1", "1,0.618,1,0.618,1,4.236", "1,1,1,1,1,1",             8, 31245);
   SetPattern(idx++, "W:W11", 6, "-1,1,-1,1,-1,1", "1,0.786,1,0.786,1,4.236", "1,0.786,1,0.786,1,0.786", 8, 31254);
   SetPattern(idx++, "W:W12", 6, "-1,1,-1,1,-1,1", "1,0.886,1,0.886,1,4.236", "1,0.5,1,0.5,1,0.5",     8, 21345);
   SetPattern(idx++, "W:W13", 6, "-1,1,-1,1,-1,1", "1,0.618,1,0.618,1,1.618", "1,0.618,1,0.618,1,0.618", 8, 21354);
   SetPattern(idx++, "W:W14", 6, "-1,1,-1,1,-1,1", "1,0.786,1,0.786,1,1.618", "1,0.786,1,0.786,1,0.786", 8, 21435);
   SetPattern(idx++, "W:W15", 6, "-1,1,-1,1,-1,1", "1,0.886,1,0.886,1,1.618", "1,0.5,1,0.5,1,0.5",     8, 12435);
   SetPattern(idx++, "W:W16", 6, "-1,1,-1,1,-1,1", "1,0.618,1,0.618,1,1.272", "1,0.786,1,0.786,1,0.786", 8, 12345);

   SetPattern(
      idx++,
      "W:TripleBottom",
      6,
      "-1,1,-1,1,-1,1",
      "1,0.5,1,0.5,1,1.272",
      "1,0.786,1,0.786,1,0.786",
      8
   );

   SetPattern(
      idx++,
      "InvH&S",
      6,
      "-1,1,-1,1,-1,1",
      "1,0.5,1.5,0.5,1,1",
      "1,0.5,1,0.5,1,0.5",
      8,
      31542
   );

   SetPattern(
      idx++,
      "Tri:Ascending",
      4,
      "-1,1,-1,1",
      "1,1,0.618,1.272",
      "1,0.786,0.786,1",
      8
   );

   SetPattern(
      idx++,
      "Tri:SymUp",
      4,
      "-1,1,-1,1",
      "1,0.786,0.618,1.272",
      "1,0.786,0.618,1",
      8
   );

   SetPattern(
      idx++,
      "Flag:Up",
      3,
      "1,-1,1",
      "1,0.382,1.618",
      "1,0.5,1",
      8
   );

   SetPattern(
      idx++,
      "Pennant:Up",
      5,
      "1,-1,1,-1,1",
      "1,0.236,0.236,0.236,1.618",
      "1,0.5,0.5,0.5,1",
      8
   );

   SetPattern(
      idx++,
      "Wedge:Falling",
      4,
      "-1,1,-1,1",
      "1,0.618,0.618,1.272",
      "1,0.786,0.786,1",
      8
   );

   SetPattern(
      idx++,
      "Cup:Handle",
      6,
      "-1,1,-1,1,-1,1",
      "1,0.382,1,1,0.382,1.272",
      "1,1,1,1,0.5,1",
      8
   );

   SetPattern(
 

Показано первые 50% кода (символов: 7336)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
733,60₽ ≈ $8.97