Смотри, как бесплатно скачать роботов
Ищи нас в Twitter!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Индикаторы

KCI Directional Matrix - индикатор для MetaTrader 5

Syamsurizal Dimjati
Syamsurizal Dimjati
Hello traders, I design and develop high-quality indicators and Expert Advisors (EAs) for MT5 (since 2023), built to help you achieve more consistent and reliable trading results.
| Russian English 中文 Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
Просмотров:
24
Рейтинг:
(2)
Опубликован:
MQL5 Фриланс Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Матрица направления KCI (KCI-DX)

представляет собой передовой аналитический инструмент, основанный на принципах физики, который извлекает кинематику рынка путем измерения длины ценового пути и энергии волатильности. В отличие от традиционных инструментов, основанных на импульсе, KCI-DX использует динамическую нормализацию по Z-Score в сочетании с сигмоидной функцией активации. Это гарантирует, что выходные значения безупречно ограничены диапазоном от 0 до 100, обеспечивая сверхчувствительную идентификацию силы тренда и направленного смещения без искажений, вызванных историческими экстремумами. KCI Directional Matrix (KCI-DX) — это индикатор количественного направленного анализа, разработанный для измерения эффективности рынка, направленного давления и расширения тренда с помощью запатентованной структуры индекса кинетической компрессии (Kinetic Compression Index).

Ключевые особенности:

  • Кинематическая экстракция направления: рассчитывает истинную энергию рынка с использованием дисперсии длины траектории.
  • Динамическое сигмоидное масштабирование: адаптивная нормализация, предотвращающая «зависание» индикатора.
  • Трехлинейная матрица: состоит из основного KCI (сила тренда/сжатия), +KDI (бычья кинематика) и -KDI (медвежья кинематика).

В отличие от традиционных осцилляторов импульса, KCI-DX разлагает движение рынка на три независимых измерения:

  • Основной KCI — измеряет общую эффективность направления движения и силу расширения тренда.
  • +KDI (Бычий кинетический направленный индекс) — количественно оценивает доминирование бычьего направления.
  • -KDI (Медвежий кинетический направленный индекс) — количественно оценивает доминирование медвежого направления.

Индикатор сочетает в себе:

  • Кинематический анализ направления движения
  • Анализ эффективности траектории
  • Оценку движения с учетом энергии
  • Динамическую нормализацию по Z-скору
  • Сигмоидное адаптивное масштабирование

В результате получается стабильная матрица направлений с значениями от 0 до 100, способная определять:

  • Расширение тренда
  • Доминирование направления
  • Фазы сжатия
  • Ускорение импульса
  • Аномалии волатильности
  • Переходы между рыночными режимами

KCI-DX можно использовать как самостоятельный торговый инструмент или как компонент для разработки моделей в рамках советников, систем машинного обучения, сканеров рынка, адаптивных сеток, динамического управления стопами и механизмов принятия решений на уровне портфеля.

Входные параметры:


KCI-DX: ВИЗУАЛЬНОЕ КРАТКОЕ РУКОВОДСТВО

  • Визуальный интерфейс (то, что вы видите)
Когда вы добавляете KCI-DX на график, он отображается в отдельном окне под основным ценовым графиком. Он состоит из трёх отдельных линий и двух критических зон.
Визуальный элемент Цвет и стиль Что это означает
Основная линия KCI Золотой (сплошная) Сила тренда и сжатие. Показывает, сколько кинематической энергии присутствует на рынке, независимо от направления.
Линия +KDI Синяя (пунктирная) Бычья энергия. Сила восходящего ценового движения.
Линия -KDI Красная (пунктирная) Медвежья энергия. Сила нисходящего движения цены.
Уровень 80,0 Серый (точечная линия) Зона экстремума / исчерпания. Тенденция достигла максимальной силы.
Уровень 20,0 Серый (пунктирная линия) Зона сжатия / бокового движения. Рынок накапливает энергию.

  • Визуализация фаз рынка (зоны)

Обратите внимание на положение «Золотой линии» (KCI Main), чтобы мгновенно понять рыночную обстановку:

Рис. 1


    • Зона «сна» (от 0 до 20):
  • Визуально: «Золотая линия» плоская и находится в нижней части графика.
  • Действие: НЕ ТОРГУЙТЕ. Рынок движется в боковом тренде, зажатый в узком диапазоне.

    • Зона активности (от 20 до 80):
  • Визуально: Золотая линия пробивает уровень 20 и резко растет.
  • Действие: ИЩИТЕ ТОЧКИ ВХОДА. Рождается новый тренд. Следуйте за синей или красной пунктирной линией, чтобы определить направление.


    • Зона опасности (от 80 до 100):
  • Визуально: Золотая линия достигает верхней границы (выше 80).
  • Действие: ГОТОВЬТЕСЬ К ВЫХОДУ. Текущий тренд чрезвычайно перекуплен, и в ближайшее время ожидается разворот или глубокая коррекция.

