Guarda come scaricare robot di trading gratuitamente
Ci trovi su Facebook!
Unisciti alla nostra fan page
Script interessante?
Pubblica il link!
lasciare che altri lo valutino
Ti è piaciuto lo script? Provalo nel Terminale MetaTrader 5
Indicatori

KCI Directional Matrix - indicatore per 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.
| Italian English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Türkçe
Visualizzazioni:
30
Valutazioni:
(2)
Pubblicato:
Freelance MQL5 Hai bisogno di un robot o indicatore basato su questo codice? Ordinalo su Freelance Vai a Freelance

La matrice direzionale KCI (KCI-DX)

è uno strumento analitico avanzato, ispirato alla fisica, che estrae la cinematica di mercato misurando la lunghezza del percorso dei prezzi e l’energia di volatilità. A differenza degli strumenti di momentum convenzionali, il KCI-DX impiega una normalizzazione dinamica dello Z-Score combinata con una funzione di attivazione sigmoide. Ciò garantisce che il risultato sia perfettamente compreso tra 0 e 100, fornendo un'identificazione iper-reattiva della forza del trend e della tendenza direzionale senza distorsioni dovute agli estremi storici. KCI Directional Matrix (KCI-DX) è un indicatore di analisi direzionale quantitativa progettato per misurare l’efficienza del mercato, la pressione direzionale e l’espansione del trend attraverso un framework proprietario denominato Kinetic Compression Index.

Caratteristiche principali:

  • Estrazione direzionale cinematica: calcola la vera energia di mercato utilizzando la varianza della lunghezza del percorso.
  • Scala sigmoide dinamica: normalizzazione adattiva che impedisce l’appiattimento dell’indicatore.
  • Matrice a tre linee: composta da KCI principale (forza del trend/compressione), +KDI (cinematica rialzista) e -KDI (cinematica ribassista).

A differenza degli oscillatori di momentum convenzionali, il KCI-DX scompone il movimento di mercato in tre dimensioni indipendenti:

  • KCI principale – Misura l’efficienza direzionale complessiva e la forza di espansione del trend.
  • +KDI (Indice Direzionale Cinetico Rialzista) – Quantifica il predominio direzionale rialzista.
  • -KDI (Indice Direzionale Cinematico Ribassista) – Quantifica il predominio direzionale ribassista.

L’indicatore combina:

  • Estrazione direzionale cinematica
  • Analisi dell’efficienza del percorso
  • Valutazione del movimento ponderata in base all’energia
  • Normalizzazione dinamica dello Z-Score
  • Ridimensionamento adattivo sigmoide

Il risultato è una matrice direzionale stabile compresa tra 0 e 100 in grado di identificare:

  • Espansione della tendenza
  • Dominanza direzionale
  • Fasi di compressione
  • Accelerazione del momentum
  • Anomalie di volatilità
  • Transizioni del regime di mercato

KCI-DX può essere utilizzato come strumento di trading autonomo o come componente di feature engineering per Expert Advisor, sistemi di machine learning, scanner di mercato, griglie adattive, gestione dinamica degli stop e motori decisionali a livello di portafoglio.

Parametri di input:


KCI-DX: GUIDA VISIVA DI AVVIO RAPIDO

  • L'interfaccia visiva (ciò che si vede)
Quando si aggiunge KCI-DX al grafico, questo appare in una finestra separata sotto il grafico dei prezzi principale. È costituito da tre linee distinte e due zone critiche.
Elemento visivo Colore e stile Cosa significa
Linea principale KCI Oro (continua) Forza del trend e compressione. Indica la quantità di energia cinematica presente nel mercato, indipendentemente dalla direzione.
Linea +KDI Blu (tratteggiata) Energia rialzista. La forza del movimento al rialzo dei prezzi.
Linea -KDI Rossa (tratteggiata) Energia ribassista. L'intensità del movimento al ribasso dei prezzi.
Livello 80,0 Grigio (punteggiata) Zona estrema / di esaurimento. Il trend ha raggiunto la massima intensità.
Livello 20,0 Grigio (tratteggiato) Compressione / Zona laterale. Il mercato sta accumulando energia.

  • Visualizzazione delle fasi di mercato (le zone)

