私たちのファンページに参加してください
- ビュー:
- 12
- 評価:
- パブリッシュ済み:
-
このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動
KCI-Directional Matrix(KCI-DX)
は、価格の移動距離とボラティリティエネルギーを測定することで市場の運動学を抽出する、物理学に着想を得た高度な分析ツールです。 従来のモメンタム指標とは異なり、KCI-DXはシグモイド活性化関数と組み合わせた動的なZスコア正規化を採用しています。これにより、出力値が0から100の間に確実に収まるよう保証され、過去の極端な値による歪みなく、極めて反応性の高いトレンドの強さや方向性のバイアスを特定することが可能になります。KCI Directional Matrix(KCI-DX) は、独自の「キネティック・コンプレッション・インデックス(Kinetic Compression Index)」フレームワークを通じて、市場の効率性、方向性圧力、トレンドの拡大を測定するように設計された定量的な方向性分析指標です。
主な特徴:
- キネマティック方向性抽出: 経路長の分散を用いて、真の市場エネルギーを算出します。
- 動的シグモイドスケーリング: 指標のフラット化を防ぐ適応型正規化。
- 3ライン・マトリックス: メインKCI(トレンド/圧縮強度)、+KDI(強気キネマティクス)、-KDI(弱気キネマティクス)で構成されます。
従来のモメンタムオシレーターとは異なり、KCI-DXは市場の動きを3つの独立した次元に分解します:
- KCIメイン– 全体的な方向性の効率性とトレンド拡大の強度を測定します。
- +KDI(強気キネティック方向性指数)– 強気方向性の優位性を定量化します。
- -KDI(弱気キネティック方向性指数)– 弱気方向性の優位性を定量化します。
この指標は以下の要素を組み合わせています:
- 運動学的方向性抽出
- パス効率分析
- エネルギー加重変動スコア
- 動的Zスコア正規化
- シグモイド適応スケーリング
その結果、以下を特定できる安定した0~100の方向性行列が得られます:
- トレンドの拡大
- 方向性の優位性
- 圧縮フェーズ
- モメンタムの加速
- ボラティリティの異常
- 市場レジームの遷移
KCI-DXは、単独の取引ツールとして、あるいはエキスパートアドバイザー、機械学習システム、市場スキャナー、適応型グリッド、動的ストップ管理、ポートフォリオレベルの意思決定エンジン向けのフィーチャーエンジニアリングコンポーネントとして利用可能です。
入力パラメータ:

KCI-DX:ビジュアル・クイックスタートガイド
- ビジュアルインターフェース(画面表示)
| ビジュアル要素 | 色とスタイル | 意味 |
|---|---|---|
| KCIメインライン | 金色(実線) | トレンドの強さと圧縮。 方向性にかかわらず、市場にどれだけの運動エネルギーが存在するかを示します。 |
| +KDIライン | 青(破線) | 強気エネルギー。 価格の上昇トレンドの強さを示します。 |
| -KDIライン | 赤(破線) | 弱気エネルギー。 価格の下落の勢い。 |
| レベル 80.0 | 灰色(点線) | 極限/枯渇ゾーン。 トレンドが最大値に達している状態。 |
| レベル 20.0 | 灰色(点線) | 圧縮/横ばいゾーン。 市場はエネルギーを蓄積している。 |
- 市場フェーズ(ゾーン)の可視化
ゴールドライン(KCIメイン) の位置を確認すれば、市場環境を即座に把握できます:
図1

- スリープゾーン(0~20):
- 見た目: ゴールドラインは横ばいで、底値圏で推移している。
- 対応: 取引を行わないでください。 市場は横ばいで、狭いレンジに閉じ込められています。
- アクションゾーン(20~80):
- 見た目: ゴールドラインが20レベルを上抜けし、急上昇している。
- アクション: エントリーポイントを探してください。 新たなトレンドが生まれています。方向性については、青または赤の破線を参考にしてください。
- 危険ゾーン(80~100):
- 視覚的特徴: ゴールドラインが天井(80以上)に到達する。
- アクション: 決済の準備をする。 現在のトレンドは極端に過熱しており、反転または大幅な調整が差し迫っている。
トレードセットアップの視覚的解説(ステップバイステップ)
- シナリオA:強気のブレイクアウト(買い)
- ゴールドラインを確認: 上向きに クロスし、20 の水準を上抜けしている必要があります。
- 破線の確認: ブルーライン(+KDI) がレッドライン(-KDI) を上回っている 必要があります。
- 執行: 買い ポジションを建てる。
- シナリオB:弱気ブレイクダウン(売り)
- ゴールドラインを確認: 上向きに 交差し、20 レベルを上抜けしている必要があります。(はい、下降トレンド時でも上向きになります。これは下降の勢いが増しているからです!)
- 破線の確認: 赤線(-KDI) が青線(+KDI) を上回って 交差している必要があります。
- 実行: 売り ポジションを建てる。
- シナリオC:利益確定(決済)
- ゴールドラインの確認: すでにポジションを保有しており、ゴールドライン が80 レベルに接触するか、それを上回っていること。
- 実行: ストップロスをブレークイーブンに移動させるか、タイトなトレーリングストップを設定するか、利益を確定するためにポジションを決済します。
図2