Визуальные торговые установки (пошагово)

    • СЦЕНАРИЙ А: Бычий прорыв (ПОКУПКА)
  • Проверьте «золотую» линию: она должна пересекатьли нию вверх и пробивать уровень 20.
  • Проверьте пунктирные линии: синяя линия (+KDI) должна пересечь красную линию (-KDI) ВВЕРХ.
  • Исполнение: Откройте позицию на ПОКУПКУ.

    • СЦЕНАРИЙ Б: Медвежий прорыв (ПРОДАЖА)
  • Проверьте «золотую» линию: она должна пересекать линию вверх и пробивать уровень 20. (Да, она идет вверх даже при нисходящем тренде, потому что нисходящая энергия усиливается!)
  • Проверьте пунктирные линии: красная линия (-KDI) должна пересечь синюю линию (+KDI) СВЕРХУ.
  • Действие: Откройте позицию на ПРОДАЖУ.


    • СЦЕНАРИЙ В: Фиксация прибыли (ВЫХОД)
  • Проверьте «Золотую линию»: вы уже находитесь в сделке, и «Золотая линия » касается уровня 80 или пересекает его.
  • Действие: Переместите стоп-лосс на уровень безубыточности, активируйте узкий трейлинг-стоп или закройте позицию, чтобы зафиксировать прибыль.

Рис. 2


СОВЕТ ОТ ПРОФЕССИОНАЛА: Никогда не открывайте сделку, если синяя и красная линии переплетены ниже уровня 20. Дождитесь их четкого разделения и прорыва «Золотой линии»!


KCI Directional Matrix Logic for Expert Advisors (EAs)

Если этот индикатор используется в рамках советника, можно применять следующие торговые правила:

    • Логика входа на покупку (бычий тренд):
  • KDI_Plus пересекает KDI_Minus сверху (кроссовер).
  • Фильтр: KCI_Main должна находиться выше уровня 20 (подтверждая, что рынок вышел из зоны сжатия/бокового движения).

    • Логика входа в сделку на продажу (медвежий тренд):
  • KDI Minus пересекает KDI Plus вверх (пересечение).
  • Фильтр: KCI_Main должен быть выше уровня 20.

    • Логика выхода / фиксации прибыли / трейлинг-стопа:
  • Если KCI_Main достигает уровня 80 (экстремальный тренд), советник должен активировать узкий трейлинг-стоп или выполнить частичный тейк-профит, поскольку энергия тренда находится на максимуме и существует вероятность коррекции.


    • Логика отказа от торговли (боковое движение):
  • Если KCI_Main ниже 20, советнику запрещено открывать новые позиции, так как рынок находится в зоне сжатия (низкая энергия).


Пример кода советника с использованием iCustom Call

Это наиболее оптимальный и рекомендуемый метод. Советник будет вызывать файл KCI-Directional_X.ex5, расположенный в папке «Indicators».

Фрагмент кода:

//+------------------------------------------------------------------+
//|                                                 EA_KCI_iCustom.mq5 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, Ritz"
#property version   "1.00"

int kci_handle;
double KCI_Main[], KDI_Plus[], KDI_Minus[];

int OnInit()
  {
   // Создать дескриптор пользовательского индикатора.
   // Убедитесь, что файл «KCI-Directional_X.ex5» находится в нужном месте
   // в каталоге MQL5/Indicators.
   kci_handle = iCustom(_Symbol, _Period, "KCI-Directional_X", 9, 30, 1.5);

   if(kci_handle == INVALID_HANDLE)
     {
      Print("Failed to load the KCI-DX indicator.");
      return(INIT_FAILED);
     }

   // Настроить буферы индикаторов как временные ряды
   // (Индекс 0 = текущий бар).
   ArraySetAsSeries(KCI_Main, true);
   ArraySetAsSeries(KDI_Plus, true);
   ArraySetAsSeries(KDI_Minus, true);

   return(INIT_SUCCEEDED);
  }

