⚠️ 免责声明:本项目仅用于教育和研究目的,不构成任何投资、实际交易建议。投资有风险,决策需谨慎。 再次强调,该系统不涉及任何投资建议,不涉及任何股票推荐,仅用于对于 AI 技术和股市结合感兴趣的朋友。 对 Agent 技术和股市感兴趣者来, 升官发财请往他处。 不再回复任何有关系统给出信息有无用的问题,此系统不构成任何投资建议。
这是一个基于人工智能的投资系统概念验证项目。项目目标是探索如何使用 AI 来辅助投资决策,通过多 Agent 协同工作,结合大型语言模型 (LLM) 的分析能力,提供多角度的市场解读和投资建议。
系统通过模拟不同角色的研究员(多头、空头)和分析师,进行信息收集、分析、辩论,最终形成投资决策。最新的“辩论室智能增强”机制引入 LLM 作为独立第三方,进一步提升决策的客观性和全面性。
多智能体协同 | LLM 深度分析 | 辩论室机制 | 模块化架构 |
| 在多分析师基础上,引入多空研究员,从不同视角分析市场 | 引入大型语言模型进行客观评估和洞察生成 | 通过多方辩论达成更全面的决策 | 各 Agent 独立运作,易于扩展和维护 |

新版本的架构做出了以下改进:
另外,优化了终端输出,减少了不必要的详细数据显示,使输出更加清晰易读。
data/akshare_cache.db SQLite 缓存,持久化 AkShare 输出的实时行情 / 财务指标 / 三大报表 / 日线行情 / 新闻数据;所有表的列名与 AkShare 保持一致,并额外记录 缓存时间。src/tools/akshare_cache.py 提供统一的 TTL 策略、自动建表/补列/去重逻辑,并在请求伊始优先命中缓存。我们对新闻获取系统进行了重大升级,显著提升了新闻数据的质量和获取效率:
我们最新升级了辩论室(Debate Room)模块的决策机制:
这一改进使决策过程更加平衡客观,特别适合在市场信息复杂、多方观点存在分歧的情况下提供更可靠的投资建议。未来我们将持续优化这一机制,进一步提升决策质量。
首先,克隆本仓库到您的本地:
git clone [https://github.com/24mlight/A_Share_investment_Agent.git](https://github.com/24mlight/A_Share_investment_Agent.git)
cd A_Share_investment_Agent
本项目已支持 uv(更快的依赖解析/安装)。如果你已经安装了 uv,直接在项目根目录执行:
uv sync
如需安装开发依赖(pytest/black/isort/flake8):
uv sync --group dev
运行 workflow:
uv run python src/main.py --ticker 000737 --show-reasoning
如果遇到下载超时(Windows 上偶发),可临时提高超时:
$env:UV_HTTP_TIMEOUT="300"
uv sync
Poetry 是一个用于 Python 依赖管理和打包的工具。
Windows (PowerShell):
(Invoke-WebRequest -Uri [https://install.python-poetry.org](https://install.python-poetry.org) -UseBasicParsing).Content | py -
Unix/macOS:
curl -sSL [https://install.python-poetry.org](https://install.python-poetry.org) | python3 -
使用 Poetry 安装项目所需的依赖包:
poetry lock --no-update
poetry install
环境变量用于存储 API 密钥等敏感信息。
首先,复制示例环境变量文件:
# Create .env file for your API keys
cp .env.example .env
然后,您可以获取您的 Gemini API 密钥:Google AI Studio
您可以通过以下两种方式设置环境变量:
a. 直接修改 .env 文件 (推荐)
打开项目根目录下的 .env 文件, 填入您的 API key:
# Gemini API 配置
GEMINI_API_KEY=your-gemini-api-key
GEMINI_MODEL=gemini-1.5-flash
# OpenAI Compatible API 配置(可选)
OPENAI_COMPATIBLE_API_KEY=your-openai-compatible-api-key
OPENAI_COMPATIBLE_BASE_URL=https://your-api-endpoint.com/v1
OPENAI_COMPATIBLE_MODEL=your-model-name
# AkShare 代理轮询配置(可选)
# AKSHARE_PROXY_LIST 支持用逗号或分号分隔,加 "direct" 表示尝试直连。
# 示例:AKSHARE_PROXY_LIST=http://user:pass@proxy1:8080,http://user:pass@proxy2:8080,direct
AKSHARE_PROXY_LIST=direct
AKSHARE_PROXY_MAX_ATTEMPTS=3
AKSHARE_PROXY_BASE_DELAY=1
AKSHARE_PROXY_MAX_DELAY=15
AKSHARE_PROXY_JITTER=0.5
AKSHARE_PROXY_ALLOW_DIRECT=true
AKSHARE_PROXY_LIST= AKSHARE_PROXY_MAX_ATTEMPTS=3 AKSHARE_PROXY_BASE_DELAY=1 AKSHARE_PROXY_MAX_DELAY=15 AKSHARE_PROXY_JITTER=0.5 AKSHARE_PROXY_ALLOW_DIRECT=true
**注意:** 系统会优先使用 OpenAI Compatible API(如果配置了),否则会使用 Gemini API。
**b. 通过命令行设置**
**Unix/macOS:**
```bash
# Gemini API 配置
export GEMINI_API_KEY='your-gemini-api-key'
export GEMINI_MODEL='gemini-1.5-flash'
# OpenAI Compatible API 配置(可选)
export OPENAI_COMPATIBLE_API_KEY='your-openai-compatible-api-key'
export OPENAI_COMPATIBLE_BASE_URL='https://your-api-endpoint.com/v1'
export OPENAI_COMPATIBLE_MODEL='your-model-name'
Windows PowerShell:
# Gemini API 配置
$env:GEMINI_API_KEY='your-gemini-api-key'
$env:GEMINI_MODEL='gemini-1.5-flash'
# OpenAI Compatible API 配置(可选)
$env:OPENAI_COMPATIBLE_API_KEY='your-openai-compatible-api-key'
$env:OPENAI_COMPATIBLE_BASE_URL='https://your-api-endpoint.com/v1'
$env:OPENAI_COMPATIBLE_MODEL='your-model-name'
⚠️ 注意: 目前回测系统还在测试中。
系统支持多种运行方式:
这是直接与系统交互进行股票分析的主要方式。
基本运行 (只显示关键决策信息):
uv run python src/main.py --ticker 000000 # 修改成你想要测试的股票代码
例如,分析股票代码为 301155 的情况:
uv run python src/main.py --ticker 301155
显示详细推理过程 (查看每个智能体的分析过程):
uv run python src/main.py --ticker 000000 --show-reasoning # 修改成你想要测试的股票代码
例如:
uv run python src/main.py --ticker 301155 --show-reasoning
回测功能
uv run python src/backtester.py --ticker 301157 --start-date 2024-12-11 --end-date 2025-01-07 --num-of-news 20
回测功能支持以下参数(以 src/backtester.py 当前实现为准):
--ticker: 股票代码(必需,例如 600519)--start-date: 回测开始日期(可选,YYYY-MM-DD,默认 90 天前)--end-date: 回测结束日期(可选,YYYY-MM-DD,默认昨天)--initial-capital: 初始资金(可选,默认 100000)--initial-position: 初始持仓股数(可选,默认 0)--num-of-news: 每次调用工作流使用的新闻数量(可选,默认 5)--decision-interval: 每 N 个交易日运行一次工作流(可选,默认 1)--plot: 展示图表(可选,可能阻塞)--save-plot: 保存图表到指定路径(可选,默认保存到回测日志目录)--ticker: 股票代码(必需)--show-reasoning: 显示分析推理过程(可选,默认 false)此模式会启动一个 FastAPI 后端服务,允许通过 API 与系统交互,适合希望基于此后端开发自定义前端界面的用户。
# 启动 API 服务
uv run python run_with_backend.py
启动后,可以通过浏览器访问 http://localhost:8000/docs 使用交互式 API 界面 (Swagger UI)。
常用 API 端点包括:
POST /analysis/start (请求体中提供股票代码、初始资金等)GET /api/workflow/status (获取当前运行 ID 和活跃 Agent 状态)GET /runs/ (获取已完成运行列表)GET /runs/{run_id}/flowGET /runs/{run_id}/agents/{agent_name}GET /logs/ (具体路径可能需根据实现确认)API 服务模式的优势:
详细的后端 API 文档请参阅:查看详细的后端 API 文档
--ticker: 股票代码 (必需)--show-reasoning: 显示分析推理过程 (可选, 默认为 false)--initial-capital: 初始现金金额 (可选, 默认为 100,000)--num-of-news: 情绪分析使用的新闻数量 (可选, 默认为 5)系统会输出以下信息:
如果使用了--show-reasoning参数,还会显示每个智能体的详细分析过程。
示例输出 (Example Output):
正在获取 301157 的历史行情数据...
开始日期:2024-12-11
结束日期:2024-12-11
成功获取历史行情数据,共 242 条记录
警告:以下指标存在NaN值:
- momentum_1m: 20条
- momentum_3m: 60条
- momentum_6m: 120条
...(这些警告是正常的,是由于某些技术指标需要更长的历史数据才能计算)
正在获取 301157 的财务指标数据...
获取实时行情...
成功获取实时行情数据
获取新浪财务指标...
成功获取新浪财务指标数据,共 3 条记录
最新数据日期:2024-09-30 00:00:00
获取利润表数据...
成功获取利润表数据
构建指标数据...
成功构建指标数据
Final Result:
{
"action": "buy",
"quantity": 12500,
"confidence": 0.42,
"agent_signals": [
{
"agent": "Technical Analysis",
"signal": "bullish",
"confidence": 0.6
},
{
"agent": "Fundamental Analysis",
"signal": "neutral",
"confidence": 0.5
},
{
"agent": "Sentiment Analysis",
"signal": "neutral",
"confidence": 0.8
},
{
"agent": "Valuation Analysis",
"signal": "bearish",
"confidence": 0.99
},
{
"agent": "Risk Management",
"signal": "buy",
"confidence": 1.0
}
],
"reasoning": "Risk Management allows a buy action with a maximum quantity of 12500..."
}
系统会在 logs/ 目录下生成以下类型的日志文件:
回测日志
backtest_{股票代码}_{当前日期}_{回测开始日期}_{回测结束日期}.logbacktest_301157_20250107_20241201_20241230.logAPI 调用日志
api_calls_{当前日期}.logapi_calls_20250107.log所有日期格式均为 YYYY-MM-DD。如果使用了 --show-reasoning 参数,详细的分析过程也会记录在日志文件中。
A_Share_investment_Agent/
├── backend/ # 后端 API 和服务
│ ├── dependencies.py # 依赖注入 (如 LogStorage)
│ ├── main.py # FastAPI 应用实例
│ ├── models/ # API 请求/响应模型 (Pydantic)
│ │ ├── analysis.py # /analysis/ 相关路由
│ │ ├── api_runs.py # /api/runs/ 相关路由 (基于 api_state)
│ │ ├── logs.py # /logs/ 相关路由
│ │ ├── runs.py # /runs/ 相关路由 (基于 BaseLogStorage)
│ │ └── workflow.py # /api/workflow/ 相关路由
│ ├── schemas.py # 内部数据结构/日志模型 (Pydantic)
│ ├── services/ # 业务逻辑服务
│ │ └── analysis.py # 股票分析服务
│ ├── state.py # 内存状态管理 (api_state)
│ ├── storage/ # 日志存储实现
│ │ ├── base.py # BaseLogStorage 接口定义
│ │ └── memory.py # InMemoryLogStorage 实现
│ └── utils/ # 后端工具函数
│ ├── api_utils.py # API 相关工具
│ └── context_managers.py # 上下文管理器 (如 workflow_run)
├── src/ # Agent 核心逻辑和工具
│ ├── agents/ # Agent 定义和工作流
│ │ ├── __init__.py
│ │ ├── debate_room.py
│ │ ├── fundamentals.py
│ │ ├── macro_analyst.py # 宏观分析师Agent
│ │ ├── market_data.py
│ │ ├── portfolio_manager.py
│ │ ├── researcher_bear.py
│ │ ├── researcher_bull.py
│ │ ├── risk_manager.py
│ │ ├── sentiment.py
│ │ ├── state.py
│ │ ├── technicals.py
│ │ └── valuation.py
│ ├── data/ # 数据存储目录 (本地缓存等)
│ │ ├── img/ # 项目图片
│ │ ├── sentiment_cache.json # 情感分析结果缓存
│ │ ├── macro_analysis_cache.json # 宏观分析结果缓存
│ │ └── stock_news/ # 股票新闻数据
│ ├── tools/ # 工具和功能模块 (LLM, 数据获取)
│ │ ├── __init__.py
│ │ ├── api.py
│ │ ├── data_analyzer.py
│ │ ├── news_crawler.py
│ │ └── openrouter_config.py
│ ├── utils/ # 通用工具函数 (日志, LLM客户端, 序列化)
│ │ ├── __init__.py
│ │ ├── api_utils.py # Agent 共享的API工具 (逐步迁移至 backend)
│ │ ├── llm_clients.py
│ │ ├── llm_interaction_logger.py
│ │ ├── logging_config.py
│ │ ├── output_logger.py
│ │ ├── serialization.py
│ │ ├── structured_terminal.py # 结构化终端输出
│ │ └── summary_report.py # 汇总报告生成
│ ├── backtester.py # 回测系统 (可能需要检查状态)
│ └── main.py # Agent 工作流定义和命令行入口
├── logs/ # 日志文件目录 (主要由 OutputLogger 生成)
├── .env # 环境变量配置
├── .env.example # 环境变量示例
├── poetry.lock # Poetry依赖锁定文件
├── pyproject.toml # Poetry项目配置
├── run_with_backend.py # 启动后端并可选执行分析的脚本
└── README.md # 项目文档
poetry run pytest 可执行完整测试;其中 src/tools/test_gemini.py 依赖外部 LLM API,默认通过 RUN_GEMINI_TESTS=1 显式开启,避免在 CI/离线环境发起真实请求。我们欢迎各种形式的贡献!
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)
如果这个项目对你有帮助,欢迎请我喝杯咖啡 ❤️
本项目是一个基于多个 agent 的 AI 投资系统,采用模块化设计,每个 agent 都有其专门的职责。系统的架构如下:
Market Data Analyst → [Technical/Fundamentals/Sentiment/Valuation Analyst & Researcher Bull/Bear & Debate Room] → Risk Manager → Portfolio Manager → Trading Decision
(架构图已在前面展示)
Market Data Analyst
Technical Analyst
Fundamentals Analyst
Sentiment Analyst
Valuation Analyst
Researcher Bull / Researcher Bear (新增)
Debate Room (新增与增强)
Risk Manager
Portfolio Manager
市场数据 (Market Data)
{
"market_cap": float, # 总市值
"volume": float, # 成交量
"average_volume": float, # 平均成交量
"fifty_two_week_high": float, # 52周最高价
"fifty_two_week_low": float # 52周最低价
}
财务指标数据 (Financial Metrics)
{
# 市场数据
"market_cap": float, # 总市值
"float_market_cap": float, # 流通市值
# 盈利数据
"revenue": float, # 营业总收入
"net_income": float, # 净利润
"return_on_equity": float, # 净资产收益率
"net_margin": float, # 销售净利率
"operating_margin": float, # 营业利润率
# 增长指标
"revenue_growth": float, # 主营业务收入增长率
"earnings_growth": float, # 净利润增长率
"book_value_growth": float, # 净资产增长率
# 财务健康指标
"current_ratio": float, # 流动比率
"debt_to_equity": float, # 资产负债率
"free_cash_flow_per_share": float, # 每股经营性现金流
"earnings_per_share": float, # 每股收益
# 估值比率
"pe_ratio": float, # 市盈率(动态)
"price_to_book": float, # 市净率
"price_to_sales": float # 市销率
}
财务报表数据 (Financial Statements)
{
"net_income": float, # 净利润
"operating_revenue": float, # 营业总收入
"operating_profit": float, # 营业利润
"working_capital": float, # 营运资金
"depreciation_and_amortization": float, # 折旧和摊销
"capital_expenditure": float, # 资本支出
"free_cash_flow": float # 自由现金流
}
交易信号 (Trading Signals)
{
"action": str, # "buy", "sell", "hold"
"quantity": int, # 交易数量
"confidence": float, # 置信度 (0-1) (可能是混合置信度)
"agent_signals": [ # 各个 agent 的信号
{
"agent": str, # agent 名称
"signal": str, # "bullish", "bearish", "neutral"
"confidence": float # 置信度 (0-1)
}
],
"reasoning": str # 决策理由 (可能包含辩论摘要和LLM评估)
}
数据采集阶段
stock_zh_a_spot_em)stock_zh_a_hist)stock_financial_analysis_indicator)stock_financial_report_sina)分析阶段
辩论与评估阶段 (Debate Room)
风险评估阶段 Risk Manager 综合考虑多个维度:
决策阶段 Portfolio Manager 基于以下因素做出决策:
数据存储和缓存
data/sentiment_cache.jsondata/stock_news/ 目录logs/ 目录监控和反馈
信息共享
决策权重与融合 Portfolio Manager 在做决策时考虑不同信号的权重,并结合辩论室的混合置信度:
风险控制
多 LLM 支持
模块化设计
可扩展性
风险管理
智能决策与解释性
--show-reasoning 和辩论室机制增强决策过程的透明度和可解释性数据源扩展
功能增强
性能优化
情感分析代理(Sentiment Agent)是系统中的关键组件之一,负责分析市场新闻和舆论对股票的潜在影响。
新闻数据采集
情感分析处理
交易信号生成

本项目修改自 ai-hedge-fund。我们衷心感谢原作者的出色工作和启发。原项目为我们针对 A 股市场的适配和改进提供了坚实的基础。
本项目使用双重许可证:
This project is dual-licensed:
24mlight 创建的所有修改和新增代码采用 GNU General Public License v3 (GPL v3),并附加非商业条款。详细信息请参阅 LICENSE 文件。
1,833 followers · starred Jun 2026
878 followers · starred Dec 2025
7,347 followers · starred Jun 2025
689 followers · starred May 2025
⚠️ 免责声明:本项目仅用于教育和研究目的,不构成任何投资、实际交易建议。投资有风险,决策需谨慎。 再次强调,该系统不涉及任何投资建议,不涉及任何股票推荐,仅用于对于 AI 技术和股市结合感兴趣的朋友。 对 Agent 技术和股市感兴趣者来, 升官发财请往他处。 不再回复任何有关系统给出信息有无用的问题,此系统不构成任何投资建议。
这是一个基于人工智能的投资系统概念验证项目。项目目标是探索如何使用 AI 来辅助投资决策,通过多 Agent 协同工作,结合大型语言模型 (LLM) 的分析能力,提供多角度的市场解读和投资建议。
系统通过模拟不同角色的研究员(多头、空头)和分析师,进行信息收集、分析、辩论,最终形成投资决策。最新的“辩论室智能增强”机制引入 LLM 作为独立第三方,进一步提升决策的客观性和全面性。
多智能体协同 | LLM 深度分析 | 辩论室机制 | 模块化架构 |
| 在多分析师基础上,引入多空研究员,从不同视角分析市场 | 引入大型语言模型进行客观评估和洞察生成 | 通过多方辩论达成更全面的决策 | 各 Agent 独立运作,易于扩展和维护 |

新版本的架构做出了以下改进:
另外,优化了终端输出,减少了不必要的详细数据显示,使输出更加清晰易读。
data/akshare_cache.db SQLite 缓存,持久化 AkShare 输出的实时行情 / 财务指标 / 三大报表 / 日线行情 / 新闻数据;所有表的列名与 AkShare 保持一致,并额外记录 缓存时间。src/tools/akshare_cache.py 提供统一的 TTL 策略、自动建表/补列/去重逻辑,并在请求伊始优先命中缓存。我们对新闻获取系统进行了重大升级,显著提升了新闻数据的质量和获取效率:
我们最新升级了辩论室(Debate Room)模块的决策机制:
这一改进使决策过程更加平衡客观,特别适合在市场信息复杂、多方观点存在分歧的情况下提供更可靠的投资建议。未来我们将持续优化这一机制,进一步提升决策质量。
首先,克隆本仓库到您的本地:
git clone [https://github.com/24mlight/A_Share_investment_Agent.git](https://github.com/24mlight/A_Share_investment_Agent.git)
cd A_Share_investment_Agent
本项目已支持 uv(更快的依赖解析/安装)。如果你已经安装了 uv,直接在项目根目录执行:
uv sync
如需安装开发依赖(pytest/black/isort/flake8):
uv sync --group dev
运行 workflow:
uv run python src/main.py --ticker 000737 --show-reasoning
如果遇到下载超时(Windows 上偶发),可临时提高超时:
$env:UV_HTTP_TIMEOUT="300"
uv sync
Poetry 是一个用于 Python 依赖管理和打包的工具。
Windows (PowerShell):
(Invoke-WebRequest -Uri [https://install.python-poetry.org](https://install.python-poetry.org) -UseBasicParsing).Content | py -
Unix/macOS:
curl -sSL [https://install.python-poetry.org](https://install.python-poetry.org) | python3 -
使用 Poetry 安装项目所需的依赖包:
poetry lock --no-update
poetry install
环境变量用于存储 API 密钥等敏感信息。
首先,复制示例环境变量文件:
# Create .env file for your API keys
cp .env.example .env
然后,您可以获取您的 Gemini API 密钥:Google AI Studio
您可以通过以下两种方式设置环境变量:
a. 直接修改 .env 文件 (推荐)
打开项目根目录下的 .env 文件, 填入您的 API key:
# Gemini API 配置
GEMINI_API_KEY=your-gemini-api-key
GEMINI_MODEL=gemini-1.5-flash
# OpenAI Compatible API 配置(可选)
OPENAI_COMPATIBLE_API_KEY=your-openai-compatible-api-key
OPENAI_COMPATIBLE_BASE_URL=https://your-api-endpoint.com/v1
OPENAI_COMPATIBLE_MODEL=your-model-name
# AkShare 代理轮询配置(可选)
# AKSHARE_PROXY_LIST 支持用逗号或分号分隔,加 "direct" 表示尝试直连。
# 示例:AKSHARE_PROXY_LIST=http://user:pass@proxy1:8080,http://user:pass@proxy2:8080,direct
AKSHARE_PROXY_LIST=direct
AKSHARE_PROXY_MAX_ATTEMPTS=3
AKSHARE_PROXY_BASE_DELAY=1
AKSHARE_PROXY_MAX_DELAY=15
AKSHARE_PROXY_JITTER=0.5
AKSHARE_PROXY_ALLOW_DIRECT=true
AKSHARE_PROXY_LIST= AKSHARE_PROXY_MAX_ATTEMPTS=3 AKSHARE_PROXY_BASE_DELAY=1 AKSHARE_PROXY_MAX_DELAY=15 AKSHARE_PROXY_JITTER=0.5 AKSHARE_PROXY_ALLOW_DIRECT=true
**注意:** 系统会优先使用 OpenAI Compatible API(如果配置了),否则会使用 Gemini API。
**b. 通过命令行设置**
**Unix/macOS:**
```bash
# Gemini API 配置
export GEMINI_API_KEY='your-gemini-api-key'
export GEMINI_MODEL='gemini-1.5-flash'
# OpenAI Compatible API 配置(可选)
export OPENAI_COMPATIBLE_API_KEY='your-openai-compatible-api-key'
export OPENAI_COMPATIBLE_BASE_URL='https://your-api-endpoint.com/v1'
export OPENAI_COMPATIBLE_MODEL='your-model-name'
Windows PowerShell:
# Gemini API 配置
$env:GEMINI_API_KEY='your-gemini-api-key'
$env:GEMINI_MODEL='gemini-1.5-flash'
# OpenAI Compatible API 配置(可选)
$env:OPENAI_COMPATIBLE_API_KEY='your-openai-compatible-api-key'
$env:OPENAI_COMPATIBLE_BASE_URL='https://your-api-endpoint.com/v1'
$env:OPENAI_COMPATIBLE_MODEL='your-model-name'
⚠️ 注意: 目前回测系统还在测试中。
系统支持多种运行方式:
这是直接与系统交互进行股票分析的主要方式。
基本运行 (只显示关键决策信息):
uv run python src/main.py --ticker 000000 # 修改成你想要测试的股票代码
例如,分析股票代码为 301155 的情况:
uv run python src/main.py --ticker 301155
显示详细推理过程 (查看每个智能体的分析过程):
uv run python src/main.py --ticker 000000 --show-reasoning # 修改成你想要测试的股票代码
例如:
uv run python src/main.py --ticker 301155 --show-reasoning
回测功能
uv run python src/backtester.py --ticker 301157 --start-date 2024-12-11 --end-date 2025-01-07 --num-of-news 20
回测功能支持以下参数(以 src/backtester.py 当前实现为准):
--ticker: 股票代码(必需,例如 600519)--start-date: 回测开始日期(可选,YYYY-MM-DD,默认 90 天前)--end-date: 回测结束日期(可选,YYYY-MM-DD,默认昨天)--initial-capital: 初始资金(可选,默认 100000)--initial-position: 初始持仓股数(可选,默认 0)--num-of-news: 每次调用工作流使用的新闻数量(可选,默认 5)--decision-interval: 每 N 个交易日运行一次工作流(可选,默认 1)--plot: 展示图表(可选,可能阻塞)--save-plot: 保存图表到指定路径(可选,默认保存到回测日志目录)--ticker: 股票代码(必需)--show-reasoning: 显示分析推理过程(可选,默认 false)此模式会启动一个 FastAPI 后端服务,允许通过 API 与系统交互,适合希望基于此后端开发自定义前端界面的用户。
# 启动 API 服务
uv run python run_with_backend.py
启动后,可以通过浏览器访问 http://localhost:8000/docs 使用交互式 API 界面 (Swagger UI)。
常用 API 端点包括:
POST /analysis/start (请求体中提供股票代码、初始资金等)GET /api/workflow/status (获取当前运行 ID 和活跃 Agent 状态)GET /runs/ (获取已完成运行列表)GET /runs/{run_id}/flowGET /runs/{run_id}/agents/{agent_name}GET /logs/ (具体路径可能需根据实现确认)API 服务模式的优势:
详细的后端 API 文档请参阅:查看详细的后端 API 文档
--ticker: 股票代码 (必需)--show-reasoning: 显示分析推理过程 (可选, 默认为 false)--initial-capital: 初始现金金额 (可选, 默认为 100,000)--num-of-news: 情绪分析使用的新闻数量 (可选, 默认为 5)系统会输出以下信息:
如果使用了--show-reasoning参数,还会显示每个智能体的详细分析过程。
示例输出 (Example Output):
正在获取 301157 的历史行情数据...
开始日期:2024-12-11
结束日期:2024-12-11
成功获取历史行情数据,共 242 条记录
警告:以下指标存在NaN值:
- momentum_1m: 20条
- momentum_3m: 60条
- momentum_6m: 120条
...(这些警告是正常的,是由于某些技术指标需要更长的历史数据才能计算)
正在获取 301157 的财务指标数据...
获取实时行情...
成功获取实时行情数据
获取新浪财务指标...
成功获取新浪财务指标数据,共 3 条记录
最新数据日期:2024-09-30 00:00:00
获取利润表数据...
成功获取利润表数据
构建指标数据...
成功构建指标数据
Final Result:
{
"action": "buy",
"quantity": 12500,
"confidence": 0.42,
"agent_signals": [
{
"agent": "Technical Analysis",
"signal": "bullish",
"confidence": 0.6
},
{
"agent": "Fundamental Analysis",
"signal": "neutral",
"confidence": 0.5
},
{
"agent": "Sentiment Analysis",
"signal": "neutral",
"confidence": 0.8
},
{
"agent": "Valuation Analysis",
"signal": "bearish",
"confidence": 0.99
},
{
"agent": "Risk Management",
"signal": "buy",
"confidence": 1.0
}
],
"reasoning": "Risk Management allows a buy action with a maximum quantity of 12500..."
}
系统会在 logs/ 目录下生成以下类型的日志文件:
回测日志
backtest_{股票代码}_{当前日期}_{回测开始日期}_{回测结束日期}.logbacktest_301157_20250107_20241201_20241230.logAPI 调用日志
api_calls_{当前日期}.logapi_calls_20250107.log所有日期格式均为 YYYY-MM-DD。如果使用了 --show-reasoning 参数,详细的分析过程也会记录在日志文件中。
A_Share_investment_Agent/
├── backend/ # 后端 API 和服务
│ ├── dependencies.py # 依赖注入 (如 LogStorage)
│ ├── main.py # FastAPI 应用实例
│ ├── models/ # API 请求/响应模型 (Pydantic)
│ │ ├── analysis.py # /analysis/ 相关路由
│ │ ├── api_runs.py # /api/runs/ 相关路由 (基于 api_state)
│ │ ├── logs.py # /logs/ 相关路由
│ │ ├── runs.py # /runs/ 相关路由 (基于 BaseLogStorage)
│ │ └── workflow.py # /api/workflow/ 相关路由
│ ├── schemas.py # 内部数据结构/日志模型 (Pydantic)
│ ├── services/ # 业务逻辑服务
│ │ └── analysis.py # 股票分析服务
│ ├── state.py # 内存状态管理 (api_state)
│ ├── storage/ # 日志存储实现
│ │ ├── base.py # BaseLogStorage 接口定义
│ │ └── memory.py # InMemoryLogStorage 实现
│ └── utils/ # 后端工具函数
│ ├── api_utils.py # API 相关工具
│ └── context_managers.py # 上下文管理器 (如 workflow_run)
├── src/ # Agent 核心逻辑和工具
│ ├── agents/ # Agent 定义和工作流
│ │ ├── __init__.py
│ │ ├── debate_room.py
│ │ ├── fundamentals.py
│ │ ├── macro_analyst.py # 宏观分析师Agent
│ │ ├── market_data.py
│ │ ├── portfolio_manager.py
│ │ ├── researcher_bear.py
│ │ ├── researcher_bull.py
│ │ ├── risk_manager.py
│ │ ├── sentiment.py
│ │ ├── state.py
│ │ ├── technicals.py
│ │ └── valuation.py
│ ├── data/ # 数据存储目录 (本地缓存等)
│ │ ├── img/ # 项目图片
│ │ ├── sentiment_cache.json # 情感分析结果缓存
│ │ ├── macro_analysis_cache.json # 宏观分析结果缓存
│ │ └── stock_news/ # 股票新闻数据
│ ├── tools/ # 工具和功能模块 (LLM, 数据获取)
│ │ ├── __init__.py
│ │ ├── api.py
│ │ ├── data_analyzer.py
│ │ ├── news_crawler.py
│ │ └── openrouter_config.py
│ ├── utils/ # 通用工具函数 (日志, LLM客户端, 序列化)
│ │ ├── __init__.py
│ │ ├── api_utils.py # Agent 共享的API工具 (逐步迁移至 backend)
│ │ ├── llm_clients.py
│ │ ├── llm_interaction_logger.py
│ │ ├── logging_config.py
│ │ ├── output_logger.py
│ │ ├── serialization.py
│ │ ├── structured_terminal.py # 结构化终端输出
│ │ └── summary_report.py # 汇总报告生成
│ ├── backtester.py # 回测系统 (可能需要检查状态)
│ └── main.py # Agent 工作流定义和命令行入口
├── logs/ # 日志文件目录 (主要由 OutputLogger 生成)
├── .env # 环境变量配置
├── .env.example # 环境变量示例
├── poetry.lock # Poetry依赖锁定文件
├── pyproject.toml # Poetry项目配置
├── run_with_backend.py # 启动后端并可选执行分析的脚本
└── README.md # 项目文档
poetry run pytest 可执行完整测试;其中 src/tools/test_gemini.py 依赖外部 LLM API,默认通过 RUN_GEMINI_TESTS=1 显式开启,避免在 CI/离线环境发起真实请求。我们欢迎各种形式的贡献!
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)
如果这个项目对你有帮助,欢迎请我喝杯咖啡 ❤️
本项目是一个基于多个 agent 的 AI 投资系统,采用模块化设计,每个 agent 都有其专门的职责。系统的架构如下:
Market Data Analyst → [Technical/Fundamentals/Sentiment/Valuation Analyst & Researcher Bull/Bear & Debate Room] → Risk Manager → Portfolio Manager → Trading Decision
(架构图已在前面展示)
Market Data Analyst
Technical Analyst
Fundamentals Analyst
Sentiment Analyst
Valuation Analyst
Researcher Bull / Researcher Bear (新增)
Debate Room (新增与增强)
Risk Manager
Portfolio Manager
市场数据 (Market Data)
{
"market_cap": float, # 总市值
"volume": float, # 成交量
"average_volume": float, # 平均成交量
"fifty_two_week_high": float, # 52周最高价
"fifty_two_week_low": float # 52周最低价
}
财务指标数据 (Financial Metrics)
{
# 市场数据
"market_cap": float, # 总市值
"float_market_cap": float, # 流通市值
# 盈利数据
"revenue": float, # 营业总收入
"net_income": float, # 净利润
"return_on_equity": float, # 净资产收益率
"net_margin": float, # 销售净利率
"operating_margin": float, # 营业利润率
# 增长指标
"revenue_growth": float, # 主营业务收入增长率
"earnings_growth": float, # 净利润增长率
"book_value_growth": float, # 净资产增长率
# 财务健康指标
"current_ratio": float, # 流动比率
"debt_to_equity": float, # 资产负债率
"free_cash_flow_per_share": float, # 每股经营性现金流
"earnings_per_share": float, # 每股收益
# 估值比率
"pe_ratio": float, # 市盈率(动态)
"price_to_book": float, # 市净率
"price_to_sales": float # 市销率
}
财务报表数据 (Financial Statements)
{
"net_income": float, # 净利润
"operating_revenue": float, # 营业总收入
"operating_profit": float, # 营业利润
"working_capital": float, # 营运资金
"depreciation_and_amortization": float, # 折旧和摊销
"capital_expenditure": float, # 资本支出
"free_cash_flow": float # 自由现金流
}
交易信号 (Trading Signals)
{
"action": str, # "buy", "sell", "hold"
"quantity": int, # 交易数量
"confidence": float, # 置信度 (0-1) (可能是混合置信度)
"agent_signals": [ # 各个 agent 的信号
{
"agent": str, # agent 名称
"signal": str, # "bullish", "bearish", "neutral"
"confidence": float # 置信度 (0-1)
}
],
"reasoning": str # 决策理由 (可能包含辩论摘要和LLM评估)
}
数据采集阶段
stock_zh_a_spot_em)stock_zh_a_hist)stock_financial_analysis_indicator)stock_financial_report_sina)分析阶段
辩论与评估阶段 (Debate Room)
风险评估阶段 Risk Manager 综合考虑多个维度:
决策阶段 Portfolio Manager 基于以下因素做出决策:
数据存储和缓存
data/sentiment_cache.jsondata/stock_news/ 目录logs/ 目录监控和反馈
信息共享
决策权重与融合 Portfolio Manager 在做决策时考虑不同信号的权重,并结合辩论室的混合置信度:
风险控制
多 LLM 支持
模块化设计
可扩展性
风险管理
智能决策与解释性
--show-reasoning 和辩论室机制增强决策过程的透明度和可解释性数据源扩展
功能增强
性能优化
情感分析代理(Sentiment Agent)是系统中的关键组件之一,负责分析市场新闻和舆论对股票的潜在影响。
新闻数据采集
情感分析处理
交易信号生成

本项目修改自 ai-hedge-fund。我们衷心感谢原作者的出色工作和启发。原项目为我们针对 A 股市场的适配和改进提供了坚实的基础。
本项目使用双重许可证:
This project is dual-licensed:
24mlight 创建的所有修改和新增代码采用 GNU General Public License v3 (GPL v3),并附加非商业条款。详细信息请参阅 LICENSE 文件。
1,833 followers · starred Jun 2026
878 followers · starred Dec 2025
7,347 followers · starred Jun 2025
689 followers · starred May 2025