MACD 的三个陷阱
震荡市反复金叉死叉
把 上一节 那段行情的中段单独拿出来。这 42 个交易日里,价格在 11.37 到 12.53 之间来回,起点 12.30,终点 12.42,整段只涨了 0.98%。
同一段时间里,MACD(12, 26, 9) 交叉了 7 次,完成 4 笔交易:
| 第几笔 | 毛收益 | 扣 0.25% 成本后 |
|---|---|---|
| 第 1 笔 | −3.24% | −3.49% |
| 第 2 笔 | −4.26% | −4.51% |
| 第 3 笔 | −3.92% | −4.17% |
| 第 4 笔 | +1.31% | +1.06% |
| 合计 | −9.82% | −10.75% |
亏损的真正来源是信号本身的时机:金叉出现时反弹已经走完大半, 死叉出现时回落也已经走完大半。每一笔都是买在相对高点、卖在相对低点。
这一点值得说透。很多人以为震荡市的问题是「手续费磨损」,但真正的问题是滞后指标在无趋势环境里会系统性地追反了方向。上一节算过,MACD 是二阶滞后的:它需要价格朝一个方向走一段才发信号,而震荡市的定义就是价格朝任何方向都走不了多远。
所以这不是 MACD 没调好,是把趋势跟随工具用在了没有趋势的环境里。
参数拟合:调参数救不了
遇到上面这种结果,多数人的第一反应是调参数。那就调给你看。
在这同一段震荡行情里,把快线周期从 5 试到 15、慢线从快线 +5 试到 35、DEA 从 5 试到 12,一共 1848 组参数,全部跑一遍:
| 试过的参数组合 | 1,848 组 |
| 其中表现最好的一组 | MACD(8, 19, 12) |
| 它在这段行情里的收益 | −5.39% |
1848 组参数里,最好的那一组也是亏的。
这个结果比「调不出好参数」更有信息量:它说明问题不在参数,在于这段行情根本不适合这类策略。而调参数这个动作,会让你误以为问题出在参数上,从而在错误的方向上花掉大量时间。
更麻烦的是下一步。假设这段行情里确实有一组参数是赚钱的,你把它选出来用到后面的行情上会怎样?我把 MACD(8, 19, 12) 拿到样本外那段(后 33 个交易日)跑了一次:
| 参数 | 样本内 | 样本外 |
|---|---|---|
| MACD(8, 19, 12) 优化出来的 | −5.39% | −8.05% |
| MACD(12, 26, 9) 默认的 | −10.75% | 0.00%(未触发交易) |
优化出来的参数,在样本外比默认参数还差。这正是 过拟合那一节 讲的事情:样本内的优势来自噪音的偶然排列,换一段数据就消失了,甚至反向。
背离的主观性
一个能挡住前两个陷阱的过滤条件
既然问题是「趋势工具用在无趋势环境」,那解法就是先判断有没有趋势,再决定用不用它。
一个可判定的做法:只在价格位于某条长期均线(比如 60 日)上方时,才接受 MACD 的金叉。其余时间一律不做。
这不能提高信号质量,它做的是减少你参与的次数,也就是把上面那种「42 天做 4 笔全亏」的场景直接跳过。按 成本侵蚀 那一节的结论,减少交易频率本身就是最有效的改善手段之一。
代价也要说清楚:这个过滤会让你错过部分底部反转的行情,因为那时价格通常还在长期均线下方。这是取舍,不是免费的改进。
怎么用 MACD 才算合理
- 当趋势状态的描述用,不当信号用。DIF 在零轴上方且 DEA 也在上方, 说明目前是多头结构。这是对现状的概括,不是对未来的预测。
- 柱状图看加速度,不看方向。柱子缩短是「涨得慢了」,不是「要跌了」, 见 上一节。
- 参数就用默认的,不要优化。既然优化出来的参数样本外更差, 那就没有优化的意义。用默认参数至少不会让你产生「我找到了什么」的错觉。
今天就做这一件事
打开一只你熟悉的票的日线,找一段横盘震荡的时期,至少一个月。
数一下那段时间里 MACD 交叉了几次。
然后按每次交叉都操作来算一遍:买在金叉当日收盘,卖在死叉当日收盘。
把结果跟「那段时间什么都不做」比一比。这个对比大多数人从来没算过, 而它就是「震荡市不做交易」这条老话的全部依据。