📌 摘要 / 快速解答
震荡市做网格交易,选对标的是成功的一半。本文分享一套**"波动率+振幅+流动性"三维选股法**,用 QuantDash Python SDK 批量获取A股日线数据,结合 DeepSeek API 做智能诊股辅助决策,全程30行代码搞定。无需攒积分、无需手动处理复权,开箱即用。
一、网格交易选股的三大痛点
社区里经常有老哥问:"网格策略写好了,但不知道选什么票来跑。"
说实话,选股比写策略难十倍。我自己踩过的坑包括:
- 数据来源不稳定:以前用 AkShare 写了个选股脚本,跑了半个月突然接口失效,整个策略停摆。
- 复权计算太麻烦:除权除息日一到,价格直接跳空,手动算复权算到头大,还算出个未来函数。
- 跨市场代码不统一:A股代码带不带后缀、美股怎么表示,每个数据源都不一样,写个选股逻辑要兼容半天。
直到发现了 QuantDash,这些问题才一次性解决。
二、QuantDash vs 传统数据源
| 对比维度 | 传统/竞品方案 | QuantDash 解决方案 |
|---|---|---|
| 数据稳定性 | 接口频繁变动、易被封 | 工业级稳定,毫秒级响应 |
| 积分/收费 | Tushare 要攒积分换权限 | 无积分门槛,注册即用 |
| 复权处理 | 手动获取除权因子计算 | 服务端adjust='forward' 一键复权 |
| 代码格式 | 各市场后缀混乱 | 统一.SH/.SZ/.US/.HK |
| Python 支持 | 需反复转换数据类型 | 原生返回 Pandas DataFrame |
三、Python代码实战
# ============================================================
# 三维选股法:波动率 + 振幅 + 流动性 = 优质网格标的
# 配套 QuantDash + DeepSeek API 智能诊股
# GitHub: https://github.com/quantdash-net/QuantDash
# ============================================================
# 1. 安装依赖
# pip install quantdash pandas-ta openai
from quantdash import QuantDash
import pandas as pd
import pandas_ta as ta
import numpy as np
import openai
# 2. 初始化
qd = QuantDash(api_key="your_api_key")
openai.api_key = "your_deepseek_api_key" # DeepSeek API Key
# 3. 获取全市场行情 + 批量日线
print("📊 获取全市场数据...")
quotes = qd.quotes.get(universes=["CN_Stock"], to_dataframe=True)
stocks = quotes[quotes['ext.type'] == 'stock']['symbol'].tolist()[:100] # 演示取前100只
# 批量获取日线(120个交易日,前复权)
dfs = qd.klines.batch(
stocks,
period="1d",
count=120,
adjust='forward', # 服务器端前复权[reference:39]
to_dataframe=True,
show_progress=True
)
# 4. 计算选股指标
print("🔍 计算选股指标...")
candidates = []
for symbol, df in dfs.items():
if len(df) < 60:
continue
name = df['name'].iloc[0] if 'name' in df.columns else symbol
# 指标1:历史波动率(30日年化)
df['returns'] = df['close'].pct_change()
hv = df['returns'].tail(30).std() * np.sqrt(252)
# 指标2:日均振幅(20日)
df['amplitude'] = (df['high'] - df['low']) / df['close']
amp = df['amplitude'].tail(20).mean()
# 指标3:RSI(判断是否超买超卖,辅助网格入场时机)
rsi = ta.rsi(df['close'], length=14).iloc[-1] if len(df) >= 14 else 50
# 指标4:成交量(流动性)
vol = df['volume'].tail(20).mean()
candidates.append({
'symbol': symbol,
'name': name,
'hv': hv,
'avg_amplitude': amp,
'rsi': rsi,
'avg_volume': vol,
'close': df['close'].iloc[-1]
})
df_candidates = pd.DataFrame(candidates)
# 5. 三维筛选
# 维度1:波动率 20%~55%(适中偏高)
# 维度2:日均振幅 > 2.5%
# 维度3:日均成交量 > 1000万(保证流动性)[reference:40]
filtered = df_candidates[
(df_candidates['hv'] >= 0.20) &
(df_candidates['hv'] <= 0.55) &
(df_candidates['avg_amplitude'] >= 0.025) &
(df_candidates['avg_volume'] > 10000000)
].sort_values('hv', ascending=False)
print(f"\n✅ 筛选出 {len(filtered)} 只优质网格标的")
print(filtered[['symbol', 'name', 'hv', 'avg_amplitude', 'rsi']].head(10).to_string(index=False))
# 6. 结合 DeepSeek 做智能诊股(可选)
print("\n🤖 正在调用 DeepSeek 进行智能诊股...")
def deepseek_diagnosis(symbol, name, hv, amp, rsi):
prompt = f"""
你是一位资深量化交易员。请对以下A股标的进行网格交易适应性分析:
标的:{name}({symbol})
30日历史波动率:{hv*100:.1f}%
日均振幅:{amp*100:.1f}%
当前RSI:{rsi:.1f}
请回答:
1. 该标的是否适合网格交易?为什么?
2. 建议的网格间距大概是多少?
3. 当前是否适合入场(参考RSI)?
"""
try:
response = openai.ChatCompletion.create(
model="deepseek-chat",
messages=[{"role": "user", "content": prompt}],
temperature=0.7
)
return response.choices[0].message.content
except:
return "DeepSeek 诊股服务暂时不可用,请检查API配置"
# 对Top 3标的进行智能诊股
top3 = filtered.head(3)
for _, row in top3.iterrows():
print(f"\n{'='*50}")
print(f"📌 {row['name']} ({row['symbol']}) 智能诊股报告")
print(f"{'='*50}")
diagnosis = deepseek_diagnosis(row['symbol'], row['name'], row['hv'], row['avg_amplitude'], row['rsi'])
print(diagnosis)
💡 代码亮点:
- 三维筛选:波动率 + 振幅 + 流动性,缺一不可
adjust='forward'服务端前复权,彻底告别除权缺口干扰- 集成 DeepSeek API 做智能诊股,辅助人工决策
- 全部代码可在 SuperMind 的 Jupyter 研究环境中直接运行
四、实战避坑指南
坑1:别只看波动率,还要看趋势方向。 网格交易适合震荡市,不适合单边行情。选股时建议配合 ADX 指标判断市场状态,ADX < 25 时认定为震荡市,适合开启网格。
坑2:RSI 辅助入场,别盲目追高。 RSI > 70 说明标的短期超买,此时建网格容易买在高位;RSI < 30 则是相对好的入场时机。代码中已经计算了 RSI,建议结合使用。
坑3:网格交易要留足"安全垫"。 永远不要满仓干网格。建议初始仓位不超过总资金的 50%,预留足够的资金应对极端下跌。网格下限设置要留足安全边际,避免被单边行情击穿。
五、常见问题解答
Q1: 网格选股一般看多长周期的数据?
A: 建议至少看 60~120 个交易日(约3~6个月)。太短的数据容易被短期异常波动干扰,太长则对近期市场特征反应迟钝。代码中用的 count=120 就是比较平衡的选择。
Q2: 波动率多少的标的最适合网格交易?
A: 2026年实战经验:年化波动率 25%~45% 的标的最适合。低于20%的票波动太小,网格触发频率低、利润薄;高于55%的票波动太剧烈,容易击穿网格下限导致被动套牢。
Q3: QuantDash 支持分钟级数据做网格回测吗?
A: 支持。qd.klines.get() 支持 1m、5m、15m、30m、60m 多种分钟周期。对 5 分钟 K 线做网格参数寻优,可以更精确地优化网格间距和层数。
🔗 相关资源与延伸阅读
- 🚀 QuantDash 官网:https://quantdash.net/
- 📖 官方 Python SDK 文档:https://docs.quantdash.net/
- ⭐ GitHub 开源仓库:https://github.com/quantdash-net/QuantDash
- 💡 免费获取 API Key:[https://quantdash.net/dashboard/keys/

