Разработка инструментария для анализа Price Action (Часть 48): Индекс гармонии нескольких таймфреймов с панелью взвешенного смещения
Содержание
- Введение
- Концепция и алгоритм
- Обзор возможностей
- Пояснение к структуре кода
- Пользовательские параметры и настройка
- Тестирование и результаты
- Заключение
Введение
Как трейдеры, работающие с ценовым движением (Price Action), мы опираемся на структурную ясность – понимание того, как рынок ведет себя на разных таймфреймах, прежде чем входить в сделку. Однако одна из постоянных проблем торговли на нескольких таймфреймах заключается в том, как добиться согласованности между этими уровнями. На H4 график может выглядеть бычьим, на H1 – показывать нерешительность, а на M15 – уже разворот, из-за чего у трейдера возникает противоречивая картина и снижается уверенность.
В этой 48-й части серии Разработка инструментария для анализа Price Action мы рассматриваем решение этой проблемы через создание индекса гармонии нескольких таймфреймов (HI) – механизма, который математически выражает согласованность между таймфреймами в виде единого нормализованного значения. Объединяя направленность нескольких структурных сигналов в единый итоговый показатель, HI позволяет трейдерам видеть на одной панели, находится ли рынок в состоянии согласованности между таймфреймами или, наоборот, демонстрирует расхождение.

В этой статье рассматриваются концептуальная основа Индекса гармонии, алгоритм определения на базе структурной логики трех баров, метод взвешивания и сглаживания вклада каждого таймфрейма, а также функциональные возможности, которые превращают его в практический торговый инструмент. Многоуровневая структура делает HI одновременно визуальным инструментом для дискреционных трейдеров и количественным фильтром для алгоритмических систем на платформе MetaTrader 5. К концу статьи вы поймете, как реализовать индекс гармонии и интерпретировать цветовую индикацию панели, алерты и сигнальные маркеры, чтобы принимать решения точнее и увереннее в условиях мультитаймфреймового анализа.
Концепция и алгоритм
В торговле ценовым движением на нескольких таймфреймах задача состоит в том, чтобы выявлять тренды на отдельных графиках и сводить эти сигналы в единое направленное смещение. Младшие таймфреймы, такие как M15 и H1, незаменимы для отслеживания более мелких движений и ранних сигналов входа, тогда как старшие таймфреймы, такие как H4 и D1, задают доминирующий тренд и ключевые структурные уровни. Однако на быстро меняющемся рынке эти таймфреймы часто дают противоречивые сигналы. Без системного способа количественно оценить согласованность трейдерам приходится полагаться на субъективные и трудоемкие оценки. Индекс гармонии нескольких таймфреймов (HI) решает эту проблему, сводя структурные смещения по каждому таймфрейму к единому нормализованному числовому показателю в диапазоне от -1.0 до +1.0. Этот расчет в реальном времени упрощает принятие решений, дает наглядную картину на панели и позволяет автоматически генерировать алерты и сигналы.

Логика определения смещения
Определение смещения (bias) начинается с функции GetStructureBias(), которая анализирует последние три закрытых бара на каждом включенном таймфрейме:
Правило лестницы из трех баров

Если строгое условие лестницы не выполняется, алгоритм переходит к правилу цены закрытия:

Наконец, если оба условия не выполняются или данные неполны, смещение определяется прямым сравнением цен закрытия двух последних баров. Такой многоуровневый подход гарантирует, что очевидные устойчивые тренды распознаются строгими правилами, а более тонкие изменения смещения все равно выявляются резервным методом на основе цен закрытия. Это позволяет игнорировать неполные бары и снижает вероятность ложной нейтральности в условиях повышенной волатильности.
Расчет взвешенного индекса гармонии
Когда для каждого таймфрейма вычислено значение смещения (+1 – бычий, 0 – нейтральный, -1 – медвежий), HI объединяет их по взвешенной формуле:

Здесь weight(i) – это заданный пользователем коэффициент, который определяет важность (вес) данного таймфрейма. Результат нормализуется в диапазоне [-1.0, +1.0], что обеспечивает единую шкалу независимо от весов.
Например, рассмотрим такой пример:
- M15: Смещение = +1, вес = 0,10, вклад = +0,10
- H1: Смещение = +1, вес = 0,20, вклад = +0,20
- H4: Смещение = 0, вес = 0,30, вклад = 0,00
- D1: Смещение = +1, вес = 0,40, вклад = +0,40
WeightedSum = 0.10+0.20+0.00+0.40 = 0.70, TotalWeight = 1.0
- Индекс гармонии (HI) = (0,70/1,0) = 0,70
Значение HI, равное 0,70, указывает на умеренно сильный бычий консенсус и находится чуть ниже значимого порога, если он установлен на уровне 0,8.
Сглаживание HI с помощью EMA
Рыночные условия, особенно на младших таймфреймах, могут вызывать резкие колебания значений HI. Чтобы снизить шум сигналов, индекс гармонии применяет сглаживание с помощью экспоненциальной скользящей средней (EMA):