void OnTick()
  {
   // Получить последние значения индикаторов
   // (текущий бар и последний закрытый бар).
   if(CopyBuffer(kci_handle, 0, 0, 2, KCI_Main) <= 0)
      return;

   if(CopyBuffer(kci_handle, 1, 0, 2, KDI_Plus) <= 0)
      return;

   if(CopyBuffer(kci_handle, 2, 0, 2, KDI_Minus) <= 0)
      return;

   // ------------------------------------------------------------
   // Торговая логика KCI-DX
   // Все торговые решения принимаются на основе последней завершившейся свечи
   // (Индекс 1) — чтобы исключить сигналы от свечи, которая ещё формируется.
   // ------------------------------------------------------------

   // Определить, находится ли рынок в трендовом состоянии.
   bool isTrending = KCI_Main[1] > 20.0;

   // Определить пересечение линий, указывающее на бычий тренд.
   bool buySignal  = (KDI_Plus[1] > KDI_Minus[1]) &&
                     (KDI_Plus[2] <= KDI_Minus[2]);

   // Обнаружить пересечение линий, указывающее на медвежью тенденцию.
   bool sellSignal = (KDI_Minus[1] > KDI_Plus[1]) &&
                     (KDI_Minus[2] <= KDI_Plus[2]);

   // Обнаружить резкое усиление тренда.
   bool isExtreme  = KCI_Main[1] >= 80.0;

   // Пример логики выполнения торговой операции.
   if(isTrending && buySignal)
     {
      Print("KCI-DX BUY signal detected.");

      // Разместите ордер на покупку
      // (OrderSend или CTrade::Buy) здесь.
     }
   else if(isTrending && sellSignal)
     {
      Print("KCI-DX SELL signal detected.");

      // Разместите ордер на ПРОДАЖУ
      // (OrderSend или CTrade::Sell) здесь.
     }

   // Дополнительные инструменты управления сделками при выраженных рыночных трендах.
   if(isExtreme)
     {
      Print("Extreme trend detected. Consider activating a trailing stop or managing existing positions.");
     }
  }


Пример кода советника со встроенными вычислениями (прямое встраивание) (встроенные в движок KCI-N Matrix советника)

Этот метод позволяет встроить ваш математический алгоритм непосредственно в советник без использования внешних файлов индикаторов. Поскольку для расчета Z-Score требуются исторические данные, мы используем специальную функцию внутри советника для обработки массива цен.

Фрагмент кода:

//+------------------------------------------------------------------+
//|                                              EA_KCI_Embedded.mq5 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, Ritz"
#property version   "1.00"

input int    InpBasePeriod   = 9;
input int    InpZScorePeriod = 30;
input double InpSensitivity  = 1.5;

// Структура, используемая для возврата всех трёх значений KCI-DX
// на основе одного расчёта.
struct KCI_Result
  {
   double main;
   double plus;
   double minus;
  };

// Вычислить внутренний Z-показатель, используемый для
// динамическая нормализация.
double EmbeddedZScore(double &data_array[], int period)
  {
   if(period < 2)
      return 0.0;

   double sum = 0.0;
   double sum_sq = 0.0;

   for(int i = 0; i < period; i++)
     {
      sum += data_array[i];
      sum_sq += data_array[i] * data_array[i];
     }

   double mean = sum / period;
   double variance = (sum_sq / period) - (mean * mean);

   if(variance <= 1 e-10)
      return 0.0;

   return (data_array[0] - mean) / MathSqrt(variance);
  }

// Вычислить значения KCI-DX для указанного
// историческая полоса (сдвиг).
KCI_Result CalculateKCI(int shift)
  {
   KCI_Result res;
   res.main = 0.0;
   res.plus = 0.0;
   res.minus = 0.0;

   // Получить достаточный объем исторических данных о ценах закрытия
   // как для базового периода, так и для окна Z-Score.
   int required_bars = InpZScorePeriod + InpBasePeriod;

   double close[];
   ArraySetAsSeries(close, true);

   if(CopyClose(_Symbol, _Period, shift, required_bars, close) < required_bars)
      return res;   // Недостаточно исторических данных.

   double raw_plus[];
   double raw_minus[];
   double raw_trend[];

   ArrayResize(raw_plus, InpZScorePeriod);
   ArrayResize(raw_minus, InpZScorePeriod);
   ArrayResize(raw_trend, InpZScorePeriod);

   // ------------------------------------------------------------
   // Этап 1:
   // Кинематическое определение направления
   // ------------------------------------------------------------
   for(int i = 0; i < InpZScorePeriod; i++)
     {
      double path_len = 0.000001;
      double net_up = 0.0;
      double net_dn = 0.0;
      double mean_p = 0.0;

      for(int j = 0; j < InpBasePeriod; j++)
        {
         double diff = close[i + j] - close[i + j + 1];

         path_len += MathAbs(diff);

         if(diff > 0)
            net_up += diff;
         else
            net_dn -= diff;

         mean_p += close[i + j];
        }

      mean_p /= InpBasePeriod;

      double var_p = 0.0;

      for(int j = 0; j < InpBasePeriod; j++)
         var_p += MathPow(close[i + j] - mean_p, 2);

      double energy = MathSqrt(var_p / InpBasePeriod);

      raw_plus[i]  = (net_up / path_len) * energy;
      raw_minus[i] = (net_dn / path_len) * energy;
      raw_trend[i] = (MathAbs(net_up - net_dn) / path_len) * energy;
     }

   // ------------------------------------------------------------
   // Этап 2:
   // Динамическая сигмоидная нормализация
   // ------------------------------------------------------------
   double z_plus  = EmbeddedZScore(raw_plus, InpZScorePeriod);
   double z_minus = EmbeddedZScore(raw_minus, InpZScorePeriod);
   double z_trend = EmbeddedZScore(raw_trend, InpZScorePeriod);

   res.plus  = 100.0 / (1.0 + MathExp(-InpSensitivity * z_plus));
   res.minus = 100.0 / (1.0 + MathExp(-InpSensitivity * z_minus));
   res.main  = 100.0 / (1.0 + MathExp(-InpSensitivity * z_trend));

   return res;
  }

