【Python量化实战全攻略 #13】动量反转因子手册:过去N日收益怎么算(附代码)
摘要:【Python量化实战全攻略 #13】动量反转因子手册:过去N日收益怎么算(附代码) 手册定位:模块二第 5 篇。动量(追涨)与反转(抄底)是技术面因子主力——核心是「过去 N 日收益率」。本篇讲怎么从历史K线算出来
手册定位:模块二第 5 篇。动量(追涨)与反转(抄底)是技术面因子主力——核心是「过去 N 日收益率」。本篇讲怎么从历史K线算出来,并区分动量与反转视角。
数据来源复用 #02 历史K线(日线 close 序列)。
1. 你将得到什么
- 从日线 close 算过去 N 日收益率(动量因子)的代码;
- 用短期反转(近 5 日收益取反)构建反转因子的写法;
- 多股票横截面排名打分;
- 动量/反转因子的 4 个坑(停牌缺口、复权、N 选择、换手率)。
2. 取数约定(复用)
| 因子 | 计算 | 来源端点 | 见 |
|---|---|---|---|
| N日动量 | close_t / close_{t-N} − 1 | 日线 /hs/history/{代码}.{市场}/d/N |
#02 |
| 短期反转 | −近5日收益 | 同上 | #02 |
3. 数据来源(复用,不重复罗列)
详见 #02 历史K线接口手册(日线端点 /hs/history/{代码}.{市场}/d/n)。
4. 核心模板函数(自包含可跑)
import pandas as pd
_MOCK = True
def n_day_return(close, n=20):
if len(close) <= n:
return None
return close.iloc[-1] / close.iloc[-1 - n] - 1
def momentum_frame(prices, n=20, reversal_short=5):
rows = []
for code, cl in prices.items():
s = pd.Series(cl)
mom = n_day_return(s, n)
rev = -n_day_return(s, reversal_short) if len(cl) > reversal_short else None
rows.append({"代码": code, "动量_%d" % n: mom, "反转_%d" % reversal_short: rev})
return pd.DataFrame(rows)
def run_check():
prices = {
"600519": [10, 10.2, 10.5, 11.0, 11.3, 12.0, 12.5],
"000001": [10, 9.8, 9.5, 9.2, 9.0, 8.8, 8.5],
}
mf = momentum_frame(prices, n=5, reversal_short=3)
assert mf["动量_5"].iloc[0] > 0 and mf["动量_5"].iloc[1] < 0
mf["动量_s"] = mf["动量_5"].rank(pct=True)
print("校验通过 | 动量:", mf["动量_5"].round(3).tolist())
return mf
if __name__ == "__main__":
run_check()
5. 跑通示例
mf = run_check()
print("动量前1:", mf.sort_values("动量_5", ascending=False).head(1)[["代码", "动量_5"]].to_dict("records"))
6. 坑与注意事项
- 停牌缺口:长期停牌后复牌,N 日收益会混入停工期,要剔除或对齐交易日历。
- 复权:必须用前复权 close 算收益,不复权会因分红跳空失真。
- N 的选择:20 日偏中期、5 日偏短期,不同 N 对应不同风格。
- 换手率:纯动量策略换手极高,实盘要加换手约束或用短期反转降低摩擦。
7. 小结与下一篇预告
技术面动量/反转因子就位,与基本面四维合成「五维」。下一篇讲多因子打分与排序——把上面所有因子用 Zscore/分位标准化合成总分。
下一篇预告:《【Python量化实战全攻略 #14】多因子打分与排序手册:Zscore、分位标准化(附代码)》
8. 免责声明
本文为因子构建方法示例,演示数据为虚构,不构成投资建议。
关于数据来源:本文动量/反转因子所需的日线数据来自智兔数服(www.zhituapi.com)官方文档接口(详见本系列 #02),覆盖 200+ 已验证路径,注册可领免费 token 做研究测试。
更多实战手册见技术博客:zhituapi.com/blog.html。
本系列《Python量化实战全攻略》共 32 篇,下一篇讲多因子打分。
想亲自试一下?免费获取证书