é uma ferramenta analítica avançada, inspirada na física, que extrai a cinemática do mercado medindo o comprimento da trajetória dos preços e a energia da volatilidade. Diferentemente das ferramentas convencionais de momentum, o KCI-DX emprega uma normalização dinâmica do Z-Score combinada com uma função de ativação sigmoide. Isso garante que o resultado fique perfeitamente restrito entre 0 e 100, proporcionando uma identificação hiper-responsiva da força da tendência e do viés direcional, sem distorção causada por extremos históricos. A Matriz Direcional KCI (KCI-DX) é um indicador de análise direcional quantitativa projetado para medir a eficiência do mercado, a pressão direcional e a expansão da tendência por meio de uma estrutura proprietária do Índice de Compressão Cinética.
Principais recursos:
Ao contrário dos osciladores de momentum convencionais, o KCI-DX decompõe o movimento do mercado em três dimensões independentes:
O indicador combina:
O resultado é uma matriz direcional estável de 0 a 100, capaz de identificar:
O KCI-DX pode ser utilizado como uma ferramenta de negociação independente ou como um componente de engenharia de recursos para Expert Advisors, sistemas de aprendizado de máquina, scanners de mercado, grades adaptativas, gerenciamento dinâmico de stop e mecanismos de decisão no nível da carteira.
Parâmetros de entrada:

KCI-DX: GUIA VISUAL DE INÍCIO RÁPIDO
| Elemento visual | Cor e estilo | O que significa |
|---|---|---|
| Linha principal do KCI | Dourada (contínua) | Força da tendência e compressão. Mostra quanta energia cinemática existe no mercado, independentemente da direção. |
| Linha +KDI | Azul (tracejada) | Energia de alta. A força do movimento de alta dos preços. |
| Linha -KDI | Vermelha (tracejada) | Energia de baixa. A intensidade do movimento de queda dos preços. |
| Nível 80,0 | Cinza (pontilhada) | Zona de extremo / esgotamento. A tendência está em sua capacidade máxima. |
| Nível 20,0 | Cinza (pontilhada) | Zona de compressão / lateralidade. O mercado está acumulando energia. |
Observe onde a Linha Dourada (KCI Principal) está posicionada para compreender instantaneamente o ambiente de mercado:
Fig. 1

Configurações visuais de negociação (passo a passo)
Fig. 2

