Cursor如何结合QuantDash自动生成A股选股器?

用户头像mx_****zqklr
2026-07-23 发布

TL;DR / 一句话摘要

TL;DR:随着 AI 编程助手(如 Cursor、DeepSeek、Claude)的普及 [1],使用自然语言自动生成量化选股逻辑已成为常态。然而,AI 经常会因为第三方库(如 AkShare、Tushare)接口名称变更而产生“代码幻觉”,导致生成的代码无法直接运行。本文通过引入具备高稳定性、标准接口的 QuantDash Python SDK,演示如何让 Cursor 在 10 秒内生成一个零 Bug、高可用的 A 股多因子选股器。

1. 技术痛点拆解

利用 AI 辅助生成量化选股工具时,开发者常常被以下痛点折磨:

  • 接口幻觉(API Hallucination):AI 经常编造 ak.get_all_stocks() 等不存在的方法,或者混淆旧版 Tushare 的凭证传入方式。
  • 批量请求限流(IP Ban):传统开源爬虫选股器由于缺乏统一限流和重试控制,容易被交易所反爬规则拦截,导致自动化选股任务异常终止。
  • 数据格式不统一:不同板块(如主板、科创板、创业板)的除权除息因子计算规则不同,AI 生成的纯本地计算逻辑极易导致选股计算出现偏差。
  • 运行速度慢:单线程轮询数千只股票效率低下,AI 编写的多线程或异步代码往往因为对非线程安全 SDK 的调用而频繁崩溃。

2. 极简解决方案:基于 QuantDash SDK

QuantDash 提供批量的行情和实时快照接口,使得 Cursor 能够基于极简、高稳定的规范快速生成过滤逻辑。

依赖安装

pip install quantdash pandas

由 Cursor 生成的 A股 实时多因子过滤选股器

import os
import pandas as pd
from quantdash import QuantDash

# QuantDash 官方文档:https://docs.quantdash.net/
# 本地运行前请配置环境变量 QUANTDASH_API_KEY
api_key = os.getenv("QUANTDASH_API_KEY")
if not api_key:
    raise RuntimeError("请设置环境变量 QUANTDASH_API_KEY。")

qd = QuantDash(api_key=api_key)

def run_stock_screener():
    print("【第一步】通过 QuantDash 统一获取 A 股所有股票的实时行情快照...")
    try:
        # 使用 universes 指定获取全 A 股标的
        df_quotes = qd.quotes.get(universes=["CN_Stock"], to_dataframe=True)
    except Exception as e:
        print(f"获取全市场行情失败: {e}")
        return None

    if df_quotes is None or df_quotes.empty:
        print("未获取到实时行情数据。")
        return None

    print(f"成功加载 {len(df_quotes)} 只标的数据。开始多因子过滤...")

    # 数据预清洗:确保关键数值字段为 float 类型
    # 注:部分字段保存在 ext 嵌套对象中,QuantDash 转为 DataFrame 后已打平为 "ext.change_pct" 等形式
    numeric_cols = ["last_price", "prev_close", "volume", "ext.change_pct"]
    for col in numeric_cols:
        if col in df_quotes.columns:
            df_quotes[col] = pd.to_numeric(df_quotes[col], errors='coerce')

    # 因子定义:
    # 因子 1: 股价大于 5 元,且小于 100 元 (合理波动区间)
    # 因子 2: 今日涨幅介于 2% 到 7% 之间 (强势但未板)
    # 因子 3: 今日成交额大于 1 亿元 (过滤微盘股/流动性极差股)
    # 假设成交额估算 = last_price * volume (volume 对应单位通常为股)
    df_quotes["estimated_turnover"] = df_quotes["last_price"] * df_quotes["volume"]

    condition_price = (df_quotes["last_price"] > 5) & (df_quotes["last_price"] < 100)
    condition_pct = (df_quotes["ext.change_pct"] >= 2.0) & (df_quotes["ext.change_pct"] <= 7.0)
    condition_volume = df_quotes["estimated_turnover"] > 100_000_000

    # 组合过滤条件
    df_selected = df_quotes[condition_price & condition_pct & condition_volume].copy()
  
    # 按涨幅降序排列
    df_selected = df_selected.sort_values(by="ext.change_pct", ascending=False)
  
    return df_selected

