分析交易所价格的二进制代码(第一部分):技术分析的新视角·综合运用
🧩

分析交易所价格的二进制代码(第一部分):技术分析的新视角·综合运用

(3/3)·从单纯涨跌码到神经网络解密,这一篇把散落各篇的二进制读价法收拢成完整工作流

案例拆解新手友好 第 3/3 篇
把 K 线默念成 101 很容易,但多数人卡在「码有了、然后呢」。本篇不补概念,直接把前两部分的解码思路接上神经网络实跑结果,让你看到二进制视角怎么变成盘中可用的判断依据。

「把比特序列的熵打印出来」

这段收尾代码把前面统计好的 0/1 比例和整体熵直接打到终端,方便你肉眼核对分布是否偏离随机。 ones_ratio 与 zeros_ratio 都按 .2f 保留两位小数输出,若两者长期偏离 0.50 超过 ±0.05,价格方向性可能增强,但外汇与贵金属杠杆高,仍属概率事件而非确定性信号。 最后 mt5.shutdown() 释放 MT5 终端连接,避免脚本退出后残留会话占用端口;主入口用 if __name__ == "__main__" 包裹,保证被 import 时不自动跑主流程。

MQL5 / C++
    print(f"Ones ratio: {analysis[&class="macro">#x27;ones_ratio&class="macro">#x27;]:.2f}")
    print(f"Zeros ratio: {analysis[&class="macro">#x27;zeros_ratio&class="macro">#x27;]:.2f}")
    print(f"Overall entropy: {analysis[&class="macro">#x27;overall_entropy&class="macro">#x27;]:.2f}")

    mt5.shutdown()
if __name__ == "__main__":
    main()

二进制切片里跑出来的几组真实信号

把价格切成 0/1 序列后回看,有些模式的出现频次和胜率并不按熵值走。动量串「1010111111」熵 0.72,却在样本周期内出现了 43 次,胜率 44.19%、均盈 -0.01%,但最大盈利 +0.34%、最大回撤 -0.42%——这种负期望样本若卡死回撤阈值,仍可能挤出正贡献。 成交量特征「0111001111」的 1/0 比 70/30,一个月触发 13 次、胜率 46.15%,均回报 -0.06% 却有过 +0.28% 的单笔峰值。零熵的收敛串「0000000000」出现 1625 次,胜率 53.27%、最大盈利 +0.68%,信号量够大,统计上算站得住。 分形「0110000100」11 笔里 63.64% 胜、均盈 +0.14%;波动率「0010001011」仅 2 笔全胜 +0.21%;K线「1010111110」3 笔全胜 +0.04%。混合码「0010000011」12 个信号胜率仅 25%,但最大盈利 +0.33%,说明加一层过滤才用得上。RSI 动量「0010000001」月内 3 次全亏,反而可能当作反向开仓的触发候选。 实操上可先拿分形编码当底仓信号,收敛模式做高频确认,波动率和 K 线模式做 100% 胜率过滤层。外汇与贵金属杠杆高、滑点跳空频繁,上述胜率均来自历史切片,实盘前务必在 MT5 用相同周期重跑一遍校验。

◍ 把三重视角压成0和1喂给CatBoost

二进制模式本质是类别序列,CatBoost 擅长分类数据,正适合拿 0/1 串当特征学市场状态。核心类用滑动窗口取回看周期,预测下一窗口里 1 多还是 0 多。 prepare_features 不只塞原始 0/1,还补了窗口内 1 的个数、末端趋势、与其他编码的相关性。混合编码把方向、成交量、波动性三路视角并成一组比特,相当于二进制版的技术分析三巨头。 train 时故意 shuffle=False。市场模式是依次形成的,不是随机散点,模型在有序序列上的表现才贴近实盘。predict_next_pattern 里我加了置信度输出,实测置信度越高,命中频率倾向越高。 多编码并行跑下来,几种方法预测打架的时候往往比一致更有信息量。模型还抓到过不直观的组合:低波动叠成交量抬升,下一窗口 1 占优的概率偏大——这像是强波动前悄悄建仓的盘面。外汇和贵金属杠杆高,这种信号只作概率参考,别当确定性依据。 下面这段是混合编码与预测输出的关键实现,逐行看逻辑: returns = self.decoder.df['close'].pct_change() // 算收盘价百分比变化,作为动量基线 base_binary = (returns.abs() > 0.0001).astype(int) // 变化绝对值超万分之一记 1,否则 0 方向 = (self.decoder.df['close'] > self.decoder.df['close'].shift(1)).astype(int) // 收盘价高于前一根记 1,得出运动方向比特 volume = (self.decoder.df['tick_volume'] > self.decoder.df['tick_volume'].rolling(self.lookback).mean()).astype(int) // 即时成交量高于回看均值记 1,捕捉放量 volatility = ((self.decoder.df['high'] - self.decoder.df['low']) > (self.decoder.df['high'] - self.decoder.df['low']).rolling(self.lookback).mean()).astype(int) // 真实波幅高于回看均值记 1,标记波动扩张 base_binary = (direction & volume & volatility) // 三路全满足才记 1,得到混合二进制 prediction = self.model.predict_proba(last_window)[0] // 对最新窗口跑概率,取第一类结果 return { 'probability_more_ones': prediction[1], // 下一窗 1 占优的概率 'probability_more_zeros': prediction[0], // 下一窗 0 占优的概率 'prediction': 'More ones' if prediction[1] > 0.5 else 'More zeros', // 过半阈值给粗判 'confidence': max(prediction) // 两类概率最大值当置信度 } 开 MT5 接自己的 tick 数据把 lookback 从 20 调到 50,看低波动+放量组合在黄金 15M 上是不是也给出偏多的 1 概率。

MQL5 / C++
returns = self.decoder.df[&class="macro">#x27;close&class="macro">#x27;].pct_change()
base_binary = (returns.abs() > class="num">0.0001).astype(class="type">int)
direction = (self.decoder.df[&class="macro">#x27;close&class="macro">#x27;] > self.decoder.df[&class="macro">#x27;close&class="macro">#x27;].shift(class="num">1)).astype(class="type">int)
volume = (self.decoder.df[&class="macro">#x27;tick_volume&class="macro">#x27;] > self.decoder.df[&class="macro">#x27;tick_volume&class="macro">#x27;].rolling(self.lookback).mean()).astype(class="type">int)
volatility = ((self.decoder.df[&class="macro">#x27;high&class="macro">#x27;] - self.decoder.df[&class="macro">#x27;low&class="macro">#x27;]) > 
              (self.decoder.df[&class="macro">#x27;high&class="macro">#x27;] - self.decoder.df[&class="macro">#x27;low&class="macro">#x27;]).rolling(self.lookback).mean()).astype(class="type">int)
base_binary = (direction & volume & volatility)
prediction = self.model.predict_proba(last_window)[class="num">0]
class="kw">return {
    &class="macro">#x27;probability_more_ones&class="macro">#x27;: prediction[class="num">1],
    &class="macro">#x27;probability_more_zeros&class="macro">#x27;: prediction[class="num">0],
    &class="macro">#x27;prediction&class="macro">#x27;: &class="macro">#x27;More ones&class="macro">#x27; if prediction[class="num">1] > class="num">0.5 else &class="macro">#x27;More zeros&class="macro">#x27;,
    &class="macro">#x27;confidence&class="macro">#x27;: max(prediction)
}

「二进制编码让模型显出不同市感」

把价格运动转成二进制模式喂给神经网络后,不同编码方式确实长出了各自的“脾气”,很像传统技术指标的风格差异。 动量编码最干脆:实测 95% 准确率、F1 分数 0.92,模型几乎能读准趋势惯性;它的预测里下一模式“1 占优”概率到了 95%,这基本是强趋势还将延续的倾向信号。 成交量编码不弱:83% 准确率,精确率与召回率都在 0.83 附近,对大资金痕迹抓得准;预测以 94% 置信度看“1 占优”,和“量能确认趋势”的老经验对得上。 收敛编码给了个意外:同样 83% 准确率,却以 78% 置信度押“0 占优”,和前两者直接矛盾。这类分歧在实盘里往往对应趋势反转概率上升。 混合编码把几种方式叠起来,跑出 91% 准确率、0.92 精确率,也给出“0 占优”75% 概率,和收敛信号相互印证。 我在 EURUSD 真实 1 小时数据上遇到过一次:各方法准确率都高但预测打架,几小时后价格剧烈反转。外汇与贵金属属高风险品种,这种“方法间分歧”值得在 MT5 上自己复验,别当成必然反转依据。 所有指标都来自 1 小时框架,换周期结论可能完全变;尤其接 3D K 线思路时更是另一回事,这里先不展开。

把工具请下神坛

把价格切成 0 和 1 之后,图表不再是曲线,而是一串可读的信息流。动量模式在回测里跑出 95% 的识别准确率,成交量分析 83%,混合方法 91%——这些数字说明表层混沌底下确有秩序,但外汇与贵金属的高杠杆环境里,任何算法都只是概率工具,不是圣杯。 我们确实多了一只耳朵:能听见波动里藏着的二进制低语。可市场太活,精密模型也描不全它的形状,EURUSD 一根新闻影线就能把训练好的权重打穿。 所以别把这堆代码供起来。把它当扳手,拧不动就换角度,继续听、继续改,下一次突破可能就藏在你想都没想过的编码方式里。

交给小布把码流画出来
这些诊断小布盯盘的 AIGC 已内置,打开对应品种页即可看到多周期二进制码矩阵的自动渲染,你只管对照形态找节奏。

常见问题

趋势市中连续同向码段更长、断裂少;震荡市码段频繁翻转,单独看裸码噪声偏高,需叠成交量或均线位过滤。
文中用的是现成框架做轻量训练,重点在特征怎么从码序列抽出来,普通 MT5 环境配合 Python 桥接即可复现。
可以,品种页已内置多周期码矩阵与重复片段高亮,省去手动转码;外汇贵金属波动受事件驱动,码形突变概率高,仅作辅助。
加密波幅与节奏更极端、连续段落长,码流类似摩尔斯点划;主流货币对受央行预期平滑,码形碎、需更长窗口观察。
基础篇铺转码规则、第二篇挖单纯模式,本篇用神经网络把两者收口,关于完整训练细节见《二进制读价·实战篇》。