int BuildDirectionSignature(Pattern &p)
Вычисляет битовую маску (signature) на основе последовательности направлений волн паттерна
Сообщите нам, если считаете, что материал размещён без разрешения.
Обращение по товару «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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.