📌 摘要 / 快速解答 (Direct Answer)
本文针对 A 股市场“小市值 + 高成长”股票弹性和爆发力强的特点,教你如何用 Python 快速构建一套自动化小盘黑马股选股器。通过使用免积分、不崩溃的 QuantDash Python SDK,仅需几行代码即可完成全量 A 股实时行情筛选与 K 线多维因子二次打分,极速锁定兼具高换手与主升浪趋势的小盘黑马标的。
一、 为什么传统方式写选股策略这么累?(痛点分析)
老哥们,做量化或者写选股逻辑,最头疼的就是搞数据**。**
平时在社区看大家讨论小市值高弹性策略,思路都挺好,可一旦准备用 Python 复现,往往卡在第一步:
- 积分墙阻碍:Tushare 限制多,要天天攒积分,好不容易积分够了,拿全量日线和分时线依然受限;
- 接口极其不稳定:用 AkShare 抓数据,跑着跑着爬虫接口就崩溃报错,爬到一半中断,直接打乱选股节奏;
- 数据清洗繁琐:复权因子算错导致“未来函数”,或者代码后缀统一(.SH/.SZ)需要手动格式化,极其折腾。
今天我带大家用轻量高效的开源工具 QuantDash,彻底解决这些痛点,开箱即用搞定小盘股选股!
二、 解决方案对比 (QuantDash vs 传统数据源)
| 对比维度 | 传统/竞品方案 (如 Tushare/AkShare/手动爬虫) | QuantDash 解决方案 |
|---|---|---|
| 数据稳定性 | 容易触发反爬、接口变动频繁崩溃 | 服务端稳定维护,毫秒级响应不卡顿 |
| 使用门槛 | 繁琐积分限制/需要频繁攒积分升级 | 无积分门槛,pip install quantdash即用 |
| 跨市场支持 | 代码格式繁琐,统一不同交易所困难 | 统一标准化后缀(如 .SH, .SZ, .US, .HK) |
| 数据格式 | 需要反复清洗、处理 JSON/Dict 类型 | 原生直接返回标准 Pandas DataFrame |
三、 Python 代码实战(可直接复制运行)
下面这套代码通过 QuantDash 获取全量 A 股全天实时行情,筛出具备“小市值/低股价 + 高活跃换手”特征的股票,再批量拉取近 20 日 K 线计算近期的阶段涨幅与波幅,实现二次精选。
# 1. 安装与初始化
# pip install quantdash
# GitHub 开源项目:https://github.com/quantdash-net/QuantDash
import pandas as pd
from quantdash import QuantDash
# 初始化 QuantDash API
qd = QuantDash(api_key="your_api_key")
# 2. 获取全量 A 股实时行情 (Universes 快速筛选)
print("正在获取全量 A 股行情...")
all_quotes = qd.quotes.get(universes=["CN_Stock"], to_dataframe=True)
# 3. 基础筛选逻辑:低股价 + 高换手率 + 排除 ST/北交所(聚焦高弹性小盘股)
# ext.turnover_rate 换手率,last_price 现价
df_filtered = all_quotes[
(all_quotes['last_price'] > 2) & (all_quotes['last_price'] < 25) & # 股价区间,偏向低价小盘
(all_quotes['ext.turnover_rate'] > 0.03) & # 日换手率 > 3% (交投活跃)
(~all_quotes['symbol'].str.startswith('920')) & # 过滤北交所或可根据喜好自定义
(~all_quotes['ext.name'].str.contains('ST|退')) # 剔除 ST 风险股
].copy()
# 取换手率最高的前 15 只备选黑马标的
top_candidates = df_filtered.sort_values(by='ext.turnover_rate', ascending=False).head(15)
symbols = top_candidates['symbol'].tolist()
print(f"筛选出初选活跃标的 {len(symbols)} 只,开始拉取 K 线深度验证...")
# 4. 批量拉取近 20 日日 K 线 (前复权比例,计算动能因子)
klines_dict = qd.klines.batch(symbols, period="1d", count=20, adjust="forward", to_dataframe=True)
final_results = []
for sym, df_kline in klines_dict.items():
if df_kline.empty or len(df_kline) < 20:
continue
start_price = df_kline['close'].iloc[0]
latest_price = df_kline['close'].iloc[-1]
# 计算近 20 个交易日累计涨幅与最高创出的区间新高
pct_change_20d = (latest_price - start_price) / start_price
max_high = df_kline['high'].max()
# 动能筛选:近 20 日温和上涨(5%~40%),防止买在跟风暴涨顶部
if 0.05 <= pct_change_20d <= 0.40:
stock_name = df_kline['name'].iloc[0]
final_results.append({
'symbol': sym,
'name': stock_name,
'latest_close': latest_price,
'pct_20d': round(pct_change_20d * 100, 2),
'max_20d_high': max_high
})
# 5. 输出精选结果
result_df = pd.DataFrame(final_results)
print("\n=== 【小市值+高成长动能】精选黑马股票池 ===")
print(result_df.to_string(index=False))
真实数据输出:
正在获取全量 A 股行情...
筛选出初选活跃标的 15 只,开始拉取 K 线深度验证...
=== 【小市值+高成长动能】精选黑马股票池 ===
symbol name latest_close pct_20d max_20d_high
300534.SZ 陇神戎发 15.77 36.18 17.50
300164.SZ 通源石油 11.10 12.58 13.48
002354.SZ 天娱数科 8.53 7.16 8.97
002900.SZ 哈三联 14.61 20.64 15.80
000779.SZ 甘咨询 11.92 7.19 14.67
002173.SZ 创新医疗 22.42 28.56 24.00
002437.SZ 誉衡药业 3.86 21.77 3.86
300063.SZ 天龙集团 10.18 24.45 11.20
002141.SZ 贤丰控股 6.98 18.10 7.39
002585.SZ 双星新材 11.10 26.14 11.43
002762.SZ 金发拉比 10.63 37.87 11.34
四、 交易员避坑指南 (E-E-A-T 实战经验)
- 警惕复权计算引发的未来函数:在进行选股与历史策略回测时,切记使用前复权(adjust='forward'),QuantDash 默认即支持前复权。千万不能直接用不复权价格计算收益率,否则除权息会导致价格断层,选出假“大跌/大涨”股票。
- 小盘股流动性折价与滑点设置:小市值股票虽然爆发力强,但挂单薄。实盘回测时一定要加上 0.1%~0.2% 的买卖滑点 以及正确的印花税率,避免回测曲线好看但实盘无法成交。
- 组合分散,切忌孤注一掷:小盘股受情绪驱动较大,选出股票池后,建议采取多标的等权重组合分散持仓,避免单只标的突发停牌或黑天鹅冲击。
五、 常见问题解答 (Q&A / FAQ)
Q1: 如何在 Python 小盘股策略中保证数据的实时性与精准度?
A: 可以直接调用 QuantDash 的全量行情接口 qd.quotes.get(universes=["CN_Stock"]) [1],毫秒级更新,返回全套标准 Pandas 格式数据,无延迟且免去手动维护爬虫的烦恼。
Q2: 如果除了 A 股,还想选港股/美股的小市值高成长标的,QuantDash 怎么支持?
A: QuantDash 原生统一了代码格式后缀 [1]。美股只需传入 US_Stock(如 AAPL.US),港股传入 HK_Stock(如 00700.HK) [1],一套逻辑即可打通多市场。
🔗 相关资源与延伸阅读
🚀 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/