Osservate la posizione della linea dorata (KCI Main) per comprendere immediatamente il contesto di mercato:

Figura 1


    • La zona di stallo (da 0 a 20):
  • Aspetto visivo: la linea dorata è piatta e si trova nella parte inferiore del grafico.
  • Azione: NON OPERARE. Il mercato si muove lateralmente, intrappolato in una stretta compressione.

    • La Zona d’Azione (da 20 a 80):
  • Aspetto visivo: la linea dorata supera il livello 20 e sale ripidamente.
  • Azione: CERCARE PUNTI DI ENTRATA. Nasce un nuovo trend. Seguire le linee tratteggiate blu o rosse per orientarsi.


    • La Zona di Pericolo (da 80 a 100):
  • Immagine: la linea dorata raggiunge il tetto massimo (sopra 80).
  • Azione: PREPARATI ALL’USCITA. Il trend attuale è estremamente sovraesteso ed è imminente un’inversione o una correzione profonda.

Configurazioni di trading visive (passo dopo passo)

    • SCENARIO A: Il breakout rialzista (ACQUISTO)
  • Controlla la linea dorata: deve attraversare verso l’ALTO e superare il livello 20.
  • Controlla le linee tratteggiate: la linea blu (+KDI) deve incrociare AL DI SOPRA della linea rossa (-KDI).
  • Esecuzione: Aprire una posizione di ACQUISTO.

    • SCENARIO B: Il breakdown ribassista (VENDITA)
  • Controlla la linea dorata: deve incrociare verso l’ALTO e superare il livello 20. (Sì, sale anche nei trend al ribasso, perché l’energia al ribasso sta aumentando!)
  • Controlla le linee tratteggiate: la linea rossa (-KDI) deve incrociare SOPRA la linea blu (+KDI).
  • Esecuzione: Aprire una posizione di VENDITA.


    • SCENARIO C: La presa di profitto (USCITA)
  • Controlla la linea dorata: sei già in una posizione aperta e la linea dorata tocca o supera il livello 80.
  • Esecuzione: sposta lo Stop Loss al punto di pareggio, attiva un Trailing Stop stretto oppure chiudi la posizione per assicurarti i profitti.

Figura 2


CONSIGLIO DA ESPERTO: Non fare mai trading se le linee blu e rossa sono intrecciate sotto il livello 20. Aspetta una chiara separazione e un breakout della linea dorata!


KCI Directional Matrix Logic for Expert Advisors (EAs)

Se questo indicatore viene utilizzato all’interno di un EA, è possibile applicare le seguenti regole di trading:

    • Logica di ingresso in acquisto (rialzista):
  • KDI_Plus supera KDI_Minus (cross over).
  • Filtro: KCI_Main deve essere al di sopra del livello 20 (a conferma che il mercato è fuori dalla zona di compressione/laterale).

    • Logica di ingresso per la vendita (ribassista):
  • KDI Minus supera KDI Plus (Crossover).
  • Filtro: KCI_Main deve essere al di sopra del livello 20.

    • Logica di uscita / Take Profit / Trailing:
  • Se KCI_Main raggiunge il livello 80 (trend estremo), l'EA dovrebbe attivare un trailing stop stretto o effettuare un take profit parziale, poiché l'energia del trend è al massimo e sussiste il rischio di una correzione.


    • Logica di non negoziazione (mondo laterale):
  • Se KCI_Main è inferiore a 20, all'EA è vietato aprire nuove posizioni poiché il mercato si trova in una zona di compressione (bassa energia).


Esempio di codice EA che utilizza iCustom Call

Questo è il metodo più ottimale e consigliato. L’EA richiamerà il file KCI-Directional_X.ex5 situato nella cartella Indicators.

Frammento di codice:

//+------------------------------------------------------------------+
//|                                                 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()
  {
   // Creare l'handle dell'indicatore personalizzato.
   // Assicurarsi che il file "KCI-Directional_X.ex5" sia presente
   // nella directory 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);
     }

   // Configurare i buffer degli indicatori come serie temporali
   // (Indice 0 = barra corrente).
   ArraySetAsSeries(KCI_Main, true);
   ArraySetAsSeries(KDI_Plus, true);
   ArraySetAsSeries(KDI_Minus, true);

   return(INIT_SUCCEEDED);
  }

