基于 ReAct (Reasoning and Acting) 逻辑的智能量化分析系统。 Agent 自主调用 Skills 完成多维度市场分析,支持 CLI / Web UI 双模式。
QuantAgent/
├── main.py # 入口:CLI 交互 / 单次分析 / Web UI
├── agent/
│ ├── __init__.py
│ ├── core.py # Agent 决策中枢 (ReAct 循环,双模式)
│ ├── streaming.py # 流式 Agent (Gradio 实时渲染 Reasoning Trace)
│ ├── memory.py # 三级记忆 (短期 / 工作 / 摘要)
│ └── skill_registry.py # 技能注册中心 (JSON Schema 自动发现)
├── skills/
│ ├── __init__.py
│ ├── data_fetcher.py # 历史 K 线 + 实时价格
│ ├── fetch_historical_data.json # └─ Schema
│ ├── indicators.py # 技术指标 (MA/MACD/RSI/布林带/ATR/ADX/KDJ/CCI 等)
│ ├── calculate_technical_indicators.json # └─ Schema
│ ├── analyzer.py # 价格行为分析 + 交易信号
│ ├── analyze_price_action.json # └─ 分析 Schema
│ ├── generate_trading_signal.json # └─ 信号 Schema
│ ├── book_knowledge.py # 本地 BM25 书籍知识库检索
│ ├── search_finance_books.json # └─ Schema
│ ├── web_sources.py # 白名单金融网站检索 + 抓取
│ ├── search_financial_web.json # └─ 检索 Schema
│ └── fetch_financial_source_url.json # └─ 抓取 Schema
├── engine/
│ ├── __init__.py
│ └── backtester.py # 历史回测引擎 (MA Crossover)
├── web/
│ ├── app.py # Gradio 入口
│ ├── components/ # state, styles, charts
│ ├── pages/ # dashboard, chat, analysis, backtest, settings
│ ├── services/ # market_service (新浪行情 + LLM 分析)
│ └── utils/ # adapters, persistence
├── config/
│ ├── __init__.py
│ └── settings.py # 全局配置 (LLM / Agent / 回测)
├── data/
│ ├── cache/ # 数据缓存
│ ├── knowledge/ # 书籍知识库 (books.jsonl)
│ └── settings.json # 持久化 LLM 配置
├── tests/
│ └── test_skills.py
├── requirements.txt
└── README.md
cd QuantAgent
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt支持 OpenAI / DeepSeek / ModelArts / Ollama 等兼容端点。
cp .env.example .env
# 编辑 .env 填入:
# LLM_BASE_URL=https://api.deepseek.com/v1
# LLM_API_KEY=sk-xxx
# LLM_MODEL=deepseek-chat也可以在 Web UI 的 Settings 页面直接配置并保存。
# CLI 交互模式
python main.py
# 命令行单次分析
python main.py --ticker AAPL --months 3
# Web UI (Gradio)
python main.py --web| 模块 | 功能 |
|---|---|
Agent Core (agent/core.py) |
ReAct 决策循环,支持原生 Function Calling + 文本解析双模式自动切换 |
Streaming Agent (agent/streaming.py) |
流式推理,yield 事件供 Gradio 实时渲染 Reasoning Trace |
Memory (agent/memory.py) |
三级记忆:对话历史 + 工作记忆(自动缓存分析数据) + 摘要压缩 |
SkillRegistry (agent/skill_registry.py) |
启动时扫描 skills/*.json,动态加载对应模块,实现技能即插即用 |
Backtester (engine/backtester.py) |
历史回测引擎,MA 交叉策略,含佣金/滑点/夏普比率/最大回撤 |
| 工具名 | 功能 | 数据源 |
|---|---|---|
fetch_historical_data |
获取股票历史 K 线 (OHLCV) | akshare → yfinance → demo |
get_current_price |
获取实时价格 | akshare / yfinance |
calculate_technical_indicators |
MA/EMA/MACD/RSI/布林带/ATR/ADX/KDJ/CCI/OBV/MFI 等 | pandas/numpy |
analyze_price_action |
支撑阻力位 / 趋势判定 / K 线形态识别 | 纯规则引擎 |
generate_trading_signal |
综合评分 → BUY/SELL/HOLD + 置信度 + 理由 | 多因子打分 |
search_finance_books |
本地 BM25 检索金融书籍 | 离线知识库 |
search_financial_web |
白名单金融网站检索 | 财联社/新浪/Quantpedia |
fetch_financial_source_url |
抓取单个白名单 URL 正文 | urllib + HTMLParser |
Skill 由 一份 JSON Schema + 一个 Python 函数 组成,Agent 启动时自动发现并挂载,无需修改 core.py。
在 skills/ 下新建或使用已有的 .py 文件,实现工具函数:
# skills/my_tools.py
def get_sentiment(ticker: str, source: str = "news") -> dict:
"""
获取指定股票的市场情绪分析。
Args:
ticker: 股票代码
source: 数据来源,'news' 或 'social'
Returns:
{"success": True, "ticker": "...", "sentiment": "bullish", "score": 0.75}
"""
return {
"success": True,
"ticker": ticker.upper(),
"sentiment": "bullish",
"score": 0.75,
"source": source,
}函数名会作为工具名,参数名会暴露给 LLM,请用清晰的英文命名。
在 skills/ 下创建 JSON 文件,描述工具给 LLM:
{
"module": "skills.my_tools",
"type": "function",
"function": {
"name": "get_sentiment",
"description": "获取指定股票的市场情绪分析,返回市场情绪方向和置信度分数。",
"parameters": {
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "股票代码,如 'AAPL' 或 '600519.SS'"
},
"source": {
"type": "string",
"enum": ["news", "social"],
"description": "数据来源,默认 'news'"
}
},
"required": ["ticker"]
}
}
}| 字段 | 说明 |
|---|---|
module |
函数所在的 Python 模块路径 |
function.name |
必须与 Python 函数名完全一致 |
function.description |
LLM 据此判断何时调用该工具 |
function.parameters |
OpenAI Function Calling 格式 JSON Schema |
一个 .py 可以导出多个函数 — 为每个函数各创建一个 .json,指向同一个 module。
如需 Web UI 直接导入,在 skills/__init__.py 中添加:
from skills.my_tools import get_sentimentpython main.py # CLI
python main.py --web # Web启动日志会显示:
=== [SkillRegistry] 开始动态加载技能库 ===
✅ 已挂载: [get_sentiment] (来自 skills.my_tools)
=== [SkillRegistry] 注册完成,共成功挂载 8 个技能 ===
# 成功
{"success": True, ...}
# 失败
{"success": False, "error": "具体错误描述"}- Python 3.11+
- LLM: OpenAI SDK (DeepSeek / OpenAI / ModelArts / Ollama)
- Web UI: Gradio + Plotly
- 数据处理: pandas, numpy
- 金融数据: akshare (东方财富), yfinance (Yahoo Finance)
- 校验: pydantic v2
| 页面 | 功能 |
|---|---|
| Dashboard | 实时行情仪表盘(新浪财经 API)+ AI 市场分析 |
| Chat | 交互式对话 + 右侧 ReAct 推理步骤实时跟踪 |
| Analysis | 确定性分析(无 LLM):K 线图 + 指标图表 + 信号仪表盘 |
| Backtest | MA Crossover 策略回测 + 权益曲线 + 回撤图 |
| Settings | LLM 配置、Provider 预设、连接测试 |