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

Multi-Wave Pattern Recognition

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

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

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

О программе

Библиотека patterndatabase.mqh реализует базу данных ценовых паттернов для мультиволнового распознавания на платформе MQL. Она содержит предопределённые структуры, описывающие классические графические формы — двойное дно, двойная вершина, голова и плечи, а также волновые и разрывные паттерны.

Каждый паттерн задаётся набором волн с направлениями, коэффициентами Фибоначчи и временными характеристиками. Библиотека поддерживает до 65 паттернов, каждый из которых может включать до 30 волн. Паттерны сгруппированы по типам покупающих и продающих сигналов.

При инициализации глобальный массив паттернов заполняется заранее заданными значениями, и для каждого паттерна вычисляется сигнатура направлений, обеспечивающая быстрое сравнение и сопоставление с рыночными данными.

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

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

Классы
Класс class Pattern

Структура, описывающая один ценовой паттерн: имя, количество волн, массив направлений, коэффициенты Фибоначчи, временные параметры, групповой тип, активность и коды Меррилла.

Функции
Функция int BuildDirectionSignature(char &dirs[], int waveCount)

Формирует числовую сигнатуру направлений на основе массива направлений волн, используемую для идентификации и сравнения паттернов.

Функция void InitPatterns()

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

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

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

#ifndef __MW_PATTERN_DATABASE_MQH__
#define __MW_PATTERN_DATABASE_MQH__

#define MAX_PATTERNS 65
#define MAX_WAVES    30

struct Pattern
{
   string name;
   uchar  waveCount;
   char   dirs[MAX_WAVES];
   float  fibs[MAX_WAVES];
   float  durs[MAX_WAVES];
   uchar  groupType;
   bool   active;
   int    merrillCode;
   int    directionSignature;
};

Pattern g_Patterns[MAX_PATTERNS];
int     g_PatternCount = 0;

int BuildDirectionSignature(char &dirs[], int waveCount)
{
   int signature = 0;

   if(waveCount < 1)
      return 0;

   for(int i = 0; i < waveCount; i++)
   {
      signature <<= 1;

      if(dirs[i] > 0)
         signature |= 1;
   }

   return signature;
}

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 = (uchar)waves;
   g_Patterns[idx].groupType = (uchar)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].dirs,
         waves
      );
}

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"

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

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

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

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

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

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

Стоимость полного кода
537,70₽ ≈ $6.57