Guarda come scaricare robot di trading gratuitamente
Ci trovi su Telegram!
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:
56
Valutazioni:
(3)
Pubblicato:
Aggiornato:
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.

MT5 Order Preflight - Read-Only Validation MT5 Order Preflight - Read-Only Validation

Checks a hypothetical MT5 market or pending order against current symbol, volume, tick-size, stop-distance and filling rules without sending a trade.

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.