Такое сглаживание EMA дает более плавную оценку направленного смещения тренда:
- короткие периоды EMA → более чувствительны, подходят для скальпинга;
- более длинные периоды EMA → более стабильны, лучше подходят для свинг-трейдинга.
Сглаживание EMA уменьшает количество ложных алертов и делает пересечения порогов надежнее.
Классификация состояний на основе порогов
Хотя индекс гармонии дает точное числовое значение, чтобы сделать его практически применимым в торговле, нужны четкие правила классификации. Сырые десятичные значения могут быть полезны аналитикам, но на рабочем графике их смысл должен считываться сразу, без дополнительных вычислений в уме. Для этого индекс гармонии применяет двухуровневую систему порогов, которая определяет значимые и умеренные состояния смещения как для бычьих, так и для медвежьих сценариев.
StrongThreshold обозначает точку, в которой согласованность между включенными таймфреймами достигает высокого уровня уверенности. Например, если StrongThreshold имеет значение 0,80, для его пересечения потребуется, чтобы большинство взвешенных таймфреймов были четко согласованы в одном направлении. Это указывает на рыночную среду, в которой согласованность нескольких таймфреймов настолько высока, что многие трейдеры сочтут оправданным более агрессивное позиционирование. Параметр ModerateThreshold с более низким значением, например 0,40, сигнализирует о промежуточном уровне консенсуса. Он показывает ситуацию, в которой согласованность смещений уже формируется, но еще не достигла высокого уровня уверенности.
Математически логика классификации выражается так:

На панели графика эти состояния дополнительно выделяются интуитивно понятной цветовой индикацией. При сильном бычьем консенсусе значение HI отображается ярко-зеленым цветом, а при сильном медвежьем – ярко-красным. Для умеренно бычьих и умеренно медвежьих состояний используются более мягкие оттенки зеленого и красного соответственно – они указывают на потенциальную возможность, но требуют осторожности. Показания в слабой или нейтральной зоне отображаются желтым цветом, что указывает на неопределенность или отсутствие четкого тренда на нескольких таймфреймах. Эта цветовая индикация особенно важна на быстро меняющемся рынке: трейдер может считывать состояние рынка с одного взгляда, не отвлекаясь от анализа цены.
Алерты и логика сигналов
Одной из сильных сторон индекса гармонии нескольких таймфреймов является способность рассчитывать и отображать согласованность смещений в реальном времени, а также оперативно уведомлять трейдера о существенных изменениях. Алерты и сигналы, нанесенные на график, превращают HI из чисто аналитического инструмента в тактический инструмент, который поддерживает автоматизированное принятие решений и визуальную разметку сделок.
Система алертов сосредоточена на двух ключевых событиях. Первое – пересечения порогов HI, которые происходят, когда индекс гармонии проходит снизу вверх через значимый порог в бычьем направлении или сверху вниз через отрицательный значимый порог в медвежьем. Такие события обычно означают значимый сдвиг в консенсусе и часто отмечают переход от неопределенности к высокой уверенности на нескольких таймфреймах. Второе – смена смещения на старших таймфреймах, когда смещение на H4 или D1 меняет знак – например, с бычьего на медвежий или наоборот. Поскольку в большинстве стратегий эти старшие таймфреймы имеют больший вес, такая смена может предшествовать крупным структурным движениям и требует внимания трейдера, даже если общее значение HI еще не пересекло значимый порог.
Нанесение сигналов на график дополняет алерты: при пересечениях значимых порогов на графике появляются сигналы на покупку или продажу в виде стрелок. Например, если HI проходит вверх через значимый порог, зеленая стрелка покупки наносится чуть ниже минимума последнего закрытого бара; если HI проходит вниз через отрицательный значимый порог, красная стрелка продажи размещается чуть выше максимума этого бара. Такой сдвиг улучшает читаемость и не перегружает область рядом с телами свечей. Чтобы исключить ложные или избыточные сигналы, советник проверяет, не была ли уже размещена на текущем баре стрелка того же направления, и учитывает заданный пользователем параметр MaxSignals, который ограничивает количество стрелок на графике.
Математически условие срабатывания стрелки можно записать так:
![]()
Экспорт данных для системной интеграции
Индекс гармонии разработан как автономная панель для дискреционной торговли, а также как модуль внутри более крупной архитектуры алгоритмической торговли. Для этого он экспортирует вычисленные результаты в раздел "Глобальные переменные" терминала MetaTrader 5, к которым могут обращаться другие советники, пользовательские индикаторы и скрипты, работающие на платформе одновременно.
Этот механизм экспорта дает несколько практических преимуществ. Во-первых, он позволяет другим автоматизированным модулям использовать индекс гармонии как фильтр тренда, требуя, например, чтобы HI был выше определенного порога перед исполнением сделки на пробой. Во-вторых, он позволяет координировать решения между несколькими графиками: советник, отслеживающий одну валютную пару, может реагировать на значения индекса гармонии по другой коррелирующей паре или с графика старшего таймфрейма. В-третьих, он поддерживает более сложные портфельные стратегии, в которых решения о распределении капитала, хеджировании или масштабировании риска принимаются на основе консенсусных трендов, выявленных HI по разным инструментам.
Обзор возможностей
Индекс гармонии нескольких таймфреймов – это гораздо больше, чем просто числовой показатель: это полнофункциональный торговый модуль, предназначенный как для дискреционных трейдеров, так и для полуавтоматических стратегий и полностью алгоритмических систем. В основе его разработки лежат ясность, гибкость и совместимость, чтобы трейдеры могли видеть рыночный консенсус и быстро действовать на его основе с уверенностью. Ниже приведен подробный разбор его ключевых возможностей.
Настраиваемые таймфреймы и веса
В основе индекса гармонии лежит возможность выбирать, какие таймфреймы включать в расчет консенсуса, и задавать их индивидуальные веса в соответствии с вашим стилем торговли. Младшим таймфреймам (M15, H1) можно придать больший вес, если активный внутридневной трейдер хочет отрабатывать внутридневные свинги. Напротив, свинг-трейдеры и позиционные трейдеры могут придавать больший вес H4 и D1, чтобы индекс отражал макротренд и игнорировал более мелкие контрдвижения. Благодаря отдельным булевым переключателям для включения каждого таймфрейма индекс гармонии адаптируется к разным стилям – от скальпинга до долгосрочного инвестирования – без навязывания жесткой структуры. Эта гибкость гарантирует, что расчет консенсуса останется осмысленным именно для вашего стиля работы с рынком.
//--- user inputs input bool Use_M15 = true; input bool Use_H1 = true; input bool Use_H4 = true; input bool Use_D1 = true; input double Weight_M15 = 1.0; input double Weight_H1 = 1.5; input double Weight_H4 = 2.0; input double Weight_D1 = 2.5; //--- example bias retrieval for selected TF double GetBias(string symbol, ENUM_TIMEFRAMES tf) { double close_now = iClose(symbol, tf, 0); double close_prev= iClose(symbol, tf, 1); if(close_now > close_prev) return 1; // bullish if(close_now < close_prev) return -1; // bearish return 0; // neutral } //--- example weighted calculation double weighted_sum = 0; double total_weight = 0; if(Use_M15) { weighted_sum += GetBias(_Symbol, PERIOD_M15) * Weight_M15; total_weight += Weight_M15; } if(Use_H1) { weighted_sum += GetBias(_Symbol, PERIOD_H1) * Weight_H1; total_weight += Weight_H1; } if(Use_H4) { weighted_sum += GetBias(_Symbol, PERIOD_H4) * Weight_H4; total_weight += Weight_H4; } if(Use_D1) { weighted_sum += GetBias(_Symbol, PERIOD_D1) * Weight_D1; total_weight += Weight_D1; } double harmony_index = (total_weight > 0) ? weighted_sum / total_weight : 0;
Отображение панели и гибкость интерфейса
На рабочем графике ясность не опция, а необходимость. Индекс гармонии решает эту задачу с помощью четкой, полностью встроенной панели на графике, где отображаются:
- последнее значение HI и его версия после сглаживания EMA;
- разбивка смещения по таймфреймам с указанием статуса каждого: бычий, медвежий или нейтральный;
- взвешенные значения вклада для каждого таймфрейма, что делает индивидуальное влияние сразу заметным.
//--- Creating a chart label for HI values string panelName = "HI_Dashboard"; if(!ObjectCreate(0, panelName, OBJ_LABEL, 0, 0, 0)) Print("Failed to create dashboard label"); ObjectSetInteger(0, panelName, OBJPROP_CORNER, CORNER_RIGHT_UPPER); ObjectSetInteger(0, panelName, OBJPROP_XDISTANCE, 10); ObjectSetInteger(0, panelName, OBJPROP_YDISTANCE, 20); string panelText = StringFormat("HI: %.2f\nEMA: %.2f", harmony_index, harmony_index_ema); ObjectSetString(0, panelName, OBJPROP_TEXT, panelText); ObjectSetInteger(0, panelName, OBJPROP_FONTSIZE, 12); ObjectSetInteger(0, panelName, OBJPROP_COLOR, clrWhite);
Панель может быть реализована как прямоугольная метка с цветовым оформлением, отражающим уровень уверенности в смещении, или – если возникают проблемы с совместимостью – советник автоматически переключается на резервный блок на основе метки, который стабильно работает во всех сборках платформы. Пользовательские параметры позволяют точно настраивать положение, размер, отступы, шрифты и цвета, благодаря чему панель органично встраивается в уже используемые вами шаблоны графика.
Цветовая индикация уровней уверенности
Индекс гармонии использует интуитивно понятный визуальный язык, который дополняет его числовые расчеты. Цветовые коды напрямую соответствуют консенсусной классификации, созданной в предыдущем разделе:
Ярко-красный → значимое медвежье состояние, HI ≤ -StrongThreshold
Светло-зеленый / светло-красный → умеренные состояния, между умеренным и сильным порогами
Желтый → слабый или нейтральный консенсус
color GetHIColor(double hi, double strongThr, double moderateThr) { if(hi >= strongThr) return clrLime; // strong bullish if(hi <= -strongThr) return clrRed; // strong bearish if(hi >= moderateThr) return clrLightGreen;// moderate bullish if(hi <= -moderateThr)return clrLightCoral;// moderate bearish return clrYellow; // neutral } ObjectSetInteger(0, panelName, OBJPROP_COLOR, GetHIColor(harmony_index, 0.7, 0.3));
Такое соответствие между цветом и состоянием позволяет с одного взгляда на панель понять согласованность рынка, не обрабатывая мысленно каждое число в напряженный момент принятия решения.
Пороговые алерты
Для уверенных действий на быстро меняющемся рынке индекс гармонии включает систему алертов, которая срабатывает при определенных значимых условиях:
- Пересечение значимого порога – когда HI переходит выше значимого бычьего уровня или ниже значимого медвежьего уровня из более слабого состояния.
- Смена смещения на старшем таймфрейме – когда смещение на H4 или D1 меняет знак, сигнализируя о возможной крупной смене тренда.
//--- once per bar check static datetime lastAlertTime = 0; if(Time[0] != lastAlertTime) { if(harmony_index >= strong_threshold && prev_hi < strong_threshold) Alert("Strong Bullish Threshold Crossed on ", _Symbol); if(harmony_index <= -strong_threshold && prev_hi > -strong_threshold) Alert("Strong Bearish Threshold Crossed on ", _Symbol); lastAlertTime = Time[0]; }
Алерты передаются через систему Alert() в MetaTrader 5, вывод в лог и при необходимости push-уведомления, поэтому вы получите их и при работе с графиками, и при удаленном мониторинге.
Автоматическое нанесение сигналов Buy/Sell на график
Для трейдеров, предпочитающих визуальные сигналы, индекс гармонии может при пересечениях значимых порогов автоматически наносить на график сигналы на покупку или продажу в виде стрелок. Стрелки Buy наносятся ниже минимума последнего закрытого бара, когда HI переходит в значимое бычье состояние. Стрелки Sell наносятся выше максимума последнего закрытого бара, когда HI переходит в значимое медвежье состояние. Благодаря встроенной защите от повторных сигналов на одном баре и ограничению максимального числа сигналов, предотвращающему загромождение графика, эти метки формируют чистую историческую картину пороговых событий, полезную как при торговле в реальном времени, так и при анализе после сессии.
void PlotSignal(bool buy) { string arrowName = "HI_Signal_" + IntegerToString(Time[0]); ObjectCreate(0, arrowName, OBJ_ARROW, 0, Time[0], buy ? Low[0] : High[0]); ObjectSetInteger(0, arrowName, OBJPROP_COLOR, buy ? clrLime : clrRed); ObjectSetInteger(0, arrowName, OBJPROP_ARROWCODE, buy ? 241 : 242); // Wingdings up/down arrow } if(harmony_index >= strong_threshold && prev_hi < strong_threshold) PlotSignal(true); if(harmony_index <= -strong_threshold && prev_hi > -strong_threshold) PlotSignal(false);
Сглаживание EMA для снижения шума
Наличие параметра HI_EMA_Period, который пользователь может настраивать, позволяет точно настроить баланс между чувствительностью сигналов и стабильностью. Низкие значения дают быструю реакцию на изменения смещения и подходят для скальпинга; высокие создают более плавные и размеренные изменения, лучше согласующиеся с долгосрочной структурой. Панель отображает как исходные, так и сглаженные значения HI, позволяя трейдеру сравнивать текущие настроения с отфильтрованным консенсусом, отражающим направление тренда.
//--- standard EMA smoothing formula double alpha = 2.0 / (HI_EMA_Period + 1); harmony_index_ema = harmony_index_ema + alpha * (harmony_index - harmony_index_ema);
Экспорт данных в глобальные переменные
Индекс гармонии разработан с прицелом на совместимость с другими системами. Все ключевые выходные данные, включая исходный HI, сглаженный HI, а также смещение по каждому таймфрейму, сохраняются в разделе "Глобальные переменные" терминала MetaTrader 5. Благодаря этому они сразу доступны:
- внешним советникам, которые используют индекс гармонии как фильтр тренда;
- модулям управления риском и сделками, которые корректируют размер позиции в соответствии с условиями консенсуса;
- межграфиковым и межпарным стратегиям, которые интегрируют данные по нескольким инструментам.
//--- store outputs as global vars GlobalVariableSet("HI_Raw_"+_Symbol, harmony_index); GlobalVariableSet("HI_EMA_"+_Symbol, harmony_index_ema); GlobalVariableSet("HI_Bias_M15_"+_Symbol, (double)GetBias(_Symbol, PERIOD_M15)); GlobalVariableSet("HI_Bias_H1_"+_Symbol, (double)GetBias(_Symbol, PERIOD_H1)); GlobalVariableSet("HI_Bias_H4_"+_Symbol, (double)GetBias(_Symbol, PERIOD_H4)); GlobalVariableSet("HI_Bias_D1_"+_Symbol, (double)GetBias(_Symbol, PERIOD_D1));
Предоставляя эти данные на уровне всей платформы, индекс гармонии выступает в качестве ключевого модуля, а не изолированного инструмента, что позволяет глубже интегрировать его в сложные торговые инфраструктуры.
Пояснение к структуре кода
Советник Multi-Timeframe Harmony Index построен по модульному принципу, с четким разделением между конфигурацией, основной логикой, отрисовкой интерфейса и вспомогательными утилитами. Такая организация делает советник легко адаптируемым и одновременно упрощает его дальнейшую поддержку. Структура построена по естественной логике торгового процесса:

Основа этой адаптивности – входные параметры, объявленные в верхней части скрипта. Для каждого поддерживаемого таймфрейма – M15, H1, H4 и D1 – предусмотрены и переключатель включения, и значение веса. Переключатель включения определяет, участвует ли данный таймфрейм в расчете индекса гармонии, а вес задает его относительный вклад. Рядом с этими настройками находятся пороги интерпретации, параметры сглаживания и переключатели, определяющие, будут ли включены алерты и сигналы на графике. Такая схема позволяет адаптировать советник и под скальперов, и под свинг-трейдеров, и под позиционных трейдеров.
input bool Use_M15 = true; input double Weight_M15 = 0.10; input bool Use_H1 = true; input double Weight_H1 = 0.20; input bool Use_H4 = true; input double Weight_H4 = 0.30; input bool Use_D1 = true; input double Weight_D1 = 0.40; input double StrongThreshold = 0.8; input double ModerateThreshold = 0.4; input int HI_EMA_Period = 8; input bool EnableAlerts = true; input bool EnableSignals = true;
При запуске советника функция OnInit() подготавливает его рабочую среду. Включенные таймфреймы и их параметры сохраняются в едином массиве структур (tfs[]), что упрощает их дальнейшую обработку в цикле во время вычислений. Затем советник строит свою панель, сначала пытаясь создать объект прямоугольной метки, а если это не удается, для совместимости переключаясь на резервный фон на основе текстовых меток. Затем последовательно создаются заголовки, значения HI и метки по каждому таймфрейму; при этом генерируются уникальные имена объектов, чтобы несколько экземпляров не мешали друг другу. Инициализация завершается установкой таймера для периодического выполнения и немедленным вызовом UpdateHarmony(), чтобы панель сразу показывала актуальные данные.
ArrayResize(tfs,4); tfs[0].tf = PERIOD_M15; tfs[0].enabled = Use_M15; tfs[0].weight = Weight_M15; tfs[0].name = "M15"; tfs[1].tf = PERIOD_H1; tfs[1].enabled = Use_H1; tfs[1].weight = Weight_H1; tfs[1].name = "H1"; tfs[2].tf = PERIOD_H4; tfs[2].enabled = Use_H4; tfs[2].weight = Weight_H4; tfs[2].name = "H4"; tfs[3].tf = PERIOD_D1; tfs[3].enabled = Use_D1; tfs[3].weight = Weight_D1; tfs[3].name = "D1"; bool rect_created = TryCreateRectangle(...); if(!rect_created) CreateBackgroundBlock(...); EventSetTimer(MathMax(1, UpdateIntervalSec)); UpdateHarmony();
После запуска циклическую работу советника обеспечивает таймер событий. На каждом интервале OnTimer() вызывает UpdateHarmony(), которая заново вычисляет значения смещения по каждому таймфрейму, рассчитывает взвешенный индекс гармонии, сглаживает его с помощью EMA, обновляет интерфейс, проверяет пороги, запускает алерты и записывает данные в глобальные переменные для интеграции с другими системами.
void OnTimer() { UpdateHarmony(); }

for(int i=0; i<4; i++) { if(!tfs[i].enabled || tfs[i].weight <= 0.0) { biases[i] = 0; continue; } int b = GetStructureBias(tfs[i].tf); biases[i] = b; sumWeighted += (double)b * tfs[i].weight; sumWeights += tfs[i].weight; } double hi = (sumWeights != 0.0) ? (sumWeighted / sumWeights) : 0.0; double alpha = 2.0 / (HI_EMA_Period + 1.0); if(hi_ema == 0.0) hi_ema = hi; else hi_ema = (hi - hi_ema) * alpha + hi_ema;
Логика определения смещения в GetStructureBias() опирается на структуру Price Action, а не на данные индикаторов. Она анализирует три последних закрытых бара таймфрейма и проверяет, образуют ли максимумы и минимумы последовательную восходящую лестницу для бычьего смещения или нисходящую лестницу для медвежьего смещения. Если лестница не обнаружена, функция переходит к сравнению цен закрытия, фиксируя сдвиги импульса, которые могут не формировать строгие структурные паттерны.
int GetStructureBias(ENUM_TIMEFRAMES tf) { MqlRates rates[]; int copied = CopyRates(_Symbol, tf, 1, 4, rates); if(copied >= 3) { if(rates[0].high > rates[1].high && rates[1].high > rates[2].high && rates[0].low > rates[1].low && rates[1].low > rates[2].low) return +1; if(rates[0].high < rates[1].high && rates[1].high < rates[2].high && rates[0].low < rates[1].low && rates[1].low < rates[2].low) return -1; } return 0; }
Отрисовка интерфейса вынесена во вспомогательные функции, которые отвечают за создание и стилизацию компонентов панели. Эта инкапсуляция гарантирует, что изменение внешнего вида панели не влияет на логику расчетов. Если предпочтительная прямоугольная метка не может быть отрисована из-за ограничений платформы, советник автоматически переключается на более простой резервный фон на основе текстовых меток, сохраняя работоспособность.
bool TryCreateRectangle(...); bool CreateBackgroundBlock(...); bool CreateLabel(...);
Подсистема алертов и нанесения сигналов сразу сообщает трейдерам о важных изменениях согласованности рынка. Алерты отправляются через систему Alert() терминала и, если это включено в MetaTrader 5, могут дополнительно передаваться как push-уведомления. Стрелки на графике точно отмечают места пересечения значимых бычьих или медвежьих порогов: они привязываются к максимуму или минимуму сигнального бара и слегка сдвигаются для лучшей читаемости.
void SendAlert(string txt) { Print("HarmonyIndexEA: ", txt); Alert(txt); SendNotification(txt); } void PlaceSignalArrow(bool isBuy, datetime barTime, double price) { ObjectCreate(0, name, OBJ_ARROW, 0, barTime, price); ObjectSetInteger(0, name, OBJPROP_ARROWCODE, isBuy ? 233 : 234); ObjectSetInteger(0, name, OBJPROP_COLOR, isBuy ? clrGreen : clrRed); }
При удалении советника OnDeinit() выполняет полную очистку рабочей области. Она удаляет все графические объекты, связанные с панелью и сигналами, останавливает таймер и удаляет все глобальные переменные, созданные текущим экземпляром советника. Это обеспечивает чистую рабочую среду и предотвращает помехи для будущего анализа или других советников.
void OnDeinit(const int reason) { // Delete chart objects, arrows, globals EventKillTimer(); }
Таким образом, проходя через конфигурацию, инициализацию, периодический пересчет, отрисовку интерфейса, алерты и очистку, индекс гармонии нескольких таймфреймов образует полноценную замкнутую систему анализа и уведомлений. Каждый блок кода решает свою задачу, но при этом связан с остальными, обеспечивая баланс между производительностью, гибкостью и надежностью, необходимый для профессиональной торговой среды.
Пользовательские параметры и настройка
Индекс гармонии нескольких таймфреймов разработан так, чтобы адаптироваться к разным стилям торговли, рыночным условиям и предпочтениям трейдера за счет набора гибко настраиваемых входных параметров. Эти входные параметры определяют каждый аспект работы советника: от выбора таймфреймов для анализа до визуального оформления панели, правил, определяющих значимые состояния смещения, и поведения алертов и сигналов на графике. Настройка начинается с переключателей включения таймфреймов и их весов. Каждый из поддерживаемых таймфреймов – M15, H1, H4 и D1 – можно включать или отключать по отдельности. При включении таймфрейм участвует в расчете индекса гармонии (HI), внося собственное значение смещения. Вес таймфрейма определяет его относительное влияние в итоговом значении HI. Трейдеры могут сдвигать баланс HI в сторону младших таймфреймов для более чувствительных сигналов или в сторону старших таймфреймов для большей структурной устойчивости. Такая детализация делает инструмент полезным как для скальперов, которые ищут тонкую локальную согласованность, так и для свинг-трейдеров, ожидающих крупных структурных разворотов.
Пороги играют решающую роль в интерпретации исходного значения индекса гармонии. StrongThreshold определяет точку, выше которой смещение можно считать выраженно бычьим, а ниже – выраженно медвежьим, в зависимости от знака HI. Отдельный параметр ModerateThreshold задает состояния среднего диапазона и помогает замечать формирующуюся согласованность до того, как она наберет полную силу. Оба порога работают вместе со сглаженными значениями HI по EMA и определяют цветовую индикацию панели и условия срабатывания алертов. Параметр EMA Period управляет сглаживанием. Короткий период позволяет индексу гармонии быстро реагировать на новые изменения смещения, тогда как более длинный дает более медленные и стабильные сигналы за счет снижения чувствительности к шуму младших таймфреймов. Это мощный инструмент адаптации советника к разным условиям волатильности: в боковом и рваном рынке более длинный период сглаживания отсеивает ложные сигналы, а на трендовом рынке короткие периоды позволяют раньше подключаться к движению.
Помимо анализа советник поддерживает опциональные алерты и нанесение сигналов на график. Включение алертов позволит советнику уведомлять пользователя при пересечении порогов или смене смещения на старших таймфреймах. При включении нанесения сигналов на графике будут появляться стрелки покупки и продажи в момент пересечения значимых порогов, создавая наглядную историю сигналов для последующего анализа. Стиль, расположение и количество стрелок можно точно настроить, чтобы избежать загромождения графика и сохранить ясность. Все параметры доступны на вкладке "Входные параметры" в MetaTrader при прикреплении советника к графику, а изменения вступают в силу сразу после повторной загрузки. Это позволяет трейдерам быстро экспериментировать с настройками и подгонять индекс гармонии под свою стратегию, не редактируя ни одной строчки кода.
| Имя параметра | Тип | По умолчанию | Описание |
|---|---|---|---|
| Use_M15 | bool | true | Включить анализ таймфрейма M15. |
| Weight_M15 | double | 0.10 | Относительный вес M15 в расчете HI. |
| Use_H1 | bool | true | Включить анализ таймфрейма H1. |
| Weight_H1 | double | 0.20 | Относительный вес H1 в расчете HI. |
| Use_H4 | bool | true | Включить анализ таймфрейма H4. |
| Weight_H4 | double | 0.3 | Относительный вес H4 в расчете HI. |
| Use_D1 | bool | true | Включить анализ таймфрейма D1. |
| Weight_D1 | double | 0.40 | Относительный вес D1 в расчете HI. |
| StrongThreshold | double | 0.8 | Величина смещения, необходимая для значимого состояния. |
| ModerateThreshold | double | 0.4 | Величина смещения, необходимая для умеренного состояния. |
| HI_EMA_Period | int | 8 | Период сглаживания EMA, применяемого к HI. |
| EnableAlerts | bool | true | Включить алерты по порогам и смене смещения на таймфрейме. |
| EnableSignals | bool | true | Включить автоматические стрелки на графике при пересечении значимого порога. |
| UpdateIntervalSec | int | 1 | Число секунд между обновлениями и пересчетами панели. |
| MaxSignals | int | 100 | Максимальное количество стрелок, наносимых на график, чтобы избежать загромождения. |
Благодаря сочетанию этого богатого набора параметров с адаптивной архитектурой советника индекс гармонии можно настроить под разные задачи. В одной конфигурации он может работать как инструмент согласования для скальпера, выдавая быстрые алерты при ранних изменениях смещения; в другой – настраиваться как медленный и стабильный фильтр тренда для позиционной торговли, не реагирующий чрезмерно на шум. Эта адаптивность – одно из ключевых достоинств советника и важная причина хорошо понимать каждый входной параметр в контексте ваших торговых целей.
Тестирование и результаты
Чтобы оценить эффективность индекса гармонии в практических торговых сценариях, мы провели тесты как на демо-счете в реальном времени, так и в тестере стратегий на исторических данных.
Демо-тест на живом графике – индекс Volatility 75 (1s)
Первый тест проводился на демо-графике индекса Volatility 75 (1s) в реальном времени. За панелью индекса гармонии наблюдали в реальном времени, по мере появления согласованности между отслеживаемыми таймфреймами формировалось несколько сигналов.
Панель отображала:
- текущее значение HI и его значение после сглаживания EMA;
- значения смещения для каждого отслеживаемого таймфрейма (M15, H1, H4, D1);
- соответствующие весовые коэффициенты;
- итоговый взвешенный вклад в индекс гармонии.
Во время этого теста система зафиксировала несколько эпизодов согласованного медвежьего смещения. Стрелки Sell появлялись именно в тот момент, когда индекс гармонии пересекал отрицательный значимый порог, что подтверждало корректность сигнальной логики.

На рисунке выше показан демо-тест на живом графике индекса Volatility 75 (1s): несколько сигналов медвежьего смещения и вывод панели индекса гармонии.
Тестирование на исторических данных – GBPUSD, таймфрейм H1
Дополнительно было проведено тестирование на исторических данных в тестере стратегий для GBPUSD на таймфрейме H1, чтобы проверить инструмент в контексте рынка Forex. Результаты тестирования на исторических данных были положительными: система стабильно выявляла согласованность смещения между несколькими таймфреймами, а значения индекса гармонии после EMA-сглаживания оставались плавными. Эти результаты дополнительно подчеркивают высокий потенциал индекса гармонии как надежного компонента анализа Price Action на нескольких таймфреймах.

На рисунке выше показано тестирование на исторических данных GBPUSD (H1): панель индекса гармонии отслеживает состояния смещения и генерирует сигналы Buy/Sell.
И демо-тест, и тестирование на исторических данных показали точную классификацию смещения и своевременное нанесение сигналов на график. В разных рыночных условиях – на синтетическом индексе Volatility 75 и на основной валютной паре GBPUSD – индекс гармонии стабильно измерял направленную согласованность и давал полезную информацию как для дискреционных, так и для алгоритмических торговых систем.
Заключение
Индекс гармонии нескольких таймфреймов дает трейдерам Price Action удобный способ количественно оценивать и визуализировать согласованность трендов между таймфреймами. Сводя структурное смещение нескольких таймфреймов к единой взвешенной метрике и повышая наглядность за счет интуитивной цветовой индикации, пороговых состояний и EMA-сглаживания, советник превращает субъективную оценку в объективную и практически применимую информацию. Вместо разрозненных оценок по разным графикам трейдер теперь может видеть на единой панели, согласованы ли краткосрочные, среднесрочные и долгосрочные структуры или они конфликтуют. Такая ясность позволяет быстрее принимать решения, точнее фильтровать сделки и лучше интегрировать инструмент в автоматизированные стратегии. Благодаря гибкой архитектуре индекс гармонии можно адаптировать к широкому спектру торговых стилей – от высокочастотного скальпинга до позиционной торговли, просто меняя таймфреймы, веса, пороги и параметры сглаживания.
В контексте серии "Разработка инструментария для анализа Price Action" этот модуль выделяется своими аналитическими возможностями и совместимостью с другими системами. Экспорт значений индекса гармонии в "Глобальные переменные" означает, что он может служить основным фильтром тренда в более крупных торговых системах, поддерживая как алгоритмические, так и дискреционные сценарии работы. Модульная архитектура, надежная логика интерфейса и аккуратная очистка ресурсов при деинициализации делают его стабильным и удобным в работе на реальных счетах. В конечном счете сила индекса гармонии нескольких таймфреймов заключается в том, что он объединяет точность структурированного анализа Price Action с эффективностью автоматизации в реальном времени. Будь то самостоятельный инструмент поддержки принятия решений или часть более широкой торговой архитектуры, он позволяет свести сложную оценку по нескольким таймфреймам к одному понятному сигналу и действовать на его основе с уверенностью, подкрепленной количественно выраженным консенсусом.
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/20097
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
Данная статья написана пользователем сайта и отражает его личную точку зрения. Компания MetaQuotes Ltd не несет ответственности за достоверность представленной информации, а также за возможные последствия использования описанных решений, стратегий или рекомендаций.
Инжиниринг признаков для машинного обучения (Часть 1): дробное дифференцирование — стационарность без потери памяти
Переосмысливаем классические стратегии (Часть 16): Стратегия пробоя двойных полос Боллинджера
Архитектура машинного обучения для MetaTrader 5 (Часть 13): Реализация расчета размера позиции в MQL5
Опубликуйте код статьи в MQL5 Algo Forge за 10 минут: пошаговый гайд
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Как следует настраивать входы для скальпинга?
Для скальпинга старайтесь использовать более низкие таймфреймы, например M1 - M5, и устанавливайте более высокие веса на этих низких фреймах.