DICA PROFISSIONAL: Nunca opere se as linhas Azul e Vermelha estiverem entrelaçadas abaixo do nível 20. Aguarde uma separação clara e um rompimento da Linha Dourada!
KCI Directional Matrix Logic for Expert Advisors (EAs)
Se este indicador for usado em um EA, as seguintes regras de negociação podem ser aplicadas:
Este é o método mais ideal e recomendado. O EA chamará o arquivo KCI-Directional_X.ex5 localizado na pasta Indicadores.
Trecho de código:
//+------------------------------------------------------------------+ //| 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() { // Criar o identificador do indicador personalizado. // Verifique se o arquivo “KCI-Directional_X.ex5” está localizado // no diretório 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); } // Configurar os buffers dos indicadores como séries temporais // (Índice 0 = barra atual). ArraySetAsSeries(KCI_Main, true); ArraySetAsSeries(KDI_Plus, true); ArraySetAsSeries(KDI_Minus, true); return(INIT_SUCCEEDED); } void OnTick() { // Recuperar os valores mais recentes dos indicadores // (a barra atual e a barra fechada mais recentemente). 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; // ------------------------------------------------------------ // Lógica de negociação KCI-DX // Todas as decisões de negociação são baseadas na última vela fechada // (Índice 1) para evitar sinais da vela que ainda está se formando. // ------------------------------------------------------------ // Detectar se o mercado está em uma condição de tendência. bool isTrending = KCI_Main[1] > 20.0; // Detectar um cruzamento direcional de alta. bool buySignal = (KDI_Plus[1] > KDI_Minus[1]) && (KDI_Plus[2] <= KDI_Minus[2]); // Detectar um cruzamento direcional de baixa. bool sellSignal = (KDI_Minus[1] > KDI_Plus[1]) && (KDI_Minus[2] <= KDI_Plus[2]); // Detectar uma expansão extrema da tendência. bool isExtreme = KCI_Main[1] >= 80.0; // Exemplo de lógica de execução de negociação. if(isTrending && buySignal) { Print("KCI-DX BUY signal detected."); // Execute sua ordem de COMPRA // (OrderSend ou CTrade::Buy) aqui. } else if(isTrending && sellSignal) { Print("KCI-DX SELL signal detected."); // Execute sua ordem de VENDA // (OrderSend ou CTrade::Sell) aqui. } // Gestão opcional de operações para tendências de mercado marcantes. if(isExtreme) { Print("Extreme trend detected. Consider activating a trailing stop or managing existing positions."); } }
Esse método incorpora seu algoritmo matemático diretamente no EA, sem a necessidade de arquivos de indicadores externos. Como o cálculo requer dados históricos para o Z-Score, usamos uma função especial dentro do EA para processar a matriz de preços.
Trecho de código:
//+------------------------------------------------------------------+ //| 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; // Estrutura usada para retornar os três valores do KCI-DX // a partir de um único cálculo. struct KCI_Result { double main; double plus; double minus; }; // Calcular o Z-Score interno utilizado para // normalização dinâmica. 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); } // Calcular os valores do KCI-DX para um // barra histórica (shift). KCI_Result CalculateKCI(int shift) { KCI_Result res; res.main = 0.0; res.plus = 0.0; res.minus = 0.0; // Recuperar preços de fechamento históricos suficientes // tanto para o Período Base quanto para a janela do Z-Score. int required_bars = InpZScorePeriod + InpBasePeriod; double close[]; ArraySetAsSeries(close, true); if(CopyClose(_Symbol, _Period, shift, required_bars, close) < required_bars) return res; // Dados históricos insuficientes. double raw_plus[]; double raw_minus[]; double raw_trend[]; ArrayResize(raw_plus, InpZScorePeriod); ArrayResize(raw_minus, InpZScorePeriod); ArrayResize(raw_trend, InpZScorePeriod); // ------------------------------------------------------------ // Fase 1: // Extração direcional cinemática // ------------------------------------------------------------ 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: // Normalização sigmoide dinâmica // ------------------------------------------------------------ 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() { // Calcular os valores do KCI-DX para o // as duas velas fechadas mais recentes. KCI_Result kci_current = CalculateKCI(1); KCI_Result kci_prev = CalculateKCI(2); // ------------------------------------------------------------ // Exemplo de lógica de negociação // Detectar um cruzamento direcional de alta. // ------------------------------------------------------------ bool buySignal = (kci_current.plus > kci_current.minus) && (kci_prev.plus <= kci_prev.minus); // Executar a lógica de negociação somente quando o mercado // está em uma condição válida de tendência. if(kci_current.main > 20.0 && buySignal) { Print("Embedded KCI-DX detected a BUY signal."); // Execute sua ordem de COMPRA // (OrderSend ou CTrade::Buy) aqui. } }
Antes de compilar e operar, tenha em mente estas práticas recomendadas para aproveitar ao máximo a Matriz Direcional KCI:
Flexibilidade de ativos: Os parâmetros padrão (BasePeriod=9, ZScorePeriod=30) são altamente responsivos e apresentam desempenho excepcional nos principais pares de moedas. No entanto, se você estiver aplicando isso a instrumentos altamente voláteis, como o ouro (XAUUSD), criptomoedas (BTC/ETH) ou índices, considere aumentar ligeiramente o ZScorePeriod (por exemplo, para 40 ou 50) para filtrar ruídos excessivos.
Otimização algorítmica: Para desenvolvedores de EAs que criam sistemas complexos ou com múltiplos símbolos, é altamente recomendável utilizar o método de cálculo embutido fornecido acima. Ele mantém o uso da CPU incrivelmente baixo e garante que seu Expert Advisor permaneça totalmente autônomo, sem a necessidade de chamadas a indicadores externos.
Combinação para Confluência: O KCI-DX é um mecanismo dedicado à cinemática e à volatilidade. Embora ofereça excelente tendência direcional por si só, ele se torna verdadeiramente formidável quando combinado com seus filtros estruturais favoritos (como zonas de suporte/resistência) ou detectores de anomalias de volume para validar a entrada final.
Nota do autor / Conclusão: Obrigado por explorar a Matriz Direcional KCI. Esta base de código foi projetada com foco estrito em fornecer à comunidade MQL5 uma ferramenta analítica leve, matematicamente rigorosa e altamente adaptável. Seja você um trader manual em busca de pontos precisos de esgotamento do momentum ou um desenvolvedor integrando dados legíveis por máquina a um Expert Advisor, espero que este indicador sirva como uma base robusta para seus projetos.
Se você achar este código valioso para seus sistemas de negociação, sinta-se à vontade para deixar uma avaliação, compartilhar suas modificações criativas ou fazer uma pergunta na seção de discussão abaixo. Vamos continuar expandindo os limites da negociação algorítmica juntos!
Boa programação e negocie com segurança, — Ritz
Traduzido do inglês pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/en/code/74839
EA KCI N-Matrix engine
O ápice da grade algorítmica e do impulso cinético. Bem-vindo ao KCI Native Matrix Engine — um gigante algorítmico implacável, orientado matematicamente e desenvolvido nativamente para o MetaTrader 5. Projetado para ambientes de negociação de alta frequência (HFT), este EA elimina as bibliotecas padrão pesadas e opera diretamente no nível de roteamento do servidor.
Elder Force Index (faithful to the book definition)
Índice de Força, conforme definido por Alexander Elder: Volume x (Fechamento de hoje - Fechamento de ontem), e a série resultante é então suavizada. Dois comprimentos, 2 e 13, ambos de seus livros.
Double Enevlopes (Historical Gauged)
Uma ferramenta e um sistema de gestão de serviços de babá :D
KCI Volatility Distance
A Distância de Volatilidade KCI é um algoritmo avançado e adaptativo, meticulosamente projetado para mapear o momentum do mercado e a direção da tendência com precisão absoluta. Utilizando um cálculo proprietário baseado em matriz, essa ferramenta filtra dinamicamente o ruído do mercado e oferece uma perspectiva estritamente quantitativa sobre a força direcional. Construída com um núcleo de Programação Orientada a Objetos (OOP) altamente otimizado, ela foi projetada tanto para proporcionar clareza visual nas negociações quanto para uma integração perfeita com Expert Advisors ou módulos de Aprendizado de Máquina, garantindo um desempenho ultraleve da CPU em diversos ativos.