
从一次交易员的吐槽说起
有个做期货的朋友问我,他写了个MACD金叉就买入、死叉就卖出的策略,回测十年发现胜率不到四成,亏得心态快崩了。另一边,他听说某个量化私募用多因子模型选股,年年跑赢指数,想知道是不是该把MACD扔了。
我告诉他,这两个东西压根不是同一类工具。就像你不能问扳手和螺丝刀哪个更好用——修水管和拧眼镜腿,场景不同,作用自然不同。
MACD指标到底在干什么
MACD全称叫指数平滑异同移动平均线,名字唬人,拆开看就是两条均线的差值。快线减慢线得到DIF,DIF再平滑一次得到DEA,柱状图就是DIF减DEA。
它在量化交易里的角色是趋势跟踪信号发生器。价格有惯性,涨了容易继续涨,跌了容易继续跌。MACD金叉意味着短期均线向上穿过长期均线,说明近期买盘力量增强,可能开启一段上涨。死叉反过来。

股票和期货市场里,MACD的典型用法是:
日线金叉开多仓,死叉平仓或反手
配合成交量过滤假信号
在震荡市里表现糟糕,反复打脸
它的问题很直接。均线是滞后指标,等金叉确认,价格已经涨了一截。震荡行情中,金叉死叉频繁出现,交易成本吃掉大部分利润。这就是我那位朋友胜率低的原因——他在一个不适合趋势跟踪的品种上硬用趋势工具。
多因子模型在做什么
多因子模型的逻辑完全不同。它不关心某只股票明天涨不涨,而是问:哪些特征能解释一批股票未来的收益差异?
常见的因子有:
价值因子:市盈率、市净率低的股票长期跑赢高估值股票
动量因子:过去涨得好的股票短期继续涨
质量因子:ROE高、负债低的公司更稳健
规模因子:小市值股票长期有超额收益
模型给每只股票在多个因子上打分,加权求和得到一个综合得分。买入得分最高的前N只股票,定期调仓。
这是截面选股框架,不是择时工具。它赚的是股票之间相对强弱的钱,跟大盘涨跌关系不大。对冲掉市场风险后,纯粹赚因子暴露的收益。
两者在量化策略中的分工
把量化投资比作开餐厅。MACD是后厨的炒菜火候——什么时候下锅、什么时候翻面,管的是单笔交易的进出时机。多因子模型是菜单设计——选什么菜、配什么料、定价多少,管的是整体持仓的构成。
股票市场里,多因子模型负责选出“好股票池”,MACD可以在个股层面做二次择时。比如模型选出的股票,等MACD金叉再买,避免在下跌趋势中接飞刀。
期货市场里,多因子模型可以用来做品种间的强弱轮动,MACD则判断单个品种的多空方向。CTA策略中,时序动量因子和MACD信号经常叠加使用,前者决定仓位大小,后者决定开平仓点位。
一个简单的组合示例
假设你有一个多因子选股模型,每月调仓。加入MACD过滤后,代码逻辑大概是这样:
# 多因子打分选出前20只股票
selected_stocks = factor_model.get_top_stocks(20)
# 对每只股票检查MACD状态
for stock in selected_stocks:
macd_line, signal_line, _ = talib.MACD(stock.close)
if macd_line[-1] > signal_line[-1]:
# 金叉状态,正常买入
portfolio.buy(stock, weight=0.05)
else:
# 死叉状态,延迟买入或降低权重
portfolio.buy(stock, weight=0.02)
这个组合不保证赚钱,但能降低在个股下跌趋势中建仓的概率。多因子模型解决“买什么”,MACD解决“什么时候买”。
谁也不能替代谁
多因子模型无法告诉你明天开盘该不该进场。它给的是概率优势,需要持有足够长时间、足够分散的股票池才能体现。有人拿多因子模型做日内交易,那是用错了工具。
MACD无法告诉你该买哪只股票。它对所有股票一视同仁,哪个有趋势就跟哪个。有人在震荡市里用MACD做高频,结果被来回收割。
量化交易的核心是匹配。趋势策略配趋势品种,截面策略配股票池。MACD和多因子模型各司其职,硬要比较谁更厉害,就像问锤子和尺子哪个更好用——看你是在钉钉子还是在量长度。
回到我那位朋友的问题。他的MACD策略在螺纹钢期货上表现差,因为螺纹钢去年大部分时间在震荡。换成多因子模型选股,他又没有股票池和对冲工具。我的建议是:要么把MACD用在趋势明显的品种上,要么学多因子模型但先搞懂因子逻辑。两样都想要,就组合起来用,但别指望任何一个能单独包打天下。