Rejoignez notre page de fans
KCI Standard: A Pure Kinematic Computing Engine for Market Singularity Detection - indicateur pour MetaTrader 5
- Vues:
- 112
- Note:
- Publié:
-
Besoin d'un robot ou d'un indicateur basé sur ce code ? Commandez-le sur Freelance Aller sur Freelance
Résumé
L'indice de compression cinétique (KCI) est un oscillateur personnalisé conçu pour détecter l'épuisement du marché et les événements de compression localisés. En calculant ses indicateurs cinématiques en interne plutôt que de s'appuyer sur des indicateurs standard externes, le KCI réduit la charge système et simplifie la gestion des tampons pour l'intégration dans un Expert Advisor (EA). Cet article détaille les fondements mathématiques, l'architecture du système, le mappage des tampons et fournit des guides d'intégration pratiques destinés aux développeurs souhaitant implémenter cet outil dans MetaTrader 5.Introduction
Dans le trading algorithmique, réduire la dépendance vis-à-vis de multiples indicateurs externes permet de rationaliser l’architecture d’un Expert Advisor. L’appel de plusieurs indicateurs iCustom ou standard (tels que les moyennes mobiles et les écarts-types) peut parfois compliquer la gestion des tampons et les processus d’initialisation.
Le KCI est conçu pour traiter nativement les données de cours et de volume au sein d’un seul fichier. En identifiant une décélération rapide de l’évolution des cours associée à des baisses de volume, il vise à repérer les événements d’épuisement — c’est-à-dire les points où un retour à la moyenne local est statistiquement probable.
Énoncé du problème
Les principaux objectifs de l’architecture du KCI sont les suivants :
-
Réduire la dépendance vis-à-vis des handles : calculer les moyennes mobiles et les écarts de manière native au sein de la boucle de l’indicateur afin de minimiser l’utilisation de handles externes.
-
Fournir des mesures reproductibles : mettre à la disposition des EA des mesures mathématiques claires et transparentes (vitesse, écart et dispersion).
-
Garantir la sécurité asynchrone : créer des tampons de signaux qui ne sont validés que sur les barres fermées, protégeant ainsi l’EA contre le repeint intra-barre et les retards asynchrones des données de ticks.
Théorie et fondements mathématiques
Le KCI repose sur quatre indicateurs fondamentaux. Afin de garantir une reproductibilité totale, les formules de base sont définies comme suit (où $n$ correspond à la période de base) :

