风险提示 本站内容为个人研究整理,仅供学习参考,不构成任何投资建议,据此操作风险自担。本策略的规则取自公开资料,并非个人独创交易体系。
赛道强弱轮动
把一组赛道按相对强弱排序,看清钱现在在往哪边去。
内容指纹(SKILL.md 的 sha256 前 16 位):a1d875b2809a903d —— 下载解压后可用 shasum -a 256 SKILL.md 自行核对。
策略说明
你要在若干行业或赛道之间做取舍,但不想凭感觉说「新能源最近强」。适合把「哪个赛道更强」变成可复算的排序,用于定期(如每月)刷新一次关注池。不适合用它直接下单——排序不等于买卖信号。
一组标的代码(行业指数或对应 ETF)+ 一段起止日期 + 排列窗口(默认 3 个月与 12 个月两档)。数据由脚本自动从公开源获取。
一张按相对强弱降序排列的表格:每个赛道的区间涨跌幅、相对基准的超额、排名变化,以及动量是否处于同一方向的一致性标注。可导出 CSV。
- 拉取每个标的的复权收盘价序列,统一到同一交易日历。
- 计算各窗口的累计涨幅,并与基准(默认沪深 300)相减得到超额。
- 按超额降序排名,同时算出上期排名,标注名次变动方向。
- 检查短窗口与长窗口是否同向:同向标注为一致,反向标注为分歧并给出提示。
- 输出表格与 CSV。脚本不做任何买卖判断。
Python >=3.9;依赖包:akshare、pandas;数据:akshare(主)、baostock(备);公开数据源由社区维护,可能变更或失效;失效时脚本会明确报错,不会用陈旧数据顶替。
LICENSE2.2 KBSKILL.md6.4 KBreferences/sources.md2.8 KBrequirements.txt115 Bscripts/etf_rotation.py8.8 KB
风险与局限
动量效应的强度随市场状态变化,历史上也出现过持续失效的时段,学术上对「行业轮动能否长期跑赢」并无一致结论。「过去强」不保证「以后强」,排序结果只能作为注意力分配的依据。不同数据源的行业分类口径不同(申万 31 个一级行业 vs GICS 11 个板块),跨口径比较无意义。
出处
共 6 条- Returns to Buying Winners and Selling Losers: Implications for Stock Market Efficiencyhttps://www.jstor.org/stable/2328882Jegadeesh & Titman, The Journal of Finance 48(1), 1993。动量效应的经典文献,支撑「过去 3–12 个月的相对强弱具有延续性」这一前提。
- 上海证券交易所交易型开放式指数基金业务实施细则https://neris.csrc.gov.cn/falvfagui/rdqsHeader/mainbody?navbarId=1&secFutrsLawId=572cd4470b814991a46a5fe9a96b55f9上交所,2020 年修订。ETF 的官方定义与申赎、上市交易机制。
- 深圳证券交易所证券投资基金交易和申购赎回实施细则https://docs.static.szse.cn/www/disclosure/notice/general/W020201204583453961510.pdf深交所,2020 年修订。ETF「份额申购、份额赎回」的官方口径。
- 申万行业分类标准 2021 版说明https://wxweb.swsresearch.com/swsreport/2021_08/328340.pdf申万宏源研究所。一级行业 31 个、二级 134 个、三级 346 个。行业归属是行业轮动的前置口径。
- Global Industry Classification Standard (GICS)https://www.spglobal.com/spdji/zh/landing/topic/gics/MSCI 与 S&P Dow Jones Indices。11 个板块、25 个行业组、74 个行业、163 个子行业。国际口径,与申万/中证不可直接互换。
- 行业轮动(相对强弱 RS Rating 的口径说明)https://www.investors.com/how-to-invest/investors-corner/how-to-trade-growth-stocks-before-you-buy-check-this-key-rating/Investor's Business Daily。1–99 百分位、基于 12 个月价格表现。注意:其精确算法未公开,为商业机构的专利评级,本站不复制其算法。
SKILL.md 全文
下面这段就是下载包里 SKILL.md 的完整内容,未做删减。指纹 a1d875b2809a903d。
赛道强弱轮动
回答一个问题:在我关心的这几个方向里,钱现在在往哪边去。
输出是一张排序表,不是一个结论。排序决定你把注意力放在哪里,不决定你买什么。
适用场景
- 你有一个候选池(若干行业指数或对应 ETF),想定期刷新它们之间的强弱关系。
- 你想把「感觉新能源最近强」变成一张可以复核的表。
- 你在做月度或季度的关注池调整,需要一个一致的排序口径。
输入
| 输入 | 说明 |
|---|---|
| 标的列表 | 一组行业指数或 ETF 代码,必须属于同一套行业分类 |
| 短窗口 / 长窗口 | 默认 3 个月与 12 个月,可改 |
| 基准(可选) | 用于计算超额,默认可不设 |
输出
一张按短窗口涨幅降序的表:每个标的的区间涨幅、相对基准超额、排名,以及短窗口与长窗口是否同向的一致性标注。可导出 CSV。
核心逻辑
第一步:对齐交易日历
所有标的统一到同一交易日历,统一使用复权价。不复权的价格序列在分红除权日会出现跳空,那会让排序结果凭空出现一段假涨跌。
第二步:算区间累计涨幅
区间涨幅 = 区间末收盘 / 区间首收盘 − 1
第三步:算相对基准的超额
超额 = 标的区间涨幅 − 基准区间涨幅
去掉大盘涨跌的影响,剩下的才是「这个方向相对其他方向强多少」。不设基准时,输出的就是绝对涨幅。
第四步:标注一致性
同时算短窗口与长窗口,检查两者方向是否一致:
- 一致:短窗口与长窗口同向,趋势相对稳定。
- 分歧:方向相反,通常意味着近期发生了反转或加速,这是最值得单独看一眼的一类。
一致性标注不是信号,是提示你看哪里。
第五步:只排序,不做判断
脚本的输出里没有任何「买」「卖」「加仓」字样。这不是功能缺失,是设计约束:动量排序能告诉你「过去一段时间谁强」,但把「过去强」等同于「以后强」是一个需要你自己论证的假设。
依赖与安装
pip install akshare pandas
离线模式(--csv-dir)只需 Python 标准库。
用法
# 在线:比较三只 ETF 的 3 个月与 12 个月强弱
python3 scripts/etf_rotation.py --codes 512880,515030,512660 \
--names 证券ETF,新能源车ETF,军工ETF --short 3 --long 12
# 在线:带基准算超额
python3 scripts/etf_rotation.py --codes 512880,515030 --benchmark 510300 --out ranks.csv
# 离线:喂自己的行情序列
python3 scripts/etf_rotation.py --csv-dir data/ --codes 512880,515030
离线模式下,data/ 目录里需要 512880.csv 这样的文件,至少含日期列与收盘列(列名会自动识别 日期/date、收盘/close)。
出处
- Jegadeesh & Titman (1993), Returns to Buying Winners and Selling Losers, Journal of Finance 48(1) —— 动量效应的经典文献。原文摘要:买入过去表现好的股票、卖出过去表现差的股票,在 3 到 12 个月的持有期上产生显著正收益。这是本 skill「过去 3–12 个月的相对强弱具有延续性」这一前提的出处。
- 上海证券交易所《交易型开放式指数基金业务实施细则》(2020 年修订) —— ETF 的官方定义与一级市场申赎、二级市场上市交易机制。
- 深圳证券交易所《证券投资基金交易和申购赎回实施细则》(2020 年修订) —— ETF「份额申购、份额赎回」的官方口径。
- 申万宏源研究所《申万行业分类标准 2021 版说明》 —— 一级行业 31 个、二级 134 个、三级 346 个。行业归属是行业轮动的前置口径。
- MSCI / S&P Dow Jones Indices, GICS —— 11 个板块、25 个行业组、74 个行业、163 个子行业。国际口径,与申万、中证不可直接互换。
- Investor's Business Daily, RS Rating 说明 —— 1–99 百分位、基于 12 个月价格表现。注意:其精确算法未公开,属商业机构的专利评级,本站不复制其算法,只引用它作为「相对强弱」这一概念的公开表述。
完整清单与逐条说明见包内 references/sources.md。
风险与局限
- 本 skill 的出处里没有一条支撑「行业轮动可以长期跑赢市场」。 检索到的学术界结论分歧明显,甚至存在直接反驳的研究。动量效应在历史上出现过持续失效的时段。
- 换个数据源,排序可能变。 申万、中证、GICS 三套行业分类的归属不同,同一家公司在不同分类下可能落在不同行业。跨口径比较没有意义。
- 短窗口受单日波动影响很大。 3 个月的涨幅可以因为一天的大涨大跌改变名次,样本越短越要谨慎。
- 排序不含估值、基本面、拥挤度。 一个赛道排名第一,可能恰恰因为它已经涨到很贵。本 skill 不处理这件事,需要你另外看。
- 不预测方向。 输出的每一列都是过去的数据。
常见问题
短窗口第一、长窗口倒数,说明什么? 说明近期发生了反转或加速,这正是「分歧」标注要提示你的地方。但具体是反转的开始还是短期反弹,本 skill 不回答——它只负责把这个事实挑出来给你看。
能不能只用短窗口排序? 可以,但短窗口的名次对单日行情敏感,容易反复。同时看两个窗口的意义就在于让不稳定暴露出来。
赛道的行业分类用哪套好? 用你数据源里现成的那套,然后保证所有标的都属于同一套。混着用会让排序失去意义。中国的行业指数通常用申万或中证,跨境比较时才需要换算到 GICS。