单智能体交易策略:趋势跟踪、均值回归、动量与统计套利
各位同学,今天我们来聊聊单智能体交易策略。说白了,就是一个交易机器人独立做决策,不跟别人商量。我做了这么多年量化,发现很多人一上来就搞多智能体,结果连单智能体都没跑明白。嗯,咱们先把地基打牢。
我个人习惯把单智能体策略分成四大类:趋势跟踪、均值回归、动量策略、统计套利。这四类几乎覆盖了市面上90%的CTA策略。你想想看,不管多复杂的策略,底层逻辑基本都在这四个框架里。
核心观点:单智能体策略的核心是「一个模型、一个决策、一个执行」。它不需要跟其他智能体协调,所以逻辑相对简单,但正因为简单,反而更容易暴露问题。
趋势跟踪策略
趋势跟踪,说白了就是「涨了买、跌了卖」。听起来简单吧?但我在项目中遇到过,很多人把趋势跟踪做成了追涨杀跌,结果被来回打脸。
真正的趋势跟踪,核心在于「确认趋势」和「过滤噪音」。我个人习惯用双均线系统:快线上穿慢线做多,下穿做空。但这里有个坑——均线参数怎么选?
我的经验:别一上来就用20日、60日这种经典参数。我建议先做参数扫描,看看你的品种在什么周期上趋势最明显。比如螺纹钢,我试过5日/20日效果最好,但到了股指期货上,10日/30日反而更稳。
# 简单的双均线趋势跟踪
def trend_following(df, fast=5, slow=20):
df['ma_fast'] = df['close'].rolling(fast).mean()
df['ma_slow'] = df['close'].rolling(slow).mean()
df['signal'] = 0
df.loc[df['ma_fast'] > df['ma_slow'], 'signal'] = 1
df.loc[df['ma_fast'] < df['ma_slow'], 'signal'] = -1
return df['signal']
避坑指南:我曾经在2018年用趋势跟踪做比特币,参数优化得漂漂亮亮,回测曲线完美。结果实盘一个月,连续止损8次。为什么?因为震荡行情里趋势跟踪就是送钱机器。记住:趋势跟踪只适合有明确趋势的市场阶段。
均值回归策略
均值回归跟趋势跟踪正好相反——它赌价格会回到均值。你想想看,价格涨多了就会跌,跌多了就会涨,这是人性使然。
我最常用的工具是布林带。当价格触及上轨时做空,触及下轨时做多。但这里有个关键问题:你怎么定义「触及」?是碰到就开仓,还是等突破再回来?
| 策略类型 | 开仓条件 | 止损条件 | 适用品种 |
|---|---|---|---|
| 布林带回归 | 价格触及上下轨 | 突破轨道2% | 股指、商品 |
| RSI回归 | RSI < 30 做多,> 70 做空 | RSI 反向突破阈值 | 外汇、ETF |
| Z-score回归 | Z-score > 2 或 < -2 | Z-score 继续扩大 | 股票配对 |
关键点:均值回归策略最怕「趋势性行情」。如果市场走出单边,你的回归策略会一直逆势加仓,直到爆仓。我建议一定要设硬止损,别指望「总会回来的」。
动量策略
动量策略,说白了就是「强者恒强,弱者恒弱」。跟趋势跟踪有点像,但动量更关注「速度」而不是「方向」。
我做过一个实验:每个月末计算所有股票的过去12个月收益率(剔除最近1个月),然后买入前30%的股票,卖出后30%的股票。这个策略在A股市场上,2010-2020年居然跑出了年化18%的收益。但注意,2017年之后效果明显变差。
我的建议:动量策略的持仓周期很关键。我个人习惯用3-6个月的动量,太短了噪音太多,太长了容易错过拐点。你可以试试看,不同品种的最佳动量周期差别很大。
# 截面动量策略示例
def cross_sectional_momentum(df, lookback=252, skip=21):
# 计算过去12个月收益率,跳过最近1个月
df['momentum'] = df['close'].pct_change(lookback) - df['close'].pct_change(skip)
# 分组排序
df['rank'] = df.groupby('date')['momentum'].rank(pct=True)
# 做多前30%,做空后30%
df['signal'] = 0
df.loc[df['rank'] > 0.7, 'signal'] = 1
df.loc[df['rank'] < 0.3, 'signal'] = -1
return df['signal']
避坑指南:我曾经在2015年股灾期间跑动量策略,结果连续跌停根本出不来。动量策略在极端行情下流动性会瞬间枯竭。记住:策略不仅要考虑收益,还要考虑「能不能跑掉」。
统计套利策略
统计套利,这是四个策略里最「数学」的一个。它不赌单边涨跌,而是赌两个品种之间的价差会回归。
最经典的例子是配对交易。比如茅台和五粮液,它们都是白酒龙头,价格走势高度相关。当两者价差偏离到一定程度时,我就做多便宜的、做空贵的,等价差回归后平仓。
但这里有个坑:你怎么判断两个品种「真的」相关?我见过有人用相关系数,结果发现两个完全不相关的品种相关系数也高达0.8——这就是伪回归。
正确做法:用协整检验(Engle-Granger或Johansen检验)。只有协整关系成立,价差才是平稳的,回归才有意义。我建议至少用5%的显著性水平,别太宽松。
# 配对交易价差计算
def calculate_spread(price_a, price_b):
# 线性回归估计对冲比率
slope, intercept = np.polyfit(price_a, price_b, 1)
spread = price_b - (slope * price_a + intercept)
# Z-score标准化
z_score = (spread - spread.mean()) / spread.std()
return z_score
我的经验:统计套利看着很美,但实盘交易成本很高。你同时做多和做空,手续费是双倍的。我建议只做流动性好的品种,比如股指期货配对、ETF配对。小品种的滑点会让你亏到怀疑人生。
好了,这四种策略各有各的脾气。趋势跟踪怕震荡,均值回归怕单边,动量策略怕拐点,统计套利怕成本。你想想看,没有一种策略是万能的。所以下一章我们会讲怎么把这些策略组合起来,让它们互相弥补。
嗯,今天就到这里。记住:单智能体是基础,先把这四种策略吃透,后面多智能体组合才能玩得转。