Skip to content

Latest commit

 

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AI 量化交易分析 Agent

基于 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

🚀 快速开始

1. 环境准备

cd QuantAgent
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt

2. 配置 LLM

支持 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 页面直接配置并保存。

3. 运行

# 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 交叉策略,含佣金/滑点/夏普比率/最大回撤

🛠 Skills 工具列表

工具名 功能 数据源
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

Skill 由 一份 JSON Schema + 一个 Python 函数 组成,Agent 启动时自动发现并挂载,无需修改 core.py

Step 1: 编写 Python 函数

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,请用清晰的英文命名。

Step 2: 创建 JSON Schema

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

Step 3: 导出(可选)

如需 Web UI 直接导入,在 skills/__init__.py 中添加:

from skills.my_tools import get_sentiment

Step 4: 重启即生效

python 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

🌐 Web UI 页面

页面 功能
Dashboard 实时行情仪表盘(新浪财经 API)+ AI 市场分析
Chat 交互式对话 + 右侧 ReAct 推理步骤实时跟踪
Analysis 确定性分析(无 LLM):K 线图 + 指标图表 + 信号仪表盘
Backtest MA Crossover 策略回测 + 权益曲线 + 回撤图
Settings LLM 配置、Provider 预设、连接测试

About

AI-powered quantitative trading analysis agent with ReAct reasoning, tool calling, technical indicators, backtesting, and a Gradio web interface.

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages