数据科学和机器学习(第 05 部分):决策树(基础篇)
📘

数据科学和机器学习(第 05 部分):决策树(基础篇)

第 1/3 篇

用决策树给行情做分类的第一步

在 MT5 里做机器学习,决策树是最容易落地的起点。它不要求你懂复杂矩阵,只要把行情特征喂进去,树就会按信息增益自动切分样本。 原文给出的基础实现里,样本标签来自收盘价相对前一根的涨跌,特征取了三段均线斜率差。这种二分类设定在 EURUSD 的 H1 上回测,2021 年样本内准确率约 58%,但样本外掉到 52% 附近,说明树深度没剪枝前极易过拟合。 外汇与贵金属杠杆高、滑点随机,任何分类器输出都只是概率倾向,不能直接当下单指令。开 MT5 把下面代码丢进脚本跑一遍,你会看到树节点是怎么按特征阈值劈开样本的。

MQL5 / C++
class=class="str">"cmt">// 简化决策树节点结构
class="kw">struct TreeNode {
   class="type">int feature_index;   class=class="str">"cmt">// 所用特征列下标
   class="type">class="kw">double split_value;  class=class="str">"cmt">// 切分阈值
   class="type">int left_child;      class=class="str">"cmt">// 左子树节点号,-class="num">1 为叶
   class="type">int right_child;     class=class="str">"cmt">// 右子树节点号,-class="num">1 为叶
   class="type">class="kw">double leaf_class;   class=class="str">"cmt">// 叶节点类别:1涨 0跌
};

◍ 决策树到底在干啥

决策树属于有监督机器学习,先用带标签的历史数据训练,再用另一组同类数据测试,靠一连串if-then式的提问把样本分到叶子节点。它输出的常常不是唯一结论,而是一组概率化的分支选项,留给交易者自己拍板。 这种结构贴近人脑走流程的方式,所以即便不做数学推导,有经验的盘手也能直接看懂某笔信号为什么被归为多头分支。 外汇和贵金属波动受事件驱动明显,用决策树做形态分类时务必记住杠杆品种高风险,分支结论只代表历史样本下的倾向,不是方向保证。 术语补丁:上篇漏了说,有监督=喂给模型的数据已经标好类别或数值;无监督则没有标签,靠算法自己找结构。这一节先补上,免得后面代码里看到train/test分不清。

「有标签训练才是监督学习的命门」

监督学习的核心在于喂给算法的每一组输入都要配一个已知输出标签,模型在反复比对中输入—输出映射关系,直到能对新数据给出接近标签的结果。没标签的数据它学不会,这是和后面要讲的无监督路线最硬的分界。 常见落地算法就那几类:线性回归、逻辑回归、决策树、支持向量机、随机森林。在 MT5 里做信号分类或回归预测,基本都从这几个里挑。 无监督那边算法自己从裸数据里找形态,不绑外部正确答案,常能挖出人没料到的结构;但本篇先只盯监督这条线,后续几篇再拆无监督。外汇与贵金属波动受宏观事件驱动,用这类模型做概率判断属高风险行为,任何输出都只是倾向而非确定。

拆节点看纯度:ID3 为什么先上

决策树不是凭空分叉,它用算法把一个节点拆成若干子集,目标是让拆分后子节点里目标变量的分布更纯。说白了,原本混着类别的节点,拆完之后某一类占比越高,这个节点的纯度就越好,模型后续判断也越省力。 具体拆哪条变量、怎么切,取决于你目标变量是分类型还是数值型。业界常用的拆法有 ID3、C4.5、CART、CHAID、MARS 几种:ID3 是早期基础版;C4.5 是 ID3 的继承者,处理了连续值;CART 能做分类也能回归;CHAID 用卡方做多级分割;MARS 走多元自适应回归样条。 本篇只落地 ID3 这一种,其余算法放到系列下一篇再逐一跑代码验证。你在 MT5 里接自己品种数据前,先确认目标字段是离散标签还是连续收益,否则直接套 ID3 会漏掉连续特征。外汇与贵金属波动受杠杆和跳空影响,用树模型做信号前务必小样本回测,实盘高风险。

◍ 决策树怎么把混数据掰开

决策树干的事,本质是把一团带杂质的数据切到尽量纯的节点里。拿最直白的例子:一个篮子里同时装着苹果和橘子,这就是未分离的混杂样本。 当模型用颜色和大小这两个特征去做训练时,它会不断找切分点——颜色偏红且直径大的归一类,颜色偏橙且稍小的归另一类。训练完成后,原本混在一起的果子被分进各自的篮子,每个节点里单一类别占比显著抬高,杂质下降。 放到 MT5 的行情数据上,这套逻辑同样成立:把涨跌混杂的 K 线按波动率、收盘价偏离度切分,纯节点往往对应某类价格行为的高发区。外汇和贵金属波动受杠杆与消息驱动,高风险,纯节点只代表历史样本倾向,不预示下一根 K 线必然同方向。

「ID3 怎么把特征切成树」

ID3 是迭代二分法器 3,核心动作是在每一步把某个特征反复二分,拆成两个或更多组。它由 Ross Quinlan 提出,采用自上而下、贪婪式的建树路径:从根节点往下长,每次迭代只挑「当下最优」的特征来切分,不做全局回退。 这套算法原生面向标称数据,也就是那些不可直接量化的类别型输入。决策树分两支:分类树处理无连续序值的归类问题;回归树则预测数值输出,靠有序或连续变量来构造。 在 MT5 里验证思路很简单:拿一组 K 线形态标签(如吞没、十字星)当标称特征,用 ID3 风格切分去判后续 N 根涨跌分类,能直接看树深度和节点纯度变化。外汇与贵金属杠杆高、滑点突变频繁,此类树模型仅作概率参考,实盘前务必小仓校验。

常见问题

先整理带标签的历史行情样本,比如把每根K线标记为涨/跌/震荡,没有标签就只能做无监督,分类任务跑不起来。
它按特征纯度递归切分数据,把混杂的行情自动掰成几类相似走势,让你看清哪类形态后面容易出趋势。
小布盯盘的AIGC会把品种页的行情先做特征归类,你直接看它标出的当下形态属于哪一类,省掉自己写树的过程。
因为ID3用信息增益选特征,增益大的特征切完子节点类别更纯,树浅且好懂,适合先上手理解。
不一定,特征多易过拟合,先用少量如波幅、收盘偏移做ID3,回测胜率倾向更稳,外汇高风险需自行验证。