利用 Python 实现价格走势离散方法·综合运用
🧪

利用 Python 实现价格走势离散方法·综合运用

(3/3)·从统计检验到信息熵与预测力评估,一套开源 Python 工具链如何替你把离散化从玄学变成可回测结论

含代码示例实战向 第 3/3 篇

执着于固定时间帧的人,往往在新闻行情里把 80 点移动压缩进一根巨柱,又在平静时段被几十根空柱线灌满噪声。离散化不是换图表花样,而是重新定义‘什么算一根有意义的数据’。本文收尾篇直接把前面铺垫的各类柱线拉进同一套统计擂台。

◍ 初始化K线状态变量

在逐根处理行情前,需要先把当前K线的关键字段和序列计数器归位。bar_low 取自行数据的 'low' 字段,bar_time 与 start_time 都指向 current_time,这决定了后续同根K线内的时间窗口判定基准。 high_sequence 与 low_sequence 置 0,代表尚未出现任何同向突破;last_high、last_low 分别锚定到 bar_high、bar_low,作为第一根比较锚点;volume_sum 清 0 用于累计该根成交量。 这些变量全部初始化完成后,函数最终以 pd.DataFrame(bars) 返回整理好的K线列表。在 MT5 的 Python 桥接回测中,若漏掉 volume_sum 归零,会出现跨根成交量累加的错误信号,外汇与贵金属品种尤其容易因此放大伪突破概率,属高风险操作环节。

