投投资策略平台
署名 老K
策略库/赛道强弱轮动

风险提示 本站内容为个人研究整理,仅供学习参考,不构成任何投资建议,据此操作风险自担。本策略的规则取自公开资料,并非个人独创交易体系。

赛道强弱轮动

把一组赛道按相对强弱排序,看清钱现在在往哪边去。

引擎 + 公开数据源通用规则适用:基金
全贯穿全链路1选标的主用2定买点3定仓位4定卖点5复盘
下载完整策略包 10.9 KB · 5 个文件 · 解压即用
下载 .zip

内容指纹(SKILL.md 的 sha256 前 16 位):a1d875b2809a903d —— 下载解压后可用 shasum -a 256 SKILL.md 自行核对。

策略说明

适用场景

你要在若干行业或赛道之间做取舍,但不想凭感觉说「新能源最近强」。适合把「哪个赛道更强」变成可复算的排序,用于定期(如每月)刷新一次关注池。不适合用它直接下单——排序不等于买卖信号。

输入

一组标的代码(行业指数或对应 ETF)+ 一段起止日期 + 排列窗口(默认 3 个月与 12 个月两档)。数据由脚本自动从公开源获取。

输出

一张按相对强弱降序排列的表格:每个赛道的区间涨跌幅、相对基准的超额、排名变化,以及动量是否处于同一方向的一致性标注。可导出 CSV。

核心逻辑
  1. 拉取每个标的的复权收盘价序列,统一到同一交易日历。
  2. 计算各窗口的累计涨幅,并与基准(默认沪深 300)相减得到超额。
  3. 按超额降序排名,同时算出上期排名,标注名次变动方向。
  4. 检查短窗口与长窗口是否同向:同向标注为一致,反向标注为分歧并给出提示。
  5. 输出表格与 CSV。脚本不做任何买卖判断。
依赖

Python >=3.9;依赖包:akshare、pandas;数据:akshare(主)、baostock(备);公开数据源由社区维护,可能变更或失效;失效时脚本会明确报错,不会用陈旧数据顶替。

文件清单
  • LICENSE 2.2 KB
  • SKILL.md 6.4 KB
  • references/sources.md 2.8 KB
  • requirements.txt 115 B
  • scripts/etf_rotation.py 8.8 KB

风险与局限

动量效应的强度随市场状态变化,历史上也出现过持续失效的时段,学术上对「行业轮动能否长期跑赢」并无一致结论。「过去强」不保证「以后强」,排序结果只能作为注意力分配的依据。不同数据源的行业分类口径不同(申万 31 个一级行业 vs GICS 11 个板块),跨口径比较无意义。

出处

共 6 条

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。

风险与局限

  1. 本 skill 的出处里没有一条支撑「行业轮动可以长期跑赢市场」。 检索到的学术界结论分歧明显,甚至存在直接反驳的研究。动量效应在历史上出现过持续失效的时段。
  2. 换个数据源,排序可能变。 申万、中证、GICS 三套行业分类的归属不同,同一家公司在不同分类下可能落在不同行业。跨口径比较没有意义。
  3. 短窗口受单日波动影响很大。 3 个月的涨幅可以因为一天的大涨大跌改变名次,样本越短越要谨慎。
  4. 排序不含估值、基本面、拥挤度。 一个赛道排名第一,可能恰恰因为它已经涨到很贵。本 skill 不处理这件事,需要你另外看。
  5. 不预测方向。 输出的每一列都是过去的数据。

常见问题

短窗口第一、长窗口倒数,说明什么? 说明近期发生了反转或加速,这正是「分歧」标注要提示你的地方。但具体是反转的开始还是短期反弹,本 skill 不回答——它只负责把这个事实挑出来给你看。

能不能只用短窗口排序? 可以,但短窗口的名次对单日行情敏感,容易反复。同时看两个窗口的意义就在于让不稳定暴露出来。

赛道的行业分类用哪套好? 用你数据源里现成的那套,然后保证所有标的都属于同一套。混着用会让排序失去意义。中国的行业指数通常用申万或中证,跨境比较时才需要换算到 GICS。