void OnTick()
  {
   // Рассчитать значения KCI-DX для
   // две последние завершенные свечи.
   KCI_Result kci_current = CalculateKCI(1);
   KCI_Result kci_prev    = CalculateKCI(2);

   // ------------------------------------------------------------
   // Пример торговой логики
   // Определить пересечение линий, указывающее на бычий тренд.
   // ------------------------------------------------------------
   bool buySignal =
      (kci_current.plus > kci_current.minus) &&
      (kci_prev.plus <= kci_prev.minus);

   // Запускать торговую логику только тогда, когда рынок
   // находится в состоянии, соответствующем тренду.
   if(kci_current.main > 20.0 && buySignal)
     {
      Print("Embedded KCI-DX detected a BUY signal.");

      // Разместите ордер на покупку
      // (OrderSend или CTrade::Buy) здесь.
     }
  }


Рекомендации для достижения наилучших результатов

Прежде чем компилировать и приступать к торговле, учтите следующие рекомендации, чтобы получить максимальную отдачу от KCI-Directional Matrix:

  • Гибкость в выборе активов: Параметры по умолчанию (BasePeriod=9, ZScorePeriod=30) отличаются высокой отзывчивостью и демонстрируют исключительно хорошие результаты на основных валютных парах. Однако, если вы применяете этот советник к высоковолатильным инструментам, таким как золото (XAUUSD), криптовалюты (BTC/ETH) или индексы, рассмотрите возможность небольшого увеличения значения ZScorePeriod (например, до 40 или 50), чтобы отфильтровать избыточный шум.

  • Алгоритмическая оптимизация: Разработчикам советников, создающим сложные или мультисимвольные системы, настоятельно рекомендуется использовать описанный выше метод встроенных вычислений. Он позволяет сохранить чрезвычайно низкую нагрузку на процессор и гарантирует, что ваш советник останется полностью автономным, без необходимости вызова внешних индикаторов.

  • Сочетание для достижения синергии: KCI-DX — это специализированный движок, основанный на кинематике и волатильности. Хотя он и обеспечивает превосходный самостоятельный направленный уклон, он становится по-настоящему мощным в сочетании с вашими любимыми структурными фильтрами (такими как зоны поддержки/сопротивления) или детекторами аномалий объёма для подтверждения окончательного входа в рынок.

Заключительное слово

Примечание автора / Заключение: Благодарю вас за изучение KCI-Directional Matrix. Этот код был разработан с четкой ориентацией на предоставление сообществу MQL5 лёгкого, математически строгого и высокоадаптивного аналитического инструмента. Независимо от того, являетесь ли вы трейдером, торгующим вручную и ищущим точные точки исчерпания импульса, или разработчиком, интегрирующим машиночитаемые данные в советник, я надеюсь, что этот индикатор станет надёжной основой для ваших проектов.

Если вы считаете этот код полезным для своих торговых систем, пожалуйста, не стесняйтесь оставлять отзывы, делиться своими творческими модификациями или задавать вопросы в разделе обсуждения ниже. Давайте вместе продолжим расширять границы алгоритмической торговли!

Удачного программирования и успешной торговли, — Ritz


Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/74839

EA KCI N-Matrix engine EA KCI N-Matrix engine

Вершина алгоритмической сетки и кинетического импульса. Добро пожаловать в KCI Native Matrix Engine — безжалостный, основанный на математических алгоритмах гигант, разработанный специально для MetaTrader 5. Созданный для условий высокочастотной торговли (HFT), этот советник отказывается от громоздких стандартных библиотек и работает непосредственно на уровне маршрутизации сервера.

Envelope SAR Envelope SAR

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

Daily Zone Recovery EA mt5 for GOLD Daily Zone Recovery EA mt5 for GOLD

Daily Zone Recovery is a multi-strategy trading expert advisor for MetaTrader 5 that operates based on the previous trading day’s high and low levels. The expert advisor monitors price behavior near daily extremes, uses three independent entry strategies, and can manage positions using a fixed-volume grid.

YURAZ_MCCH YURAZ_MCCH

Индикатор рассчитывает % роста или падения относительно CLOSE, написан с применением ООП, и легко интегрируется в любой советник или иной индикатор.