Figure :
1. **Velocity Quotient (VQ)** – Measures the rate of price change. VQ_i=\frac{Close_i-Close_{i-n}}{n} Where: - \(Close_i\) = current closing price - \(Close_{i-n}\) = closing price \(n\) bars ago - \(n\) = lookback period 2. **Kinetic Displacement (KD)** – Measures the deviation of the current price from its local mean. KD_i=Close_i-SMA(Close,n)_i Where: - \(SMA(Close,n)_i\) = Simple Moving Average of the closing price over the last \(n\) periods. 3. **Energy Dispersion (ED)** – Acts as a dynamic volatility proxy, calculated as the standard deviation of the closing price. ED_i=\sqrt{\frac{\sum_{j=0}^{n-1}\left(Close_{i-j}-SMA_i\right)^2}{n}} Where: - \(SMA_i\) = local Simple Moving Average at bar \(i\). 4. **Phase Velocity (PV)** – Tracks the immediate momentum of the Velocity Quotient. PV_i=VQ_i-VQ_{i-1} Where: - \(VQ_i\) = current Velocity Quotient - \(VQ_{i-1}\) = previous Velocity Quotient // Or 1. Velocity Quotient (VQ) VQ(i) = (Close(i) - Close(i-n)) / n 2. Kinetic Displacement (KD) KD(i) = Close(i) - SMA(Close, n) 3. Energy Dispersion (ED) n-1 ----- \ ED(i) = sqrt( / (Close(i-j) - SMA(i))² / n ) ----- j=0 4. Phase Velocity (PV) PV(i) = VQ(i) - VQ(i-1)
Normalisation par score Z : ces quatre indicateurs ayant des échelles différentes (par exemple, des niveaux de prix par opposition à des taux purs), ils sont normalisés à l’aide d’un score Z glissant sur une période ZScorePeriod définie avant d’être additionnés pour former le Raw_KCI.
Architecture du système et carte de tampon unifiée
Afin d’éviter les erreurs courantes de « dépassement de limites d’index » ou de non-correspondance de tampon lors des appels à CopyBuffer(), le KCI respecte strictement la carte de tampon unifiée suivante. Ce mappage est cohérent entre les déclarations #property, SetIndexBuffer() et l’intégration EA.| Index du tampon | Nom du tampon | Type | Objectif |
| 0 | KCI_Main | INDICATOR_DATA | Ligne d’oscillateur à polarisation visuelle |
| 1 | KCI_Couleur | INDICATOR_COLOR_INDEX | Mappage dynamique des couleurs pour la ligne principale |
| 2 | Signal_Achat | INDICATOR_DATA | Signal d'achat (1,0 = Achat, 0,0 = Neutre) |
| 3 | Signal_Vente | DONNÉES_INDICATEUR | Signal de vente (1,0 = Vente, 0,0 = Neutre) |
| 4 | VQ_interne | INDICATOR_CALCULATIONS | Tableau des quotients de vélocité |
| 5 | Internal_KD | CALCULS_D'INDICATEURS | Tableau des déplacements cinétiques |
| 6 | Internal_ED | INDICATEURS_CALCULS | Tableau de dispersion d'énergie (utilisé pour SL/TP) |
| 7 | Internal_PV | CALCULS_DES_INDICATEURS | Tableau des vitesses de phase |
| 8 | Raw_KCI | CALCULS_DES_INDICATEURS | Somme des matrices normalisées |
Explication du code : intégration d'un EA et gestion des risques
Lors de l'appel de KCI depuis un EA, le code doit gérer le cycle de vie du descripteur de l'indicateur, vérifier que la fonction CopyBuffer a bien récupéré les données, et normaliser tous les calculs de prix pour le Stop Loss (SL) et le Take Profit (TP) en fonction du nombre de décimales du symbole.
Voici le modèle d'intégration d'EA corrigé et robuste :
#include <Trade\Trade.mqh> CTrade trade; int handle_kci; datetime last_bar_time = 0; double buf_buy[], buf_sell[], buf_ed[]; int OnInit() { // Initialisation du descripteur KCI handle_kci = iCustom(_Symbol, _Period, "KCI", 50, 2.0, 14); if(handle_kci == INVALID_HANDLE) { Print("Failed to create KCI handle!"); return(INIT_FAILED); } ArraySetAsSeries(buf_buy, true); ArraySetAsSeries(buf_sell, true); ArraySetAsSeries(buf_ed, true); return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { if(handle_kci != INVALID_HANDLE) IndicatorRelease(handle_kci); } void OnTick() { datetime current_time = (datetime)SeriesInfoInteger(_Symbol, _Period, SERIES_LASTBAR_DATE); if(current_time == last_bar_time) return; // Filtre de base : une seule position par symbole if(PositionsTotal() > 0) { for(int i = PositionsTotal() - 1; i >= 0; i--) { if(PositionGetSymbol(i) == _Symbol) return; } } // Récupération des données (tampon 2 = Achat, tampon 3 = Vente, tampon 6 = ED) if(CopyBuffer(handle_kci, 2, 1, 1, buf_buy) <= 0) return; if(CopyBuffer(handle_kci, 3, 1, 1, buf_sell) <= 0) return; if(CopyBuffer(handle_kci, 6, 1, 1, buf_ed) <= 0) return; // Verrouiller l'heure UNIQUEMENT une fois que les données ont été copiées avec succès last_bar_time = current_time; double dynamic_volatility = buf_ed[0]; if(dynamic_volatility == 0) return; double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT); int digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS); double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); // Logique d'exécution avec un stop-loss basé sur la volatilité dynamique normalisée if(buf_buy[0] == 1.0) { double sl = NormalizeDouble(ask - (dynamic_volatility * 1.5), digits); double tp = NormalizeDouble(ask + (dynamic_volatility * 3.0), digits); trade.Buy(0.01, _Symbol, ask, sl, tp, "KCI Buy"); } if(buf_sell[0] == 1.0) { double sl = NormalizeDouble(bid + (dynamic_volatility * 1.5), digits); double tp = NormalizeDouble(bid - (dynamic_volatility * 3.0), digits); trade.Sell(0.01, _Symbol, bid, sl, tp, "KCI Sell"); } }
Performances et limites
Afin de garantir des attentes réalistes, les développeurs doivent tenir compte des limitations structurelles suivantes :
-
Dépendance vis-à-vis du volume de ticks : pour le Forex et les CFD, « tick_volume » représente la fréquence des variations de prix, et non la liquidité réelle. L’indicateur de compression volumétrique peut se comporter différemment sur les bourses centralisées (actions/contrats à terme) où le volume réel est disponible.
-
Vulnérabilité au retour à la moyenne : en tant qu’oscillateur borné, le KCI vise à détecter les signaux d’épuisement. Sur un marché fortement tendanciel, il peut générer des signaux de retournement prématurés successifs. Il doit être associé à un filtre de tendance sur une période plus longue (par exemple, une MME 200).
-
Bruit sur les petites barres de temps : l’utilisation de cet indicateur sur des barres M1 ou M5 expose la logique à du bruit de microstructure. La normalisation par score Z nécessite une distribution stable, que l’on retrouve plus facilement sur des barres M15 et supérieures.
Conclusion
L’indice de compression cinétique (KCI) offre une alternative transparente et calculée en natif à l’empilement de plusieurs indicateurs standard. En affichant à la fois des signaux directionnels sur les barres clôturées et un indicateur dynamique de volatilité (dispersion d’énergie) via une carte tampon unifiée, il constitue un composant structurel fiable pour les Expert Advisors MQL5.Implémentation sur le graphique : (KCI Custom)
Traduit de l’anglais par MetaQuotes Ltd.
Code original : https://www.mql5.com/en/code/74580
EA KCI Embeded Sniper
Le KCI Embedded Sniper est une solution de trading algorithmique conçue pour des entrées de marché à haute précision lors de renversements de tendance. Contrairement aux Expert Advisors classiques qui reposent sur des indicateurs externes (souvent affectés par la désynchronisation des threads et la latence), cet EA intègre un moteur KCI (Kinetic Compression Index) entièrement intégré. En intégrant l’ensemble du cadre mathématique du KCI — calcul des quotients de vélocité, du déplacement cinétique, de la dispersion d’énergie et de la vélocité de phase — directement dans la logique centrale de l’Expert Advisor, nous avons éliminé tout « décalage asynchrone ». Il en résulte un moteur de trading ultra-rapide qui valide l’épuisement du marché (Singularité) et les extrêmes de momentum (Williams %R) avec une précision de l’ordre de la microseconde, fonctionnant exclusivement sur des barres clôturées pour garantir une performance sans « repaint ».
RSI Histogram
This is an MQL5 custom indicator for MetaTrader 5 called RSI Histogram. It plots the standard RSI line in a separate window, plus a color-coded histogram version of the same RSI values that changes color based on momentum:
GoldLondonBreakout
Locks in the Asian session range on XAUUSD, then places an OCO breakout pair (BuyStop/SellStop) for the London open, with ATR-based stops and risk-percent position sizing. No indicators, no discretion — the range is measured, not guessed.
Market Structure SMC: Swings, BOS/CHoCH, Order Blocks, FVG, QML
Indicateur SMC/ICT de structure de marché pour MT5 : plus hauts et plus bas de swing, BOS (continuation) et CHoCH (renversement) confirmés à la clôture, blocs d'ordres, écarts de juste valeur et niveaux QML (Quasimodo). Chaque fonctionnalité est activable/désactivable, avec une sensibilité aux swings et des couleurs réglables. Fonctionne sur n'importe quel symbole et n'importe quelle période.