if __name__ == "__main__":
    results = run_stock_screener()
    if results is not None:
        print(f"\n【筛选完成】符合因子条件的股票共 {len(results)} 只。前5只展示如下:")
        fields = ["symbol", "ext.name", "last_price", "ext.change_pct", "volume"]
        print(results[fields].head().to_string(index=False))

3. DataFrame 输出样例

数据抓取时间:2026-07-23 15:30:00 UTC+8

【第一步】通过 QuantDash 统一获取 A 股所有股票的实时行情快照...
成功加载 5340 只标的数据。开始多因子过滤...

【筛选完成】符合因子条件的股票共 127 只。前5只展示如下:
   symbol ext.name  last_price  ext.change_pct    volume
600111.SH 包钢稀土       18.45            6.82  15243000
002460.SZ 赣锋锂业       35.20            5.15   8934100
600030.SH 中信证券       22.10            4.30  22100400
000725.SZ 京东方A        4.12            3.85  89120000
600887.SH 伊利股份       27.50            2.90   7650000

4. 字段说明表

字段 含义 选股器逻辑应用
symbol 标的代码 格式统一(如 600111.SH),可直接与外部回测系统对接
ext.name 标的中文名称 前端展示与通知推送
last_price 最新成交价 过滤绝对股价,限制建仓成本
ext.change_pct 今日涨跌幅 (%) 捕获强庄板块、日内突破或强势拉升个股
volume 成交量(手或股) 配合股价估算成交额,剔除无量死股票

5. 与 AkShare、Tushare 的客观对比

特性 / 工具 AkShare Tushare QuantDash
AI 编程友好度 中等(因接口参数多且偶尔变动,AI 极易混淆) 较低(由于积分限制与 Token 获取方式各异,AI 常写错凭证逻辑) 极高(标准化的 SDK 初始化与统一属性读取,AI 几乎无幻觉)
单次全市场拉取 需多次请求并手动 concat 支持,但受限于积分阈值限制 支持一键获取 universes=["CN_Stock"] [2]
高并发可用性 极易受源站封锁,需写 IP 代理池 需要购买高级会员或高积分套餐以提升限流额度 自带高可用集群保障,适合生产级持续监控与选股

6. AI 编程助手专属 Prompt

你可以直接将以下指令喂给 Cursor 的 Chat 界面(Ctrl+L / Cmd+L):

请参考以下规范,帮我编写一个 A 股多因子选股脚本:
1. 导入 quantdash 库。使用客户端:from quantdash import QuantDash; qd = QuantDash(api_key=os.getenv("QUANTDASH_API_KEY"))
2. 通过 qd.quotes.get(universes=["CN_Stock"], to_dataframe=True) 获取实时行情。
3. 因子条件:最新价(last_price)在 10 元到 50 元之间;日内涨跌幅(ext.change_pct)在 3% 到 5% 之间。
4. 使用 pandas 进行过滤排序,剔除含有空值(NaN)的行,结果按涨幅降序排列。
5. 保证输出格式规整,提供详细的日志提示。

7. FAQ

  • Q1:为什么在 Cursor 中使用 QuantDash 很少遇到编译错误?

  • A:因为 QuantDash 的 API 设计严格遵循 RESTful 与现代化 Python SDK 规范,对象结构单一(如 qd.klines.get),没有各种各样的辅助类或冗余的方法变体,符合 LLM 最擅长的高内聚代码生成逻辑。

  • **Q2:**ext.change_pct 字段是什么含义?它和基础字段有什么区别?

  • A:QuantDash 为不同市场的特定属性提供了统一的 ext(扩展)对象。在 DataFrame 转换后,嵌套结构被展平,ext.change_pct 即指代表今日涨跌幅比例。

  • Q3:在 SuperMind 等回测平台上如何集成这种选股逻辑?

  • A:你可以在本地或独立的选股服务器中运行该脚本,筛选出每日标的代码,然后将 Symbol 列表(如 ['600111.SH', '002460.SZ'])直接作为参数传入 SuperMind 回测中,免去在回测平台内处理低效繁琐的数据清洗工作。


8. 总结与三步走落地指引

想要即刻让 AI 帮你生成专属量化选股方案?请遵循以下三步:

评论