void OnTick()
  {
   // Recupera i valori più recenti degli indicatori
   // (la barra corrente e quella chiusa più di recente).
   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;

   // ------------------------------------------------------------
   // Logica di trading KCI-DX
   // Tutte le decisioni di trading si basano sull'ultima candela completata
   // (Indice 1) per evitare i segnali provenienti dalla candela ancora in formazione.
   // ------------------------------------------------------------

   // Verifica se il mercato presenta una tendenza.
   bool isTrending = KCI_Main[1] > 20.0;

   // Rileva un crossover direzionale rialzista.
   bool buySignal  = (KDI_Plus[1] > KDI_Minus[1]) &&
                     (KDI_Plus[2] <= KDI_Minus[2]);

   // Rileva un crossover direzionale ribassista.
   bool sellSignal = (KDI_Minus[1] > KDI_Plus[1]) &&
                     (KDI_Minus[2] <= KDI_Plus[2]);

   // Rileva un'espansione estrema del trend.
   bool isExtreme  = KCI_Main[1] >= 80.0;

   // Esempio di logica di esecuzione delle operazioni.
   if(isTrending && buySignal)
     {
      Print("KCI-DX BUY signal detected.");

      // Inserisci l'esecuzione del tuo ordine di ACQUISTO
      // (OrderSend o CTrade::Buy) qui.
     }
   else if(isTrending && sellSignal)
     {
      Print("KCI-DX SELL signal detected.");

      // Inserisci l'esecuzione del tuo ordine di VENDITA
      // (OrderSend o CTrade::Sell) qui.
     }

   // Gestione delle operazioni facoltativa in caso di forti tendenze di mercato.
   if(isExtreme)
     {
      Print("Extreme trend detected. Consider activating a trailing stop or managing existing positions.");
     }
  }


Esempio di codice EA con calcoli incorporati (incorporati direttamente) (incorporati nel motore KCI-N Matrix dell’EA)

Questo metodo incorpora l’algoritmo matematico direttamente nell’EA senza richiedere file di indicatori esterni. Poiché il calcolo richiede dati storici per lo Z-Score, utilizziamo una funzione speciale all’interno dell’EA per elaborare l’array dei prezzi.

Frammento di codice:

//+------------------------------------------------------------------+
//|                                              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;

// Struttura utilizzata per restituire tutti e tre i valori KCI-DX
// da un unico calcolo.
struct KCI_Result
  {
   double main;
   double plus;
   double minus;
  };

// Calcolare lo Z-score interno utilizzato per
// normalizzazione dinamica.
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);
  }

// Calcola i valori KCI-DX per un dato
// barra storica (shift).
KCI_Result CalculateKCI(int shift)
  {
   KCI_Result res;
   res.main = 0.0;
   res.plus = 0.0;
   res.minus = 0.0;

   // Recuperare un numero sufficiente di prezzi di chiusura storici
   // sia per il periodo di riferimento che per la finestra dello Z-score.
   int required_bars = InpZScorePeriod + InpBasePeriod;

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

   if(CopyClose(_Symbol, _Period, shift, required_bars, close) < required_bars)
      return res;   // Dati storici insufficienti.

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

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

   // ------------------------------------------------------------
   // Fase 1:
   // Estrazione cinematica direzionale
   // ------------------------------------------------------------
   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;
     }

   // ------------------------------------------------------------
   // Fase 2:
   // Normalizzazione sigmoide dinamica
   // ------------------------------------------------------------
   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()
  {
   // Calcolare i valori KCI-DX per il
   // le due candele completate più di recente.
   KCI_Result kci_current = CalculateKCI(1);
   KCI_Result kci_prev    = CalculateKCI(2);

   // ------------------------------------------------------------
   // Esempio di logica di trading
   // Rileva un crossover direzionale rialzista.
   // ------------------------------------------------------------
   bool buySignal =
      (kci_current.plus > kci_current.minus) &&
      (kci_prev.plus <= kci_prev.minus);

   // Eseguire la logica di trading solo quando il mercato
   // si trova in una condizione di andamento valida.
   if(kci_current.main > 20.0 && buySignal)
     {
      Print("Embedded KCI-DX detected a BUY signal.");

      // Inserisci l'esecuzione del tuo ordine di ACQUISTO
      // (OrderSend o CTrade::Buy) qui.
     }
  }


