{"repo":"simonlin1212/TradingAgents-astock","free":true,"listed":false,"github":"https://github.com/simonlin1212/TradingAgents-astock","clone":"git clone https://github.com/simonlin1212/TradingAgents-astock.git","description":"A股多Agent投研框架 — 适配A股数据源(龙虎榜/游资/解禁等)，7位分析师基于A股规则的辩论决策，基于TradingAgents深度改造，适配大A。A-share multi-agent investment research framework — 7 AI analysts, bull/bear debate, risk assessment。","language":"Python","stars":2856,"topics":["a-share","ai-agent","china-stocks","claude","fintech","investment-research","langgraph","llm","multi-agent","python","quantitative-finance","trading-agents"],"license":"Apache-2.0","category":"financial_data_toolkit","readme_excerpt":"<p align=\"center\"><b>简体中文</b> | <a href=\"README_en.md\">English</a></p>\n\n<h1 align=\"center\">TradingAgents-Astock</h1>\n\n<p align=\"center\">\n  基于 <a href=\"https://github.com/TauricResearch/TradingAgents\">TauricResearch/TradingAgents</a>（65K ⭐）的 A 股深度特化 fork<br>\n  全 Apache 2.0 开源 · pip install 即跑 · 零外部服务依赖\n</p>\n\n<p align=\"center\">\n  <b>⚠️ 本项目是 <a href=\"https://arxiv.org/abs/2412.20138\">TradingAgents 论文</a>框架的工程实现与研究复现，面向研究与教学。<br>\n  不构成任何投资建议，也不提供任何投资服务。</b>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/simonlin1212/tradingagents-astock/stargazers\"><img alt=\"Stars\" src=\"https://img.shields.io/github/stars/simonlin1212/tradingagents-astock?style=social\"/></a>\n  <a href=\"https://github.com/simonlin1212/tradingagents-astock/network/members\"><img alt=\"Forks\" src=\"https://img.shields.io/github/forks/simonlin1212/tradingagents-astock?style=social\"/></a>\n  <a href=\"https://arxiv.org/abs/2412.20138\"><img alt=\"论文\" src=\"https://img.shields.io/badge/论文-arXiv_2412.20138-B31B1B?logo=arxiv\"/></a>\n  <a href=\"./LICENSE\"><img alt=\"License\" src=\"https://img.shields.io/badge/License-Apache_2.0-blue\"/></a>\n  <a href=\"./CHANGES_FROM_UPSTREAM.md\"><img alt=\"改动记录\" src=\"https://img.shields.io/badge/改动记录-CHANGES-orange\"/></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"#为什么做这个-fork\">为什么做这个 Fork</a> ·\n  <a href=\"#与上游对比\">与上游对比</a> ·\n  <a href=\"#架构概览\">架构概览</a> ·\n  <a href=\"#7-个-analyst-角色\">Analyst 角色</a> ·\n  <a href=\"#数据源\">数据源</a> ·\n  <a href=\"#快速开始\">快速开始</a> ·\n  <a href=\"#web-ui\">Web UI</a> ·\n  <a href=\"#常见问题排错\">排错</a>\n</p>\n\n---\n\n## 为什么做这个 Fork\n\n原版 TradingAgents 是一个出色的多 Agent 投研框架，但它针对美股设计：数据走 Yahoo Finance / Alpha Vantage，分析师不懂 A 股制度，辩论和决策完全面向美股市场。\n\n**本 Fork 的目标**：把 TradingAgents 的多 Agent 辩论架构真正落地到 A 股，不是简单翻译，而是从数据层、Agent 角色、交易规则三个维度做深度特化。\n\n### 核心改造\n\n| 维度 | 原版 | 本 Fork |\n|------|------|---------|\n| **数据源** | Yahoo Finance / Alpha Vantage | mootdx + 东财 + 新浪 + 同花顺（全免费直连） |\n| **Analyst 角色** | 4 个（市场/情绪/新闻/基本面） | **7 个**（+政策分析师/游资追踪/解禁监控） |\n| **交易规则** | 美股（T+0、无涨跌停） | A 股（T+1、涨跌停、最小手数、交易时段） |\n| **输出语言** | 英文 | 中文报告（内部辩论保持英文以保证推理质量） |\n| **Alpha 基准** | SPY | 沪深 300（CSI 300） |\n\n---\n\n## 与上游对比\n\n| 特性 | 原版 TradingAgents | **本 Fork** |\n|------|-------------------|-------------|\n| 许可证 | Apache 2.0 | **全 Apache 2.0** |\n| 部署依赖 | pip install | **开箱即用** |\n| A 股数据 | ❌ | **mootdx + 东财 + 新浪 + 同花顺（直连 HTTP）** |\n| A 股特化角色 | ❌ | **政策/游资/解禁 3 个深度角色** |\n| A 股交易约束 | ❌ | **T+1/涨跌停/手数/ST 全覆盖** |\n\n---\n\n## 架构概览\n\n```\n┌─────────────────────────────────────────────────────────┐\n│                    7 Analyst 研报生成                      │\n│  Market → Social → News → Fundamentals                   │\n│  → Policy → Hot Money → Lockup                           │\n│         （每个 Analyst 带工具循环）                          │\n├─────────────────────────────────────────────────────────┤\n│               Bull vs Bear 投研辩论                       │\n│         Bull Researcher ←→ Bear Researcher               │\n│               （最多 N 轮辩论）                             │\n├─────────────────────────────────────────────────────────┤\n│              Research Manager 综合研判                     │\n│         （深度思考 LLM，输出投资计划）                       │\n├─────────────────────────────────────────────────────────┤\n│                  Trader 交易方案                          │\n│         （A 股约束：T+1/涨跌停/手数）                       │\n├─────────────────────────────────────────────────────────┤\n│        Aggressive ←→ Conservative ←→ Neutral             │\n│               三方风险辩论                                 │\n├─────────────────────────────────────────────────────────┤\n│            Portfolio Manager 最终决策                      │\n│     （深度思考 LLM，输出评级 + 理由）                       │\n└─────────────────────────────────────────────────────────┘\n```\n\n**双 LLM 设计**：\n- `quick_think_llm`：所有 Analyst、Researcher、Trader、Risk Debater\n- `deep_think_llm`：Research Manager 和 Portfolio Manager（需要综合全局信息做决策）\n\n---\n\n## 7 个 Analyst 角色\n\n### 原版 4 角色（A 股适配）\n\n| 角色 | 职责 | 数据工具 |\n|------|------|---------|\n| 🏪 市场分析师 | K 线形态、技术指标、量价分析 | `get_stock_data`, `get_indicators` |\n| 💬 舆情分析师 | 社交媒体情绪、散户讨论热度 | `get_news` |\n| 📰 新闻分析师 | 行业新闻、公告、宏观事件 | `get_news`, `get_global_news`, `get_insider_transactions` |\n| 📊 基本面分析师 | 财报三表、盈利能力、估值 | `get_fundamentals`, `get_balance_sheet`, `get_cashflow`, `get_income_statement` |\n\n### A 股特化 3 角色（新增）\n\n| 角色 | 职责 | 数据工具 | 为什么需要 |\n|------|------|---------|-----------|\n| 🏛️ 政策分析师 | 监管政策、产业政策、窗口指导 | `get_news`, `get_global_news` | A 股是政策市，政策变化直接影响板块轮动 |\n| 🔥 游资追踪师 | 龙虎榜、大单流向、主力资金动态 | `get_stock_data`, `get_news`, `get_insider_transactions` | 游资是 A 股短线定价的核心力量 |\n| 🔓 解禁监控师 | 限售股解禁、大股东减持、股权质押 | `get_insider_transactions`, `get_news`, `get_fundamentals` | 解禁是 A 股特有的重大供给冲击因素 |\n\n所有 7 个 Analyst 的报告会流入后续的 Bull/Bear 辩论和三方风险辩论，确保 A 股特色因素贯穿整条决策链。\n\n---\n\n## 数据源\n\n全部免费，无需 API Key，无积分墙：\n\n| 来源 | 协议 | 提供内容 |\n|------|------|---------|\n| **mootdx** | TCP 7709 | OHLCV K 线、财务快照、F10 文本 |\n| **腾讯财经** | HTTP (`qt.gtimg.cn`) | PE / PB / 市值 / 换手率（实时） |\n| **东方财富** | HTTP (datacenter / push2) | 龙虎榜、限售解禁、板块行情、个股信息 |\n| **新浪财经** | HTTP | K 线历史、财报三表 |\n| **同花顺** | HTTP (10jqka) | EPS 一致预期 |\n| **财联社** | HTTP (cls.cn) | 全球财经快讯 |\n| **百度股市通** | HTTP (finance.pae.baidu) | 概念板块分类、资金流向 |\n\n> 完全不依赖 Tushare（积分墙）、Alpha Vantage（海外 API）、Yahoo Finance（不支持 A 股）。\n\n---\n\n> **数据源优先级 & 东财防封（v0.2.11）**：行情 / K线 / 市值 / 财务能从 mootdx（通达信 TCP，不封 IP）或腾讯拿到的，一律走它们；东财只用于它独有的数据（龙虎榜 / 解禁 / 资金流 / 板块 / 个股新闻等）。所有东财请求统一走内置节流入口 `_em_get()`：串行限流（默认间隔 ≥1s + 0.1~0.5s 随机抖动）+ 复用 Keep-Alive 会话，多 Agent 跑批量分析不再触发临时封 IP（东财风控实测：每秒 >5 / 并发 ≥10 / 1 分钟 ≥200 触发封禁）。批量场景可设环境变量 `EM_MIN_INTERVAL=1.5~2` 进一步降速。**仅东财限流，mootdx / 腾讯 / 新浪 / 同花顺 / 财联社 / 百度 不受影响。**\n\n## 快速开始\n\n### 1. 环境准备\n\n```bash\n# Python >= 3.10\ngit clone https://github.com/simonlin1212/tradingagents-astock.git\ncd tradingagents-astock\npip install -e .\n\n# 如需使用 Google Gemini 模型（无 [google] extra，需显式装，见下方 FAQ）：\npip install --no-deps \"langchain-google-genai>=4.0.0\"\npip install \"google-genai>=1.53.0\" \"httpx>=0.28.1\"\n\n# 如需让节点走你个人 Claude Pro/Max 订阅额度而非 API 计费（可选）：\npip install -e \".[agentsdk]\"\n```\n\n> **装完即可用，无需 Docker。** 安装后直接跑 `streamlit run web/app.py`（Web UI）或 `tradingagents`（CLI）即可，详见下方「Web UI」「CLI 方式」两节。Docker 仅是可选的部署方式，本地开发不需要。\n\n### 2. 配置 LLM\n\n> **默认走 API Key 计费**。每次分析需 30-50 次 LLM 调用。\n>\n> **例外（v0.4.0 新增）**：装 `[agentsdk]` 后可让部分或全部节点经 Claude Agent SDK 走你**个人 Claude Pro/Max 订阅额度**，不产生 API 账单。见下方「用个人 Claude 订阅额度」。\n\n在项目根目录创建 `.env` 文件，按你选择的供应商配置：\n\n```bash\n# ── 方案 A：MiniMax（推荐，国内直连，性价比高）──────────\nMINIMAX_API_KEY=sk-xxx\n# 申请地址：https://platform.minimaxi.com/\n\n# ── 方案 B：DeepSeek ─────────────────────────────────\nDEEPSEEK_API_KEY=sk-xxx\n# 申请地址：https://platform.deepseek.com/\n\n# ── 方案 C：智谱 GLM ─────────────────────────────────\nZHIPU_API_KEY=xxx\n# 申请地址：https://open.bigmodel.cn/\n\n# ── 方案 D：通义千问 Qwen ────────────────────────────\nDASHSCOPE_API_KEY=sk-xxx\n# 申请地址：https://dashscope.console.aliyun.com/\n\n# ── 方案 E：OpenAI ───────────────────────────────────\nOPENAI_API_KEY=sk-xxx\n\n# ── 方案 F：Anthropic ────────────────────────────────\nANTHROPIC_API_KEY=sk-ant-xxx\n\n# ── 方案 G：Kimi（Anthropic 兼容 API）────────────────\nANTHROPIC_API_KEY=your-kimi-token\nANTHROPIC_BASE_URL=https://api.kimi.com/coding/\n# ⚠️ 两个都要设。只给 key 不给端点，请求会发到 Anthropic 官方并报\n#    「401 invalid x-api-key」。端点也可以写在 config 的 backend_url 里（见下）。\n# ⚠️ 别用 ANTHROPIC_AUTH_TOKEN——那是 Claude Code CLI 的写法，本项目走 langchain，\n#    只认 ANTHROPIC_API_KEY。\n\n# ── 方案 H：任意 OpenAI 兼容网关（9Router / AI Router / 自建代理）──\nOPENAI_COMPATIBLE_API_KEY=sk-xxx     # 也接受 OPENAI_API_KEY\nBACKEND_URL=https://your-relay.example/v1   # 你的网关地址（也可在 Web 侧栏「API Base URL」填）\n```\n\n### 3. 运行分析\n\n根据你选择的供应商修改 config：\n\n```python\nfrom tradingagents.graph.trading_graph import TradingAgentsGraph\n\n# ── MiniMax 示例（推荐）─────────────────────────────\nconfig = {\n    \"llm_provider\": \"minimax\",\n    \"deep_think_llm\": \"MiniMax-M2.7\",\n    \"quick_think_llm\": \"MiniMax-M2.7-highspeed\",\n    \"output_language\": \"Chinese\",\n}\n\n# ── DeepSeek 示例 ───────────────────────────────────\n# config = {\n#     \"llm_provider\": \"deepseek\",\n#     \"deep_think_llm\": \"deepseek-chat\",\n#     \"quick_think_llm\": \"deepseek-chat\",\n#     \"output_language\": \"Chinese\",\n# }\n\n# ── Anthropic + Kimi 示例 ───────────────────────────\n# config = {\n#     \"llm_provider\": \"anthropic\",\n#     \"deep_think_llm\": \"claude-sonnet-4-6\",\n#     \"quick_think_llm\": \"claude-sonnet-4-6\",\n#     \"backend_url\": \"https://api.kimi.com/coding/\",\n#     \"output_language\": \"Chinese\",\n# }\n\nta = TradingAgentsGraph(debug=True, config=config)\nfinal_state, decision = ta.propagate(\"688017\", \"2026-05-12\")\nprint(decision)\n```\n\n### 4. CLI 方式\n\n```bash\ntradingagents                 # 交互式 CLI\ntradingagents analyze         # 同上（默认命令）\ntradingagents performance     # 决策绩效统计（见下）\ntradingagents --help          # 查看所有选项\n```\n\n### 5. 决策绩效统计（v0.5.2 新增）\n\n想知道**这套流程过往的判断准不准**，跑：\n\n```bash\ntradingagents performance            # 人读的报告\ntradingagents performance --json     # 机器读的 JSON\n```\n\n数据来自记忆日志：每次分析会落一条决策，下次分析同一只股票时自动拉真实行情回填收益与 alpha（对沪深 300）。**统计本身零 LLM 调用**，只读已经落盘的结果。\n\n输出的核心指标是 **`direction_accuracy`（方向正确率）**——**只有它衡量判断准不准**：看多要跑赢、看空要跑输才算对，Hold 不表态不计入。另外给出 `up_rate`（标的上涨占比）与 `outperform_rate`（跑赢沪深300占比），这两个只描述标的怎么走，**与判断对错无关**：给出卖出评级后股价下跌是判断正确，但它不会计入「上涨占比」。\n\n还有按评级、按标的分组，以及一项**评级区分度检验**——五档评级从 Buy 到 Sell，平均 alpha 是否真的单调递减。评级不单调，说明这套流程的评级没有实际区分能力。\n\n几点务必注意：\n\n- **这不是回测，也不是策略业绩。** 每条记录是「某天做出的判断在固定持有期后的表现」：持有窗口互相重叠、没有仓位管理、未计交易成本与冲击成本，样本还可能有选择偏差。\n- **A 股 beta 很强**，跟着大盘涨不代表判断对，所以方向正确率用 alpha 口径判定，看绝对收益容易高估判断力。\n- **样本量分开算**：方向正确率只统计有方向的评级，已结算总数够、但有方向的不足 20 条时，报告会单独提示这个指标仍是噪音。\n- **样本少于 20 条时报告会自己标注「这些比率基本是噪音」**，不要拿三五条记录下结论。\n- 收益解析不出来的记录会被**跳过**而不是当成 0%——后者会把统计悄悄拉向中性。\n\n---\n\n## Web UI\n\n内置 Streamlit 可视化界面，支持在侧边栏选择 LLM 供应商和模型，输入股票代码即可一键分析，适合不写代码的用户。\n\n### 启动\n\n```bash\n# 方式一：命令行启动（推荐）\ntradingagents-web\n\n# 方式二：直接运行\nstreamlit run web/app.py\n```\n\n打开浏览器访问 `http://localhost:8501`。\n\n### 功能\n\n- **模型自选**：侧边栏支持 10 个 LLM 供应商切换（MiniMax/DeepSeek/Qwen/GLM/OpenAI/Anthropic/Google/xAI/OpenRouter/Ollama），外加 **「OpenAI 兼容（自定义 base_url）」** 一档可接任意 OpenAI 兼容网关（9Router / AI Router / 自建代理）\n- **一键分析**：输入 6 位 A 股代码 + 分析日期 +「数据起始日期」（默认本月第一天，可自定义技术分析回溯区间，支持按月/自定义时段分析），点击「开始分析」\n- **实时进度**：12 阶段 pipeline 实时显示（7 分析师 → 质量门控 → 辩论 → 风控 → 决策），所有已完成阶段的报告均可展开查看\n-","default_branch":"main","files":154,"tree":[".dockerignore",".env.enterprise.example",".env.example",".gitignore",".streamlit/config.toml","CHANGELOG.md","CHANGES_FROM_UPSTREAM.md","CLAUDE.md","DEV_LOG.md","Dockerfile","LICENSE","NOTICE","README.md","README_en.md","assets/analyst.png","assets/bmc-qr.png","assets/cli/cli_init.png","assets/cli/cli_news.png","assets/cli/cli_technical.png","assets/cli/cli_transaction.png","assets/researcher.png","assets/risk.png","assets/schema.png","assets/trader.png","assets/web-ui-welcome.png","cli/__init__.py","cli/announcements.py","cli/config.py","cli/main.py","cli/models.py","cli/static/welcome.txt","cli/stats_handler.py","cli/utils.py","docker-compose.yml","examples/run_cases.py","issues/001-mootdx-missing-dependency.md","issues/002-chinese-ticker-crash.md","issues/003-news-api-error.md","issues/004-pyproject-toml-dependencies.md","issues/005-docker-volume-permission.md","main.py","pyproject.toml","requirements.txt","scripts/smoke_structured_output.py","test.py","test_astock.py","test_data_quality.py","tests/conftest.py","tests/test_agent_sdk_provider.py","tests/test_astock_sina_supplement.py","tests/test_capabilities.py","tests/test_checkpoint_resume.py","tests/test_cli_default_command.py","tests/test_deepseek_reasoning.py","tests/test_google_api_key.py","tests/test_lookahead_guard.py","tests/test_market_guard.py","tests/test_market_lookback.py","tests/test_market_prefix_routing.py","tests/test_memory_log.py","tests/test_model_validation.py","tests/test_mootdx_server_selection.py","tests/test_news_data_tools.py","tests/test_openai_compatible_provider.py","tests/test_output_token_limit.py","tests/test_pdf_export.py","tests/test_performance.py","tests/test_progress_pause.py","tests/test_role_llms.py","tests/test_safe_ticker_component.py","tests/test_sentiment_data_tools.py","tests/test_signal_processing.py","tests/test_stock_display.py","tests/test_structured_agents.py","tests/test_ticker_symbol_handling.py","tests/test_version_consistency.py","tests/test_web_history.py","tradingagents/__init__.py","tradingagents/agents/__init__.py","tradingagents/agents/analysts/fundamentals_analyst.py","tradingagents/agents/analysts/hot_money_tracker.py","tradingagents/agents/analysts/lockup_watcher.py","tradingagents/agents/analysts/market_analyst.py","tradingagents/agents/analysts/news_analyst.py","tradingagents/agents/analysts/policy_analyst.py","tradingagents/agents/analysts/social_media_analyst.py","tradingagents/agents/managers/portfolio_manager.py","tradingagents/agents/managers/research_manager.py","tradingagents/agents/quality_gate.py","tradingagents/agents/researchers/bear_researcher.py","tradingagents/agents/researchers/bull_researcher.py","tradingagents/agents/risk_mgmt/aggressive_debator.py","tradingagents/agents/risk_mgmt/conservative_debator.py","tradingagents/agents/risk_mgmt/neutral_debator.py","tradingagents/agents/schemas.py","tradingagents/agents/trader/trader.py","tradingagents/agents/utils/agent_states.py","tradingagents/agents/utils/agent_utils.py","tradingagents/agents/utils/core_stock_tools.py","tradingagents/agents/utils/fundamental_data_tools.py","tradingagents/agents/utils/memory.py","tradingagents/agents/utils/news_data_tools.py","tradingagents/agents/utils/rating.py","tradingagents/agents/utils/signal_data_tools.py","tradingagents/agents/utils/structured.py","tradingagents/agents/utils/technical_indicators_tools.py","tradingagents/dataflows/__init__.py","tradingagents/dataflows/a_stock.py","tradingagents/dataflows/alpha_vantage.py","tradingagents/dataflows/alpha_vantage_common.py","tradingagents/dataflows/alpha_vantage_fundamentals.py","tradingagents/dataflows/alpha_vantage_indicator.py","tradingagents/dataflows/alpha_vantage_news.py","tradingagents/dataflows/alpha_vantage_stock.py","tradingagents/dataflows/config.py","tradingagents/dataflows/interface.py","tradingagents/dataflows/stockstats_utils.py","tradingagents/dataflows/utils.py","tradingagents/dataflows/y_finance.py","tradingagents/dataflows/yfinance_news.py","tradingagents/default_config.py","tradingagents/graph/__init__.py","tradingagents/graph/checkpointer.py","tradingagents/graph/conditional_logic.py","tradingagents/graph/propagation.py","tradingagents/graph/reflection.py","tradingagents/graph/setup.py","tradingagents/graph/signal_processing.py","tradingagents/graph/trading_graph.py","tradingagents/llm_clients/TODO.md","tradingagents/llm_clients/__init__.py","tradingagents/llm_clients/anthropic_client.py","tradingagents/llm_clients/azure_client.py","tradingagents/llm_clients/base_client.py","tradingagents/llm_clients/capabilities.py","tradingagents/llm_clients/claude_agent_sdk_client.py","tradingagents/llm_clients/factory.py","tradingagents/llm_clients/google_client.py","tradingagents/llm_clients/model_catalog.py","tradingagents/llm_clients/openai_client.py","tradingagents/llm_clients/validators.py","tradingagents/performance.py","web/__init__.py","web/app.py","web/components/__init__.py","web/components/progress_panel.py","web/components/report_viewer.py","web/components/sidebar.py","web/history.py","web/launch.py","web/pdf_export.py","web/progress.py","web/runner.py","web/stock_display.py"],"storefront":"/r/simonlin1212","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/simonlin1212/TradingAgents-astock/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}