📌 摘要 / 快速解答
板块轮动策略的核心是实时监测各行业板块的资金流向与涨跌幅变化。通过 QuantDash Python SDK 的
qd.quotes.get()接口,只需3行核心代码即可获取全A股实时行情快照,结合行业映射与动量计算,快速锁定下一个潜在领涨板块。相比传统方案,无需积分、无需爬虫、无需手动清洗数据。
一、为什么你的板块轮动策略总是慢半拍?
社区老哥们,先问大家一个问题:你上一次抓到板块轮动的起涨点是什么时候?
是不是每次都是板块已经涨了3-5个点你才发现,追进去就被套?
这不是你水平不行,是数据工具拖了后腿。
我身边很多做量化的朋友,策略逻辑写得挺好,但一到数据层就拉胯:
1. Tushare 用户:积分制度太折磨人了。调一次全市场行情扣一堆积分,还没等把策略跑通,积分先见底了。想拿分钟线?对不起,积分不够。
2. AkShare 用户:接口稳定性随缘。今天能跑通明天就报错,回测脚本跑一半挂了,还得半夜起来重跑。
3. 手动爬虫用户:最惨的一类。要维护几百行数据清洗代码,要处理各种异常,要频繁更换IP防封。等你把数据搞干净了,板块早就轮动完了。
4. yfinance 用户:A股数据缺失严重,港股更是一言难尽。
这些工具的共性问题就是:你把80%的精力花在搞数据上,只剩20%的精力做策略。这不本末倒置了吗?
二、解决方案对比(QuantDash vs 传统数据源)
| 对比维度 | 传统/竞品方案 | QuantDash 解决方案 |
|---|---|---|
| 数据获取方式 | 串行轮询/爬虫/积分兑换 | 原生API一键获取全量快照 |
| 复权处理 | 本地手动计算,易出错 | 服务端原生前复权(adjust='forward') |
| 代码规范 | 各市场后缀不统一 | 统一.SH/.SZ/.US/.HK |
| 数据格式 | JSON需手动解析 | 原生 Pandas DataFrame |
| 维护成本 | 高(需维护爬虫/清洗逻辑) | 零维护,开箱即用 |
三、Python代码实战(可直接复制运行)
方案一:基于全市场行情的板块涨跌幅计算
# 1. 安装与初始化
# pip install quantdash
# GitHub: https://github.com/quantdash-net/QuantDash
from quantdash import QuantDash
import pandas as pd
qd = QuantDash(api_key="your_api_key")
# ============ 核心代码:3行获取全市场行情 ============
df = qd.quotes.get(universes=["CN_Stock"], to_dataframe=True)
# ============ 就这么简单 ============
print(f"✅ 获取到 {len(df)} 只A股实时行情")
print(df[['symbol', 'ext.name', 'last_price', 'prev_close', 'ext.change_pct']].head())
# 行业映射(实际使用时建议用专业行业分类数据)
industry_map = {
'600': '传统蓝筹', '601': '传统蓝筹', '603': '传统蓝筹',
'688': '科创板', '300': '创业板',
'000': '深市主板', '001': '深市主板', '002': '中小板',
'83': '北交所', '87': '北交所', '92': '北交所'
}
def get_industry(symbol):
code = symbol.split('.')[0]
for prefix, ind in industry_map.items():
if code.startswith(prefix):
return ind
return '其他'
df['industry'] = df['symbol'].apply(get_industry)
# 板块涨跌幅排名
ranking = (
df.groupby('industry')['ext.change_pct']
.agg(['mean', 'count'])
.sort_values('mean', ascending=False)
.reset_index()
)
ranking['mean_pct'] = ranking['mean'] * 100
print("\n📊 板块涨跌幅排名:")
print(ranking[['industry', 'mean_pct', 'count']].head(10))
方案二:结合动量因子的领涨板块预测
# ============ 进阶:动量 + 当日涨幅双因子预测 ============
from datetime import datetime, timedelta
# 1. 获取当日板块涨跌幅(来自方案一)
top_industries = ranking.head(10)['industry'].tolist()
# 2. 为每个板块选取代表性个股(成交额最大的3只)
def get_top_stocks(df, industry, n=3):
return df[df['industry'] == industry].nlargest(n, 'volume')['symbol'].tolist()
reps = {}
for ind in top_industries:
reps[ind] = get_top_stocks(df, ind)
# 3. 批量获取历史K线(前复权)
all_symbols = [s for reps_list in reps.values() for s in reps_list]
end = int(datetime.now().timestamp() * 1000)
start = int((datetime.now() - timedelta(days=90)).timestamp() * 1000)
hist_dfs = qd.klines.batch(
all_symbols,
period="1d",
start_time=start,
end_time=end,
adjust="forward", # 服务端前复权,收益率计算更准确
to_dataframe=True,
show_progress=True
)
# 4. 计算各板块的动量得分(近20日平均收益率)
momentum = {}
for ind, symbols in reps.items():
returns = []
for sym in symbols:
if sym in hist_dfs and not hist_dfs[sym].empty:
d = hist_dfs[sym].sort_values('trade_date')
if len(d) >= 20:
ret = d['close'].iloc[-1] / d['close'].iloc[-20] - 1
returns.append(ret)
if returns:
momentum[ind] = sum(returns) / len(returns)
# 5. 综合打分:当日涨跌幅(40%) + 短期动量(60%)
scores = {}
for ind in top_industries:
daily_ret = ranking[ranking['industry'] == ind]['mean'].values[0]
mom = momentum.get(ind, 0)
# 归一化后加权
scores[ind] = 0.4 * daily_ret + 0.6 * mom
print("\n🔥 综合评分最高的潜在领涨板块:")
for ind, score in sorted(scores.items(), key=lambda x: x[1], reverse=True)[:5]:
print(f" {ind}: 综合得分 {score*100:.2f}%")
数据预览:
- 全A股实时行情:5500+条记录,18个字段
- 板块分组聚合:毫秒级输出排名
- 批量历史K线:支持前复权,避免未来函数
四、交易员避坑指南
避坑1:板块分类别用“代码前缀法”。 文章示例中用代码前缀只是演示,实际做策略一定要用专业的行业分类数据(申万一级/二级、中信行业分类等)。代码前缀无法准确区分行业——同样是60开头的票,有白酒有银行有煤炭,混在一起算出来的板块涨跌幅毫无意义。
避坑2:轮动周期别太短。 很多新手做日频轮动,今天买这个板块明天换那个,手续费和滑点直接把收益吃光。建议至少用 5日或10日 作为轮动周期,过滤掉短期噪音。
避坑3:注意停牌股的处理。 全市场行情快照中,停牌股的 last_price 可能等于 prev_close,涨跌幅为0。如果板块里有大量停牌股,会拉低板块平均涨幅,造成误判。建议过滤掉停牌股(可通过成交量判断)再做聚合。
五、常见问题解答(FAQ)
Q1: QuantDash 的全市场行情是实时数据吗?延迟大概多少?
A: 是的,qd.quotes.get() 返回的是实时行情快照,延迟在毫秒级。适合做盘中板块轮动监控和异动预警。
Q2: 我可以同时监控A股和美股的板块轮动吗?
A: 完全可以。QuantDash 支持统一代码后缀,A股用 .SH/.SZ,美股用 .US,港股用 .HK。你只需在 symbols 列表中混合传入不同市场的代码,qd.klines.batch() 会自动识别并拉取对应市场的数据。
Q3: 板块轮动策略的回测怎么做?
A: 使用 QuantDash 的 klines.batch() 批量获取历史日K线(period="1d"),配合 start_time 和 end_time 指定回测区间。注意设置 adjust='forward' 使用服务端前复权数据,避免回测中出现未来函数。
🔗 相关资源与延伸阅读
🚀 QuantDash 官网:https://quantdash.net/
📖 官方 Python SDK 文档:https://docs.quantdash.net/
⭐ GitHub 开源仓库:https://github.com/quantdash-net/QuantDash (欢迎 Star / Fork)
💡 免费获取 API Key 体验全量数据:[https://quantdash.net/dashboard/keys/](https://quantdash.net/dashboard/keys/