MQL5 / C++
    bar_low = row[&class="macro">#x27;low&class="macro">#x27;]
    bar_time = current_time
    start_time = current_time
    high_sequence = class="num">0
    low_sequence = class="num">0
    last_high = bar_high
    last_low = bar_low
    volume_sum = class="num">0
    
    class="kw">return pd.DataFrame(bars)

十二类柱线在 EURUSD M15 上的统计画像

拿 EURUSD 的 M15 周期跑了一段 2024-10-01 到 2025-01-15 的实测,把 12 种不同构造的柱线摆在一起比对。样本量差异就很说明问题:传统柱线生成了 825 根,而波动率制度只剩 38 根、Kagi 39 根、动量 48 根——同样的行情,越偏向“过滤噪点”的构造,留下的柱线越少。 平均柱线尺寸上,动量柱线一根平均 32.07 点,波动率制度 33.62 点,远高于传统柱线的 6.29 点;Renko 被锁在 10.00 点,三线突破反而最碎,只有 4.85 点。尺寸越大,单根承载的波动越干净,但信号也越滞后。 正态性检验(p 值)里,波动率制度 0.931、Kagi 0.426 最接近正态;摆动点 0.025,其余传统/交易量/范围/动量等都 <0.001,离正态差得很远。自相关用 Ljung-Box 看,范围柱线 p=0.760 几乎无自相关,动量 p=0.007 自相关极高——这意味着范围柱线更适合做均值回归类假设,动量柱线里的“惯性”还没被价格消化完。 信息熵给出另一个角度:传统柱线 -114,770 是最大信息量,Kagi -5,818 最低。高熵等于高噪声,低熵等于被压缩过的结构。综合看,传统和交易量柱线保留信息最多但噪点也多;动量和波动率柱线虽少,却更可能指向值得交易的重要走势。外汇和贵金属杠杆高,这类统计只是样本期现象,换周期或品种结论可能变,开 MT5 自己跑一遍才作数。

「哪些价格重构法过了平稳与正态关」

对十种价格重构方式做 ADF 平稳性检验与正态性检验,结果分化明显。平稳性上,除波动率制度 ADF 统计量 -1.81、p=0.377 不显著外,其余九种 p 值均低于 0.05;其中加速度柱线 ADF 达 -15.79、范围柱线 -14.35,是平稳性最强的两组。 正态性这边只有 Kagi(统计量 1.71,p=0.426)和波动率制度(0.14,p=0.931)未能拒绝正态原假设,Renko 虽 ADF -7.87 平稳,但正态统计量同样标为 -7.87 且 p<0.001,偏离正态最远。 做 MT5 自定义品种或训练均值回归模型时,别默认所有衍生柱线都服从正态分布——拿 Kagi 和波动率制度当正态输入相对安全,加速度、范围类虽稳却厚尾,外汇与贵金属杠杆高、跳空频繁,这类统计特性差异会直接放大实盘风险。

◍ 熵值排座次:哪种柱线噪音最炸

把十类柱线按信息熵排开,差距大到离谱。传统柱线熵值 -114,770 居首,Kagi 只有 -5,818 垫底,两者差出近 20 倍。熵高不等于好用——它代表“生料”多,传统和交易量柱线把每一笔微动向都记下来,深度学习喂这种数据合适,但人眼从中捞信号基本是大海捞针。 中间档的新高/新低(-67,108)、加速度(-51,867)、三线突破(-55,022)算是算法交易的甜区:信息量够,噪音没失控。最低熵的一组——Kagi、波动率制度、动量——几乎把杂波滤干净了,手工交易者拿它们看结构反而最省力。 开 MT5 把图表切到 Kagi 或动量模板,对比同周期的 Traditional 视图,你会直观感到后者满屏毛刺、前者干净得像另一品种。外汇和贵金属波动受事件驱动,低熵视图降低误读概率,但任何图表简化都不消除杠杆下的高风险。

把各类柱线当独立专家来测

做融合预测时我试过一个思路:不把柱线当成统一输入,而是让每种类型当独立“专家”各自给判断,再合起来。不同柱线看市场的角度确实不一样,动量看推力、Renko 看滤波后的趋势、Kagi 看结构突破,混用有可能补掉单一视野的盲区。 按统计显著度排,高可预测性的一组是动量(p=0.007)和 Renko(p=0.018)。动量在剧烈走势里效果最好,能清楚展示趋势强弱,强劲趋势中假信号最少;Renko 在趋势段表现出色、能滤噪声,但横盘会出问题。中等可预测性包括波动率制度(p=0.126)、加速度(p=0.168)、新高新低(p=0.136)、Kagi(p=0.109)。低可预测性的是范围(p=0.760)、三线突破(p=0.686)、摆动点(p=0.709),基本接近随机。 多柱线模型可以这样搭:动量判定走势推力,波动率制度调仓位规模,新高新低确认趋势,Kagi 筛假信号。EURUSD 测试里这套组合准确度提高 12%,误报率降 23%,回撤降 15%——外汇品种高风险,数字仅代表该样本表现,换周期或品种可能失效,建议开 MT5 用自己常做的品种复测一遍。

「一点提醒」

把不同柱线类型拆开看,会发现并不存在某种「完美」形态。传统与成交量柱适合喂机器学习,动量与 Renko 在趋势里更顺手,Kagi 配波动率机制能扛高波动环境,新高新低加加速类则偏向剥头皮场景。 真正值得盯的方向,是让系统按市场状态自动切柱线。比如低波动时段用传统柱跑模型,突破波动率阈值后切到 Kagi,这类混合逻辑在 MT5 里可以用 OnTick 里判断 ATR 再重绘对象实现。 外汇与贵金属杠杆高、滑点随机,任何柱线切换策略都只是概率优势,回测顺不代表实盘稳。下个版本若加上每类柱线的自动寻优和动态切换,建议先开策略测试器跑至少 3 个月 tick 数据再上仓。

把多品种离散化诊断交给小布盯盘
这些不同柱线的稳定性与预测力对比,小布盯盘的 AIGC 已内置常用品种的预计算视图,打开对应品种页就能直接看分布偏移,不必自己每晚跑 Python 脚本。

常见问题

M5 把一分钟内的剧烈波动折叠进单根柱,范围柱按价格跨度成柱,能在高波动段自然切出更多有意义单元,减少信息塌陷,但外汇贵金属属高风险,历史表现不预示必然重复。
可以,小布盯盘的品种页内置了多类离散化视图与基础统计,你切换品种即可看不同柱线下的分布与稳定性,省去本地搭 Python 环境的重复劳动。
它衡量每根柱线携带的不确定度,熵越低说明价格状态越可被压缩表达,倾向于代表该离散化在当前样本里噪声更少、结构更清晰。
自相关衰减慢的序列往往残留可捕捉的惯性,结合预测力评估,能辅助判断某类柱线在特定时段是否值得接进策略,而非仅凭观感。
文中实现针对实时更新做了流柱线重构与增量计算,常规品种tick量下开销可控,但极高频或多品种并行仍受本机与 broker 数据限制,属概率性优化而非保证。