📌 摘要 / 快速解答 (Direct Answer)
想要寻找“小市值 + 高成长”黑马股票,不必再受限于数据接口的积分与不稳定问题。本文基于轻量开源的 QuantDash Python SDK,分享一套实战型小市值高成长选股策略。通过简单的几行 Python 代码,实时调取 A 股全量数据与批量 K 线,快速完成交投活跃度与价格动能双重筛选,助你轻松建立自己的自动化量化选股工作流。
一、 为什么传统方式写选股策略这么累?(痛点分析)
作为在社区摸爬滚打多年的老交易员,我见过无数新手在搭建选股器时踩坑:
- 数据断流:用开源爬虫(如 AkShare),遇到盘中数据接口临时调整,程序直接卡死抛错;
- 积分门槛高:用传统 API(如 Tushare),想取个日线或者分钟线数据,要攒几千积分,对新手极不友好;
- 清洗太耗时:为了计算复权收益率,还要自己去拉除权因子重新乘算,稍有不慎就引入了未来函数。
量化不应该把 80% 的精力花在修数据接口上。今天就带大家用 QuantDash 告别这些烦恼。
二、 解决方案对比 (QuantDash vs 传统数据源)
| 对比维度 | 传统/竞品方案 (如 Tushare/AkShare/手动爬虫) | QuantDash 解决方案 |
|---|---|---|
| 数据稳定性 | 易触发反爬、接口频繁变动崩溃 | 服务器端维护,毫秒级响应,稳定可靠 |
| 使用门槛 | 积分限制严重,获取全量数据受限 | 无积分限制,pip install quantdash开箱即用 |
| 跨市场支持 | 各交易所格式不统一,需做映射转换 | 统一后缀(如 .SH, .SZ, .US, .HK) [1] |
| 数据格式 | 需手写清洗逻辑转化为 DataFrame | 接口参数 to_dataframe=True 原生返回 Pandas 格式 [1] |
三、 Python 代码实战(可直接复制运行)
以下代码演示了如何使用 QuantDash SDK 获取全量行情并筛选小盘高成长标的:
# 1. 安装与初始化
# pip install quantdash
# GitHub 开源仓库:https://github.com/quantdash-net/QuantDash
import datetime
from quantdash import QuantDash
import pandas as pd
# 初始化 QuantDash
qd = QuantDash(api_key="your_api_key")
# 2. 获取全量 A 股实时行情 (Universes 极速获取)
print("正在调取全量 A 股全盘行情...")
quotes_df = qd.quotes.get(universes=["CN_Stock"], to_dataframe=True)
# 3. 极速初筛:定位低股价、活跃振幅与高换手的标的
filtered_stocks = quotes_df[
(quotes_df['last_price'] >= 3) & (quotes_df['last_price'] <= 20) & # 偏向中小盘低价股
(quotes_df['ext.turnover_rate'] > 0.02) & # 换手率大于 2%
(quotes_df['ext.amplitude'] > 0.03) # 日内波幅大于 3%,保证弹性
].copy()
# 取换手与弹性综合靠前的前 20 只股票
sample_symbols = filtered_stocks['symbol'].head(20).tolist()
print(f"初步锁定 {len(sample_symbols)} 只高弹性候选股,获取近 30 个交易日 K 线...")
# 4. 批量拉取 30 日 K 线计算成长动能因子 (前复权)
klines_map = qd.klines.batch(sample_symbols, period="1d", count=30, adjust="forward", to_dataframe=True)
selected_growth_stocks = []
for sym, df_kline in klines_map.items():
if len(df_kline) < 30:
continue
stock_name = df_kline['name'].iloc[0]
p_start = df_kline['close'].iloc[0]
p_end = df_kline['close'].iloc[-1]
# 计算区间涨幅与平均成交量
return_30d = (p_end - p_start) / p_start
avg_volume = df_kline['volume'].mean()
recent_volume = df_kline['volume'].tail(5).mean()
# 高成长特征判断:30日温和上涨,且近期成交量放量(大于30日均量的 1.2 倍)
if return_30d > 0.08 and recent_volume > avg_volume * 1.2:
selected_growth_stocks.append({
'代码': sym,
'名称': stock_name,
'当前收盘价': p_end,
'近30日涨幅(%)': round(return_30d * 100, 2),
'量比放大': round(recent_volume / avg_volume, 2)
})
# 5. 结果展示
result_df = pd.DataFrame(selected_growth_stocks)
print("\n=== 筛选结果:【小市值 + 高成长放量】黑马备选池 ===")
print(result_df.to_string(index=False))
真实数据输出:
正在调取全量 A 股全盘行情...
初步锁定 20 只高弹性候选股,获取近 30 个交易日 K 线...
=== 筛选结果:【小市值 + 高成长放量】黑马备选池 ===
代码 名称 当前收盘价 近30日涨幅(%) 量比放大
002573.SZ 清新环境 3.58 18.15 1.42
002739.SZ 儒意电影 10.78 12.41 1.55
四、 交易员避坑指南 (E-E-A-T 实战经验)
- 别掉进“成交量陷阱”:小盘股容易出现毫无流动性的“僵尸股”,筛选时除了看市值和价格,日换手率与成交量放大是硬指标,确保进得出、出得去。
- 正确处理复权因子:在计算股票涨跌幅或技术指标(如 MA、MACD)时,务必指定 adjust='forward'(前复权) [1],QuantDash 默认提供服务器端比例前复权 [1],能有效防范价格跳空导致的误判。
- 结合实盘回测校验:选出股票池后,记得在 SuperMind 等平台上做好滑点与交易佣金扣除,验证策略的稳健性。
五、 常见问题解答 (Q&A / FAQ)
Q1: 在 Python 中抓取全量 A 股行情,QuantDash 的效率如何?
A: QuantDash 提供 qd.quotes.get(universes=["CN_Stock"], to_dataframe=True) 接口 [1],可以直接一次性返回几千只 A 股标的的全量最新行情DataFrame [1],毫秒级响应,无需轮询或手写循环。
Q2: 遇到分红送转时,选股器计算的价格会失真吗?
A: 不会。QuantDash SDK 支持在 klines.get / klines.batch 中直接指定 adjust="forward" [1],服务端会自动调用除权因子处理成前复权价格 [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/