Raccomandazioni per ottenere i migliori risultati

Prima di compilare e fare trading, tieni a mente queste best practice per ottenere il massimo dalla KCI-Directional Matrix:

  • Flessibilità degli asset: i parametri predefiniti (BasePeriod=9, ZScorePeriod=30) sono altamente reattivi e offrono prestazioni eccezionali sulle principali coppie di valute. Tuttavia, se lo si applica a strumenti altamente volatili come l’oro (XAUUSD), le criptovalute (BTC/ETH) o gli indici, si consiglia di aumentare leggermente il valore di ZScorePeriod (ad esempio, a 40 o 50) per filtrare il rumore eccessivo.

  • Ottimizzazione algoritmica: per gli sviluppatori di EA che realizzano sistemi complessi o multi-simbolo, si raccomanda vivamente di utilizzare il metodo di calcolo integrato fornito sopra. Mantiene l’utilizzo della CPU incredibilmente ridotto e garantisce che il vostro Expert Advisor rimanga completamente autonomo senza bisogno di richiamare indicatori esterni.

  • Abbinamento per la convergenza: KCI-DX è un motore dedicato alla cinematica e alla volatilità. Pur fornendo un’eccellente tendenza direzionale in modalità autonoma, diventa davvero formidabile se combinato con i vostri filtri strutturali preferiti (come le zone di supporto/resistenza) o con i rilevatori di anomalie di volume per convalidare l’entrata finale.

Conclusione

Nota dell’autore / Conclusione: Grazie per aver esplorato la KCI-Directional Matrix. Questo codice è stato progettato con l’obiettivo preciso di fornire alla comunità MQL5 uno strumento analitico leggero, matematicamente rigoroso e altamente adattabile. Che siate trader manuali alla ricerca di punti precisi di esaurimento del momentum o sviluppatori che integrano dati leggibili da macchine in un Expert Advisor, spero che questo indicatore costituisca una solida base per i vostri progetti.

Se ritenete che questo codice sia utile per i vostri sistemi di trading, non esitate a lasciare una recensione, a condividere le vostre modifiche creative o a porre una domanda nella sezione di discussione qui sotto. Continuiamo insieme a spingerci oltre i confini del trading algoritmico!

Buon lavoro di programmazione e buon trading in sicurezza, — Ritz


Tradotto dall’inglese da MetaQuotes Ltd.
Codice originale https://www.mql5.com/en/code/74839

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

Il massimo dell’algoritmo a griglia e dello slancio cinetico. Benvenuti nel KCI Native Matrix Engine: un colosso algoritmico spietato e guidato dalla matematica, sviluppato in modo nativo per MetaTrader 5. Progettato per gli ambienti di trading ad alta frequenza (HFT), questo EA elimina le librerie standard appesantite e opera direttamente a livello di instradamento del server.

Trend Execution Planner - Regime and Risk Panel Trend Execution Planner - Regime and Risk Panel

Free open-source MT5 read-only chart utility that scores current trend conditions and builds broker-normalized long and short risk plans. It uses moving-average direction and slope, ADX, Efficiency Ratio, ATR, spread, account currency and symbol specifications. It never opens, modifies or closes trades.

Risk Based Position Size Calculator Risk Based Position Size Calculator

Draggable Entry, Stop-Loss and Take-Profit lines with a live on-chart panel that calculates the exact lot size for a chosen account risk. No manual math, no guessing — drag the lines, read the size.

Swing High Low - Non-Repainting Pivots with Push/Email Alerts Swing High Low - Non-Repainting Pivots with Push/Email Alerts

Marks non-repainting swing highs and lows using configurable LeftBars / RightBars pivots. Sends push and email alerts on each new confirmed swing.