单智能体交易策略:趋势跟踪、均值回归、动量与统计套利

各位同学,今天我们来聊聊单智能体交易策略。说白了,就是一个交易机器人独立做决策,不跟别人商量。我做了这么多年量化,发现很多人一上来就搞多智能体,结果连单智能体都没跑明白。嗯,咱们先把地基打牢。

我个人习惯把单智能体策略分成四大类:趋势跟踪、均值回归、动量策略、统计套利。这四类几乎覆盖了市面上90%的CTA策略。你想想看,不管多复杂的策略,底层逻辑基本都在这四个框架里。

核心观点:单智能体策略的核心是「一个模型、一个决策、一个执行」。它不需要跟其他智能体协调,所以逻辑相对简单,但正因为简单,反而更容易暴露问题。

单智能体 交易策略 趋势跟踪 均线交叉、通道突破 均值回归 布林带、RSI超买超卖 动量策略 截面动量、时间序列动量 统计套利 配对交易、协整关系 单智能体策略四大分类及其典型应用

趋势跟踪策略

趋势跟踪,说白了就是「涨了买、跌了卖」。听起来简单吧?但我在项目中遇到过,很多人把趋势跟踪做成了追涨杀跌,结果被来回打脸。

真正的趋势跟踪,核心在于「确认趋势」和「过滤噪音」。我个人习惯用双均线系统:快线上穿慢线做多,下穿做空。但这里有个坑——均线参数怎么选?

我的经验:别一上来就用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配对。小品种的滑点会让你亏到怀疑人生。

好了,这四种策略各有各的脾气。趋势跟踪怕震荡,均值回归怕单边,动量策略怕拐点,统计套利怕成本。你想想看,没有一种策略是万能的。所以下一章我们会讲怎么把这些策略组合起来,让它们互相弥补。

嗯,今天就到这里。记住:单智能体是基础,先把这四种策略吃透,后面多智能体组合才能玩得转。

专注资料整理