プロのヒント: 青線と赤線が 20レベル以下で絡み合っている場合は、決して取引を行わないでください。両線が明確に分離し、ゴールドラインがブレイクアウトするのを待ちましょう!
KCI Directional Matrix Logic for Expert Advisors (EAs)
このインジケーターをEA内で使用する場合は、以下の取引ルールを適用できます:
- 買いエントリーロジック(強気):
- KDI_PlusがKDI_Minusを上抜ける(クロスオーバー)。
- フィルター:KCI_Mainが20レベルを上回っていること(市場が圧縮/横ばいゾーンから抜け出したことを確認)。
- 売りエントリーロジック(弱気):
- KDI_MinusがKDI_Plusを上抜ける(クロスオーバー)。
- フィルター:KCI_Mainが20レベルを上回っていること。
- 決済/利益確定/トレーリングロジック:
- KCI_Mainがレベル80に達した場合(極端なトレンド)、トレンドの勢いが最大に達しており、調整の可能性が高いため、EAはタイトなトレーリングストップを発動するか、部分的な利益確定を行うべきです。
- ノー・トレード・ロジック(横ばい):
- KCI_Mainが20を下回っている場合、市場は圧縮ゾーン(エネルギーが低い状態)にあるため、EAは新規ポジションの開設を禁止されます。
iCustom Callを使用したEAコードの例
これが最も最適かつ推奨される方法です。EAは、IndicatorsフォルダにあるKCI-Directional_X.ex5ファイルを呼び出します。
コードスニペット:
//+------------------------------------------------------------------+ //| 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."); } }
計算を組み込んだEAコードの例(直接組み込み)(EAのKCI-N Matrixエンジンに組み込み)
この方法では、外部インジケーターファイルを必要とせずに、独自の数学的アルゴリズムをEAに直接組み込みます。Zスコアの計算には過去のデータが必要となるため、EA内の特別な関数を使用して価格配列を処理します。
コードスニペット:
//+------------------------------------------------------------------+ //| 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の3つの値をすべて返すために使用される構造体 // 1回の計算から。 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スコアのウィンドウの両方について。 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値を計算する // 直近で形成された2本のローソク足。 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)ことを検討してください。
-
アルゴリズムの最適化: 複雑または複数銘柄のシステムを構築するEA開発者には、上記で提供された「組み込み計算」手法の利用を強く推奨します。これにより、CPU使用率を極めて低く抑えられ、外部インジケーターを呼び出すことなく、エキスパートアドバイザーを完全に独立したシステムとして維持できます。
-
相乗効果のための組み合わせ: KCI-DXは、運動学およびボラティリティに特化したエンジンです。単独でも優れた方向性バイアスを提供しますが、お気に入りの構造的フィルター(サポート/レジスタンスゾーンなど)や出来高の異常検出ツールと組み合わせて最終的なエントリーを検証することで、その真価を発揮します。
まとめ
著者注/結論: KCI-Directional Matrixをご検討いただき、ありがとうございます。 このコードベースは、MQL5コミュニティに、軽量で数学的に厳密、かつ適応性の高い分析ツールを提供することに厳格に焦点を当てて設計されました。 正確なモメンタムの枯渇ポイントを探している手動トレーダーの方でも、機械可読データをエキスパートアドバイザーに組み込んでいる開発者の方でも、このインジケーターが皆様のプロジェクトの堅牢な基盤となることを願っています。
このコードが皆様のトレーディングシステムに役立つと感じられた場合は、ぜひレビューを残したり、独創的なカスタマイズ例を共有したり、下のディスカッションセクションに質問を投稿してください。一緒にアルゴリズム取引の限界を押し広げていきましょう!
楽しいコーディングと安全なトレードを!— Ritz
MetaQuotes Ltdによって英語から翻訳されました。
元のコード: https://www.mql5.com/en/code/74839
EA KCI N-Matrix engine
アルゴリズム・グリッドとキネティック・モメンタムの頂点。 KCIネイティブ・マトリックス・エンジンへようこそ。これは、MetaTrader 5向けにネイティブに構築された、容赦なく数学的に駆動されるアルゴリズムの巨獣です。高頻度取引(HFT)環境向けに設計されたこのEAは、肥大化した標準ライブラリを排除し、サーバーのルーティングレベルで直接動作します。
Envelope SAR
この指標は、パラボリックSARとエンベロープ間の正規化された関係を用いて、価格が構造的なボラティリティ・チャネルに対してどの位置にあるかを追跡するトレンド・モメンタム・オシレーターです。
Adaptive Moving Average (AMA)
適応移動平均線は、ノイズの影響を受けにくい移動平均線を作るときに使われ、トレンドを検知する際にラグが最小に抑えられるという特徴を持ちます。
Accelerator Oscillator (AC)
アクセルレーション/デセレレーションインジケーター(AC)は現在の市場を動かす力の加速と減速を測ります。