---
## 📖 简介
### QuantDinger 是什么?
QuantDinger 是一个**本地优先、隐私优先的量化交易基础设施**。它完全运行在你的机器上,让你完全控制自己的策略、交易数据和 API 密钥。
### 为什么选择本地优先?
与将你的数据和策略锁定在云端的 SaaS 平台不同,QuantDinger 在本地运行。你的策略、交易日志、API 密钥和分析结果都保留在你的机器上。没有供应商锁定,没有订阅费用,没有数据泄露风险。
### 适合谁使用?
QuantDinger 为以下用户而构建:
- 重视数据主权和隐私的交易员、研究员和工程师
- 需要透明、可审计的交易基础设施
- 更偏好工程而非营销
- 需要完整的工作流:数据、分析、回测和执行
### 核心功能
QuantDinger 包含一个内置的**基于 LLM 的多智能体研究系统**,能够从网络收集金融情报,结合本地市场数据,生成分析报告。这与策略开发、回测和实盘交易工作流无缝集成。
### 核心价值
- **隐私优先**:所有策略、交易日志和 API 密钥都存储在本地 SQLite 数据库中
- **AI 驱动的分析**:基于 LLM 的研究智能体(OpenRouter/LLM)进行市场分析
- **多市场支持**:加密货币、美股、A股/港股、外汇和期货
- **Docker 部署**:使用 Docker Compose 一键部署
---
## 📺 视频演示
点击上方视频观看 QuantDinger 项目介绍
---
## 📚 文档
- [Python 策略开发指南](docs/STRATEGY_DEV_GUIDE_CN.md)
## 📸 功能预览
📊 专业量化仪表盘
实时监控市场动态、资产状况和策略状态。
🤖 AI 深度投研
多智能体协作进行市场情绪与技术分析。
|
💬 智能交易助手
通过自然语言接口获取即时市场洞察。
|
📈 交互式指标分析
丰富的技术指标库,支持拖拽式分析。
|
🐍 Python 策略生成
内置编辑器,支持 AI 辅助策略代码编写。
|
---
## ✨ 关键特性
### 1. 通用数据引擎
QuantDinger 提供跨多个市场的统一数据接口:
- **加密货币**:直接 API 连接进行交易(10+ 交易所)和 CCXT 集成获取行情数据(100+ 数据源)
- **股票**:Yahoo Finance、Finnhub、Tiingo(美股)和 AkShare(A股/港股)
- **期货/外汇**:OANDA 和主要期货数据源
- **代理支持**:内置代理配置,适应受限网络环境
### 2. AI 多智能体投研
系统包含用于市场分析的多智能体工作流:
- **协调智能体**:任务分解和工作流管理
- **研究智能体**:网络搜索(Google/Bing)获取宏观新闻和事件
- **市场特定智能体**:针对加密货币和股票的技术面和资金流向分析
- **报告生成**:结构化的日报/周报研究报告
### 2.1 🧠 AI 记忆增强系统(Memory-Augmented Agents)
QuantDinger 的多智能体不是“每次从零开始”。它内置了一个**本地记忆库 + 反思闭环**,让每个智能体在生成提示词(prompt)时能检索过往经验,并在事后验证/复盘后把结果写回记忆库。
- **本质**:RAG 风格的“经验检索增强”,**不是**训练/微调模型权重(零外部向量库依赖)。
- **隐私**:所有记忆与反思记录默认落盘在本地 SQLite:`backend_api_python/data/memory/`。
#### 逻辑图(从请求到记忆闭环)
```mermaid
flowchart TB
%% ===== 🌐 入口层 =====
subgraph Entry["🌐 API 入口"]
A["📡 POST /api/analysis/multi"]
A2["🔄 POST /api/analysis/reflect"]
end
%% ===== ⚙️ 服务编排层 =====
subgraph Service["⚙️ 服务编排"]
B[AnalysisService]
C[AgentCoordinator]
D["📊 构建上下文
price · kline · news · indicators"]
end
%% ===== 🤖 多智能体工作流 =====
subgraph Agents["🤖 多智能体工作流"]
subgraph P1["📈 Phase 1 · 多维分析(并行)"]
E1["🔍 MarketAnalyst
技术面分析"]
E2["📑 FundamentalAnalyst
基本面分析"]
E3["📰 NewsAnalyst
新闻舆情"]
E4["💭 SentimentAnalyst
市场情绪"]
E5["⚠️ RiskAnalyst
风险评估"]
end
subgraph P2["🎯 Phase 2 · 多空博弈(并行)"]
F1["🐂 BullResearcher
看多论据"]
F2["🐻 BearResearcher
看空论据"]
end
subgraph P3["💹 Phase 3 · 交易决策"]
G["🎰 TraderAgent
综合研判 → BUY / SELL / HOLD"]
end
end
%% ===== 🧠 记忆层 =====
subgraph Memory["🧠 本地记忆库 SQLite(data/memory/)"]
M1[("market_analyst")]
M2[("fundamental")]
M3[("news_analyst")]
M4[("sentiment")]
M5[("risk_analyst")]
M6[("bull_researcher")]
M7[("bear_researcher")]
M8[("trader_agent")]
end
%% ===== 🔄 反思闭环 =====
subgraph Reflect["🔄 反思闭环(可选)"]
R[ReflectionService]
RR[("reflection_records.db")]
W["⏰ ReflectionWorker"]
end
%% ===== 主流程 =====
A --> B --> C --> D
D --> P1 --> P2 --> P3
%% ===== 记忆读写 =====
E1 <-.-> M1
E2 <-.-> M2
E3 <-.-> M3
E4 <-.-> M4
E5 <-.-> M5
F1 <-.-> M6
F2 <-.-> M7
G <-.-> M8
%% ===== 反思流程 =====
C --> R --> RR
W --> RR
W -.->|"验证 + 学习"| M8
A2 -.->|"手动复盘"| M8
```
#### 1) 记忆是如何“注入提示词”的?
每个 agent 在 `analyze()` 时会:
- **构造 situation**:例如 `"{market}:{symbol} fundamental analysis"`、`"{market}:{symbol} trading decision"` 等
- **携带结构化 metadata**:`market/symbol/timeframe` + `memory_features`(价格、涨跌幅、技术指标等)
- **检索 Top-K 历史经验**:转成一段可读的 `memory_prompt`
- **拼进 system_prompt**:模型在做本次分析前先“读历史经验”
你可以在这些文件里看到同样的模式:
- `backend_api_python/app/services/agents/base_agent.py`:`get_memories()` + `format_memories_for_prompt()`
- `backend_api_python/app/services/agents/*_agents.py`、`trader_agent.py`:把 `memory_prompt` 拼进 system prompt
#### 2) 记忆检索算法(为什么“像”RAG?)
每个角色的记忆表保存(简化):
- **situation / recommendation / result / returns**
- **market / symbol / timeframe / features_json**
- **embedding(可选 BLOB)**:本地“哈希向量”嵌入(无外部依赖)
检索时会从最近 `AGENT_MEMORY_CANDIDATE_LIMIT` 条候选中打分排序:
\[
score = w_{sim}\cdot sim + w_{recency}\cdot recency + w_{returns}\cdot returns\_score
\]
- **sim**:默认用 embedding cosine,相同维度的本地哈希向量;没有 embedding 时退化为 difflib 文本相似度
- **recency**:半衰期衰减(`AGENT_MEMORY_HALF_LIFE_DAYS`)
- **returns_score**:对收益做 `tanh` 压缩,避免极值支配排序
- **timeframe 惩罚**:如果查询 timeframe 与记忆记录 timeframe 不一致,会额外扣分
#### 3) “学习”从哪里来?(两条写入通道)
- **自动反思(可选)**:
- 分析结束后,系统会把 BUY/SELL/HOLD 记录到 `reflection_records.db`
- 开启 `ENABLE_REFLECTION_WORKER=true` 后,后台线程会按 `REFLECTION_WORKER_INTERVAL_SEC` 轮询到期记录,拉取最新价格做验证,并把验证结果写回 `trader_agent_memory.db`
- **手动复盘(推荐)**:
- 调用 `POST /api/analysis/reflect`,把你的真实交易结果(returns/result)写回记忆库,用于后续决策增强
#### 4) 关键环境变量(`.env`)
- **ENABLE_AGENT_MEMORY**:是否启用记忆增强(默认 true)
- **AGENT_MEMORY_TOP_K**:每次注入的经验条数(默认 5)
- **AGENT_MEMORY_CANDIDATE_LIMIT**:候选池大小(默认 500)
- **AGENT_MEMORY_ENABLE_VECTOR**:是否启用 embedding cosine(默认 true;否则退化为文本相似)
- **AGENT_MEMORY_EMBEDDING_DIM**:哈希 embedding 维度(默认 256)
- **AGENT_MEMORY_HALF_LIFE_DAYS**:时间衰减半衰期(默认 30)
- **AGENT_MEMORY_W_SIM / W_RECENCY / W_RETURNS**:三项权重(默认 0.75 / 0.20 / 0.05)
- **ENABLE_REFLECTION_WORKER**:是否启用自动验证闭环(默认 false)
- **REFLECTION_WORKER_INTERVAL_SEC**:自动验证周期(默认 86400 秒)
### 3. 策略运行时
- **基于线程的执行器**:独立的线程池用于策略执行
- **自动恢复**:系统重启后恢复运行中的策略
- **订单队列**:后台工作线程用于订单执行
### 4. 技术栈
- **后端**:Python (Flask) + SQLite + Redis(可选)
- **前端**:Vue 2 + Ant Design Vue + KlineCharts/ECharts
- **部署**:Docker Compose
---
## 🔌 支持的交易所
QuantDinger 支持直接 API 连接到主要加密货币交易所进行执行,并使用 CCXT 获取广泛的行情数据。
### 直接 API 支持
| 交易所 | 市场 |
|:--------:|:---------|
| Binance | 现货, 合约, 杠杆 |
| OKX | 现货, 永续, 期权 |
| Bitget | 现货, 合约, 跟单交易 |
### 也支持通过 CCXT
Bybit、Gate.io、Kraken、KuCoin、HTX 以及 100+ 其他交易所用于行情数据。
---
### 多语言支持
QuantDinger 为全球用户构建,提供全面的国际化支持:
所有 UI 元素、错误信息和文档均已完全翻译。语言会根据浏览器设置自动检测,也可以在应用中手动切换。
---
### 支持的市场
| 市场类型 | 数据源 | 交易 |
|-------------|--------------|---------|
| **加密货币** | Binance, OKX, Bitget, + 100 交易所 | ✅ 全面支持 |
| **美股** | Yahoo Finance, Finnhub, Tiingo | ✅ 通过券商 API |
| **A股/港股** | AkShare, 东方财富 | ⚡ 仅数据 |
| **外汇** | Finnhub, OANDA | ✅ 通过券商 API |
| **期货** | 交易所 API, AkShare | ⚡ 仅数据 |
---
### 架构 (当前仓库)
```text
┌─────────────────────────────┐
│ quantdinger_vue │
│ (Vue 2 + Ant Design Vue) │
└──────────────┬──────────────┘
│ HTTP (/api/*)
▼
┌─────────────────────────────┐
│ backend_api_python │
│ (Flask + 策略运行时) │
└──────────────┬──────────────┘
│
├─ SQLite (quantdinger.db)
├─ Redis (可选缓存)
└─ 数据提供商 / LLMs / 交易所
```
---
### 仓库目录结构
```text
.
├─ backend_api_python/ # Flask API + AI + 回测 + 策略运行时
│ ├─ app/
│ ├─ env.example # 复制为 .env 进行本地配置
│ ├─ requirements.txt
│ └─ run.py # 入口点
└─ quantdinger_vue/ # Vue 2 UI (开发服务器代理 /api -> 后端)
```
---
## 快速开始
### 选项 1: Docker 部署 (推荐)
运行 QuantDinger 最快的方式。
#### 1. 一键启动
**Linux / macOS**
```bash
git clone https://github.com/brokermr810/QuantDinger.git && \
cd QuantDinger && \
cp backend_api_python/env.example backend_api_python/.env && \
docker-compose up -d --build
```
**Windows (PowerShell)**
```powershell
git clone https://github.com/brokermr810/QuantDinger.git
cd QuantDinger
Copy-Item backend_api_python\env.example -Destination backend_api_python\.env
docker-compose up -d --build
```
#### 2. 访问与配置
- **前端 UI**: http://localhost:8888
- **默认账号**: `quantdinger` / `123456`
> **注意**:为了使用 AI 功能或生产环境安全,请编辑 `backend_api_python/.env`(添加 `OPENROUTER_API_KEY`,修改密码),然后执行 `docker-compose restart backend` 重启服务。
#### 3. 访问应用
- **前端 UI**: http://localhost
- **后端 API**: http://localhost:5000
#### Docker 命令参考
```bash
# 查看运行状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose down
# 停止并删除卷 (警告:会删除数据库!)
docker-compose down -v
```
#### 数据持久化
以下数据挂载到主机,重启容器后依然保留:
```yaml
volumes:
- ./backend_api_python/logs:/app/logs # 日志
- ./backend_api_python/data:/app/data # 数据目录(包含 quantdinger.db)
- ./backend_api_python/.env:/app/.env # 配置文件
```
---
### 选项 2: 本地开发
**先决条件**
- 推荐 Python 3.10+
- 推荐 Node.js 16+
#### 1. 启动后端 (Flask API)
```bash
cd backend_api_python
pip install -r requirements.txt
cp env.example .env # Windows: copy env.example .env
python run.py
```
后端将在 `http://localhost:5000` 上可用。
#### 2. 启动前端 (Vue UI)
```bash
cd quantdinger_vue
npm install
npm run serve
```
前端开发服务器运行在 `http://localhost:8000` 并将 `/api/*` 代理到 `http://localhost:5000`。
---
### 配置 (.env)
使用 `backend_api_python/env.example` 作为模板。常用设置包括:
- **认证**: `SECRET_KEY`, `ADMIN_USER`, `ADMIN_PASSWORD`
- **服务器**: `PYTHON_API_HOST`, `PYTHON_API_PORT`, `PYTHON_API_DEBUG`
- **AI / LLM**: `OPENROUTER_API_KEY`, `OPENROUTER_MODEL`
- **网络搜索**: `SEARCH_PROVIDER`, `SEARCH_GOOGLE_*`, `SEARCH_BING_API_KEY`
- **代理 (可选)**: `PROXY_PORT` 或 `PROXY_URL`
---
## 🤝 社区与支持
- **贡献**: [贡献指南](CONTRIBUTING.md) · [贡献者](CONTRIBUTORS.md)
- **Telegram**: [QuantDinger 群组](https://t.me/quantdinger)
- **Discord**: [加入服务器](https://discord.gg/vwJ8zxFh9Q)
- **📺 视频演示**: [项目介绍](https://youtu.be/HPTVpqL7knM)
- **YouTube**: [@quantdinger](https://youtube.com/@quantdinger)
- **Email**: [brokermr810@gmail.com](mailto:brokermr810@gmail.com)
- **GitHub Issues**: [报告 Bug / 功能请求](https://github.com/brokermr810/QuantDinger/issues)
---
## 💰 项目可持续性
QuantDinger 是开源且免费使用的。如果你觉得它有用,以下是一些支持项目持续发展的方式:
### 直接捐赠
**ERC-20 / BEP-20 / Polygon / Arbitrum**
```
0x96fa4962181bea077f8c7240efe46afbe73641a7
```
### 交易所推荐链接
如果你正在注册支持的交易所,使用下面的链接可以提供推荐收益,帮助支持项目。这些是可选的,不会影响你的交易费用或账户功能。
| 交易所 | 推荐链接 |
|:--------:|:-------------|
| Binance | [使用推荐链接注册](https://www.bmwweb.ac/referral/earn-together/refer2earn-usdc/claim?hl=zh-CN&ref=GRO_28502_9OSOJ) |
| OKX | [使用推荐链接注册](https://www.bjwebptyiou.com/join/14449926) |
| Bitget | [使用推荐链接注册](https://share.glassgs.com/u/H8XZGS71) |
---
### 专业服务
提供以下专业服务:
| 服务 | 描述 |
|---------|-------------|
| **部署与设置** | 一对一协助服务器部署、配置和优化 |
| **定制策略开发** | 针对特定需求和市场定制交易策略 |
| **企业版升级** | 商业授权、优先支持和企业级高级功能 |
| **培训与咨询** | 为你的交易团队提供实战培训和战略咨询 |
**感兴趣?** 联系我们:
- 📧 Email: [brokermr810@gmail.com](mailto:brokermr810@gmail.com)
- 💬 Telegram: [QuantDinger Group](https://t.me/quantdinger)
---
### 致谢
QuantDinger 站在这些伟大的开源项目肩膀之上:Flask, Pandas, CCXT, Vue.js, Ant Design Vue, KlineCharts 等。
感谢所有维护者和贡献者! ❤️