← 返回博客列表

【Python量化实战全攻略 #20】动量、反转择时手册:趋势跟随与均值回归(附代码)

2026年10月19日 09:43 · 智兔数服 · Python量化实战全攻略

摘要:【Python量化实战全攻略 #20】动量、反转择时手册:趋势跟随与均值回归(附代码) 手册定位:模块三第 4 篇。两种相反的择时逻辑:动量(追涨、趋势跟随)与反转(抄底、均值回归)。本篇讲怎么构建并对比两者。 数据来源复用 #02 历史K

手册定位:模块三第 4 篇。两种相反的择时逻辑:动量(追涨、趋势跟随)与反转(抄底、均值回归)。本篇讲怎么构建并对比两者。
数据来源复用 #02 历史K线(close)+ #13 动量因子思路。

1. 你将得到什么

  • 趋势跟随信号:N 日动量 > 0 持仓;
  • 均值回归信号:价格跌破 N 日均线一定幅度后买入;
  • 两种信号的收益/回撤对比代码;
  • 动量/反转的 4 个坑(风格切换、参数、双边成本、样本期)。

2. 取数约定(复用)

信号 来源 见
日线 close /hs/history/{代码}.{市场}/d/n #02

3. 数据来源(复用,不重复罗列)

详见 #02 历史K线接口手册(日线端点)。

4. 核心模板函数(自包含可跑)

import pandas as pd
import numpy as np

_MOCK = True


def trend_signal(close, n=20):
    s = pd.Series(close)
    mom = s / s.shift(n) - 1
    return (mom > 0).astype(int)


def mean_reversion_signal(close, n=20, band=0.05):
    s = pd.Series(close)
    ma = s.rolling(n).mean()
    dev = s / ma - 1
    return ((dev < -band) & (dev > -2 * band)).astype(int)


def signal_return(close, sig):
    s = pd.Series(close)
    ret = s.pct_change().fillna(0)
    pos = pd.Series(sig).shift(1).fillna(0)
    return (pos * ret).sum()


def run_check():
    rng = np.random.default_rng(1)
    n = 250
    close = 100 * np.cumprod(1 + rng.normal(0.0005, 0.02, n))
    t = trend_signal(close, n=20)
    m = mean_reversion_signal(close, n=20, band=0.05)
    rt = signal_return(close, t)
    rm = signal_return(close, m)
    assert np.isfinite(rt) and np.isfinite(rm)
    print("校验通过 | 趋势收益=%.3f 反转收益=%.3f" % (rt, rm))
    return t, m


if __name__ == "__main__":
    run_check()

5. 跑通示例

t, m = run_check()
print("趋势信号末态:", "持仓" if t.iloc[-1] else "空仓", " 反转信号末态:", "买入区" if m.iloc[-1] else "观望")

6. 坑与注意事项

  1. 风格切换:动量在趋势市赢、反转在震荡市赢,单一信号长期会轮空。
  2. 参数:N 日窗口决定风格,别过度优化。
  3. 双边成本:回测必须扣交易成本才可信。
  4. 样本期:跨多段市况(牛/熊/震)验证稳健性。

7. 小结与下一篇预告

动量/反转择时给了两种互相对冲的逻辑。下一篇讲北向资金跟随——用聪明钱(北向)的净流入做择时信号。

下一篇预告:《【Python量化实战全攻略 #21】北向资金跟随手册:聪明钱择时信号(附代码)》

8. 免责声明

本文为择时方法示例,演示数据为模拟,不构成投资建议。


关于数据来源:本文动量/反转所需的日线数据来自智兔数服(www.zhituapi.com)官方文档接口(详见本系列 #02),覆盖 200+ 已验证路径,注册可领免费 token 做研究测试。
更多实战手册见技术博客:zhituapi.com/blog.html。
本系列《Python量化实战全攻略》共 32 篇,下一篇讲北向跟随。

想亲自试一下?免费获取证书