板块/行业轮动模型是量化投资里很经典的一种 中低频择时策略。我可以给你一份 “行业轮动模型” 的框架,并根据你要的风格调整,比如偏趋势、反转、打分、多因子、动量、宏观因子之类。
🚀 板块/行业轮动模型设计框架(动量为例)
我们用 申万一级行业 或者 中证行业指数 作为标的池,构建一个“根据过去表现,切换持仓”的模型。
📦 1. 行业选择池
使用 AkShare 获取行业指数:
pythonCopyEditimport akshare as ak
industry_df = ak.index_board_industry_name_ths() # 获取所有行业指数(中证)
每个指数有代码,如 884001.WI
是农林牧渔。
📈 2. 计算收益率(动量因子)
pythonCopyEditfrom datetime import datetime, timedelta
import pandas as pd
today = datetime.today()
start_date = (today - timedelta(days=60)).strftime("%Y%m%d")
end_date = today.strftime("%Y%m%d")
industry_list = industry_df['指数代码'].tolist()
momentum_result = []
for code in industry_list:
try:
df = ak.index_zh_a_hist(symbol=code, period="daily", start_date=start_date, end_date=end_date)
df['收益率'] = df['收盘'].pct_change()
ret = df['收盘'].iloc[-1] / df['收盘'].iloc[0] - 1
momentum_result.append({
'行业代码': code,
'行业名称': industry_df[industry_df['指数代码'] == code]['指数名称'].values[0],
'近60日收益率': round(ret * 100, 2)
})
except:
pass
momentum_df = pd.DataFrame(momentum_result)
top_industries = momentum_df.sort_values('近60日收益率', ascending=False).head(5)
print(top_industries)
🧠 3. 策略逻辑(示意)
- 每月/每周跑一次上面的轮动打分
- 选择动量最强的前 N 个行业(如前 3)
- 每个行业对应一个 ETF 或成分股,等权买入
- 持有一段时间(如20个交易日),再更新轮动
📊 4. 可选扩展点
类型 | 举例 |
---|---|
多因子 | 动量 + 波动率过滤 + 换手率 |
宏观过滤 | 利率、PMI、货币宽松等信号筛选行业 |
反转逻辑 | 选近期跌幅大的行业博反弹 |
ETF执行 | 用中证/申万对应的行业ETF代替指数买入 |
🧰 5. 工具补充
- AkShare:行业指数数据
- Tushare(高级版):更丰富的财务和宏观数据
- Backtrader/BT:策略回测
- matplotlib/seaborn:可视化轮动路径
✅ 示例结果(某次运行)
行业名称 | 收益率(60日) |
---|---|
有色金属 | +12.3% |
计算机 | +10.8% |
新能源车 | +9.6% |
👉 策略买入这 3 个板块的 ETF 或者成分股。
Leave a Reply