KCI方向矩阵(KCI-DX)
是一种受物理学启发的先进分析工具,通过测量价格路径长度和波动率能量来提取市场运动学特征。 与传统的动量工具不同,KCI-DX 采用了动态 Z 分数归一化,并结合了 sigmoid 激活函数。这确保了输出值完美地限定在 0 到 100 之间,能够提供超敏捷的趋势强度识别和方向偏好,且不受历史极端值的影响。KCI 方向矩阵(KCI-DX) 是一款定量方向分析指标,旨在通过专有的动能压缩指数(Kinetic Compression Index)框架,衡量市场效率、方向压力及趋势扩张程度。
主要特点:
- 运动学方向提取: 利用路径长度方差计算真实市场能量。
- 动态S型缩放: 自适应归一化处理,防止指标出现平坦化。
- 三线矩阵: 由主KCI(趋势/压缩强度)、+KDI(看涨运动学)和-KDI(看跌运动学)组成。
与传统的动量震荡指标不同,KCI-DX 将市场走势分解为三个独立维度:
- 主KCI—— 衡量整体方向效率和趋势扩张强度。
- +KDI(看涨动量方向指数)——量化看涨方向的主导性。
- -KDI(看跌动量方向指数)——量化看跌方向的主导性。
该指标结合了:
- 运动学方向提取
- 路径效率分析
- 能量加权走势评分
- 动态Z分值标准化
- S型曲线自适应缩放
最终生成一个稳定的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 = 当前K线)。 ArraySetAsSeries(KCI_Main, true); ArraySetAsSeries(KDI_Plus, true); ArraySetAsSeries(KDI_Minus, true); return(INIT_SUCCEEDED); } void OnTick() { // 获取最新指标值 //(当前K线和最近收盘的K线)。 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 交易逻辑 // 所有交易决策均基于最后一根已收盘的K线 // (索引 1) 以避免受到仍在形成中的K线发出的信号影响。 // ------------------------------------------------------------ // 检测市场是否处于趋势状态。 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-Score的计算需要历史数据,我们使用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 值的结构体 // 来自一次计算。 struct KCI_Result { double main; double plus; double minus; }; // 计算用于 // 动态归一化。 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); } // 计算指定 // 历史柱线(Shift)。 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); // ------------------------------------------------------------ // 第一阶段: // 运动学方向提取 // ------------------------------------------------------------ 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; } // ------------------------------------------------------------ // 第二阶段: // 动态 sigmoid 归一化 // ------------------------------------------------------------ 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值 // 最近收盘的两根K线。 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 社区提供一款轻量级、数学严谨且高度适应性的分析工具。 无论您是寻求精准动量耗尽点的 manual trader,还是将机器可读数据集成到专家顾问中的开发者,我都希望该指标能为您的项目奠定坚实的基础。
如果您认为此代码对您的交易系统有价值,欢迎在下方评论区留下评价、分享您的创意修改,或提出问题。让我们携手继续拓展算法交易的边界!
祝您编程愉快,交易安全,——Ritz
由MetaQuotes Ltd译自英文
原代码: https://www.mql5.com/en/code/74839
EA KCI N-Matrix engine
算法网格与动量交易的精髓。 欢迎使用 KCI 原生矩阵引擎——一款专为 MetaTrader 5 原生打造、由数学驱动且毫不留情的算法巨兽。该引擎专为高频交易(HFT)环境设计,摒弃了臃肿的标准库,直接在服务器路由层运行。
Envelope SAR
该指标是一种趋势动量震荡指标,它利用抛物线SAR与包络线之间的标准化关系,追踪价格相对于其结构性波动通道的位置。