DEV Community

asdj jkdsa
asdj jkdsa

Posted on

基于Tushare+LLM的A股量化分析系统实战:从数据采集到智能选股

Tushare + AI 量化分析实战:从数据采集到智能选股

本文介绍如何基于 Tushare Pro 搭建一套完整的 A股量化分析系统,支持批量分析 4000+ 只股票,LLM 驱动的情绪评分和智能选股。

一、项目背景

我在研究 A股量化投资时,需要一个能够:

  1. 批量采集全市场股票数据
  2. 自动分析每只股票的技术面和消息面
  3. 智能筛选符合特定条件的标的

传统方式需要人工筛选,效率低下。于是我搭建了 DSA(Deep Stock Analysis)系统。

二、系统架构

数据源层(Tushare/Akshare/Eastmoney/Sina)
         ↓
  DataFetcherManager(多源自动切换)
         ↓
  Pipeline(数据处理 + 特征提取)
         ↓
  LLM Agent(DeepSeek/MiniMax)
         ↓
  SQLite(本地存储)+ 飞书(推送)
Enter fullscreen mode Exit fullscreen mode

核心设计理念

  • 多数据源冗余:一个失败自动切换下一个
  • LLM 驱动:用大模型做情绪分析和选股决策
  • 批量处理:支持同时分析上千只股票

三、数据采集层

3.1 Tushare Pro 数据获取

import tushare as ts

pro = ts.pro_api('your_token')

# 获取日线数据
df = pro.daily(
    ts_code='002460.SZ',  # 赣锋锂业
    start_date='20260301',
    end_date='20260331'
)
print(df.head())
Enter fullscreen mode Exit fullscreen mode

Tushare 积分说明
| 积分 | 可用接口 |
|------|---------|
| 120 | daily(日线)、realtime(实时) |
| 2000 | 财报、龙虎榜、指数 |

3.2 多数据源自动切换

class DataFetcherManager:
    """多数据源统一抽象"""

    def __init__(self):
        self.fetchers = [
            TushareFetcher(),      # 优先 Tushare
            AkshareFetcher(),       # 备选 Akshare
            EastmoneyFetcher(),     # 备选 东财
            SinaFetcher(),          # 备选 新浪
        ]

    def get_realtime_quote(self, code):
        """遍历数据源,失败自动切换"""
        for fetcher in self.fetchers:
            try:
                quote = fetcher.get_realtime_quote(code)
                if quote:
                    return quote
            except:
                continue
        return None  # 全部失败
Enter fullscreen mode Exit fullscreen mode

四、LLM 驱动的分析引擎

4.1 分析流程

{
    "code": "002460",
    "name": "赣锋锂业",
    "sentiment_score": 82,      # 情绪评分 0-100
    "trend_prediction": "强烈看多",
    "operation_advice": "持有",  # 买入/持有/观望/卖出
    "confidence_level": "",
    "decision_type": "hold"
}
Enter fullscreen mode Exit fullscreen mode

4.2 Prompt 设计

ANALYSIS_PROMPT = """
你是一个专业的A股分析师。请根据以下数据,分析{stock_name}({stock_code}):

实时行情:{realtime_data}
K线形态:{kline_pattern}
板块信息:{sector_info}
近期新闻:{news_summary}

请输出JSON格式的分析结果:
{{
    "sentiment_score": 0-100的评分,
    "trend_prediction": "强烈看多/看多/震荡/看空/强烈看空",
    "operation_advice": "买入/持有/观望/卖出",
    "confidence_level": "高/中/低",
    "decision_type": "buy/hold/wait/sell"
}}
"""
Enter fullscreen mode Exit fullscreen mode

五、批量分析实战

5.1 新能源板块筛选

# 新能源板块相关股票
new_energy_stocks = [
    ('002460', '赣锋锂业'),  # 锂矿龙头
    ('300750', '宁德时代'),  # 电池巨头
    ('600110', '诺德股份'),  # 锂电铜箔
    ('002594', '比亚迪'),    # 新能源车
]

# 批量分析
for code, name in new_energy_stocks:
    result = analyzer.analyze(code)
    print(f"{name}: 情绪={result['sentiment_score']}, 建议={result['operation_advice']}")
Enter fullscreen mode Exit fullscreen mode

2026-04-01 新能源板块分析结果

代码 名称 收盘价 涨跌 情绪分 建议
603158 腾龙股份 12.28 +10.04% 78 观望
600875 东方电气 38.28 +9.22% 68 持有
300750 宁德时代 405.71 +1.00% 72 持有
002460 赣锋锂业 77.31 -1.37% 82 持有

5.2 全市场扫描

# 获取全部 A股代码
all_codes = pro.stock_basic(list_status='L')

# 批量分析(带进度)
for i, row in tqdm(all_codes.iterrows(), total=len(all_codes)):
    try:
        result = analyzer.analyze(row['ts_code'][:6])
        save_to_db(result)
    except Exception as e:
        log_error(row['ts_code'], str(e))
Enter fullscreen mode Exit fullscreen mode

六、飞书定时推送

6.1 持仓日报

from lark_oapi import Client

def send_daily_report(positions):
    """发送持仓日报到飞书"""
    client = Client.builder()\
        .app_id(APP_ID)\
        .app_secret(APP_SECRET)\
        .build()

    content = "📊 持仓股早报\n\n"
    for pos in positions:
        content += f"🔋 {pos['name']} ({pos['code']})\n"
        content += f"   现价: {pos['price']} | 涨跌: {pos['pct']}%\n"
        content += f"   情绪: {pos['sentiment']}/100 | 建议: {pos['advice']}\n\n"

    # 发送消息
    client.im.v1.message.create(
        receive_id=USER_ID,
        msg_type="text",
        content=json.dumps({"text": content})
    )
Enter fullscreen mode Exit fullscreen mode

七、Tushare 积分获取经验

7.1 积分等级对照

积分 可用数据 获取难度
0 仅基础行情 注册即得
120 日线、实时行情 完善信息即可
500 资金流、板块 邀请5个用户
2000 财报、龙虎榜 写2-3篇文章

7.2 我的积分获取经历

  1. 注册 + 完善信息:获得 120 积分 ✅
  2. 开源项目贡献:向 Tushare 提交 GitHub 仓库 ✅
  3. 技术文章发表:在 dev.to/知乎/CSDN 发布教程 ✅
  4. 社区活跃:在 QQ 群帮助解答问题 → 50-200 积分

7.3 快速获取积分建议

1. 发文章(最推荐)
   - 写 Tushare 使用教程
   - 发到知乎/CSDN/掘金
   - 把链接发给群主 → 100-1000积分

2. 邀请用户
   - 每邀请1个有效用户 → +50积分
   - 邀请5个用户 → +250积分

3. 学生认证
   - 联系 Tushare 高校群
   - 提交学生证 → 直接送2000积分
Enter fullscreen mode Exit fullscreen mode

八、总结

基于 Tushare + LLM 的量化分析系统,让选股过程从人工筛选变为智能分析:

优势

  • 数据获取自动化(多源切换)
  • 分析过程智能化(LLM 驱动)
  • 结果存储本地化(SQLite)
  • 报告推送定时化(飞书)

局限

  • Tushare 免费接口有限(需要积分解锁更多数据)
  • LLM 分析需要 API 成本
  • 量化策略需要回测验证

下一步计划

  • 接入 Level2 行情(资金流更精准)
  • 增加回测模块(验证策略有效性)
  • 支持港股和美股

项目地址:https://github.com/shuwey/dsa
Tushare 注册:https://tushare.pro/register

Top comments (0)