Files
DinQuant/README_CN.md
T
TIANHE 87c4f1efcc new
Signed-off-by: TIANHE <TIANHE@GMAIL.COM>
2026-01-06 01:49:15 +08:00

553 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<div align="center">
<a href="README.md">🇺🇸 English</a> |
<a href="README_CN.md">🇨🇳 简体中文</a> |
<a href="README_TW.md">🇹🇼 繁體中文</a> |
<a href="README_JA.md">🇯🇵 日本語</a> |
<a href="README_KO.md">🇰🇷 한국어</a>
</div>
<br/>
<div align="center">
<a href="https://github.com/brokermr810/QuantDinger">
<img src="https://ai.quantdinger.com/img/logo.e0f510a8.png" alt="QuantDinger Logo" width="160" height="160">
</a>
<h1 align="center">QuantDinger</h1>
<h3 align="center">
本地优先的量化交易基础设施
</h3>
<p align="center">
<strong>🔒 隐私优先 · 🛠️ 自托管 · 📊 多市场</strong>
</p>
<p align="center">
<i>运行你自己的交易基础设施:数据、分析、回测和执行。</i>
</p>
<p align="center">
<a href="https://www.quantdinger.com"><strong>官方社区</strong></a> ·
<a href="https://ai.quantdinger.com"><strong>在线演示</strong></a> ·
<a href="https://youtu.be/HPTVpqL7knM"><strong>📺 视频演示</strong></a> ·
<a href="CONTRIBUTORS.md"><strong>🌟 加入我们</strong></a>
</p>
<p align="center">
<a href="LICENSE"><img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg?style=flat-square&logo=apache" alt="License"></a>
<img src="https://img.shields.io/badge/Python-3.10+-3776AB?style=flat-square&logo=python&logoColor=white" alt="Python">
<img src="https://img.shields.io/badge/Vue.js-2.x-4FC08D?style=flat-square&logo=vue.js&logoColor=white" alt="Vue">
<img src="https://img.shields.io/badge/Docker-Ready-2496ED?style=flat-square&logo=docker&logoColor=white" alt="Docker">
<img src="https://img.shields.io/github/stars/brokermr810/QuantDinger?style=flat-square&logo=github" alt="Stars">
</p>
<p align="center">
<a href="https://t.me/quantdinger"><img src="https://img.shields.io/badge/Telegram-QuantDinger%20Group-26A5E4?style=for-the-badge&logo=telegram" alt="Telegram Group"></a>
<a href="https://discord.gg/vwJ8zxFh9Q"><img src="https://img.shields.io/badge/Discord-Join%20Server-5865F2?style=for-the-badge&logo=discord" alt="Discord"></a>
<a href="https://x.com/HenryCryption"><img src="https://img.shields.io/badge/X-Follow%20Us-000000?style=for-the-badge&logo=x" alt="X"></a>
</p>
</div>
---
## 📖 简介
### QuantDinger 是什么?
QuantDinger 是一个**本地优先、隐私优先的量化交易基础设施**。它完全运行在你的机器上,让你完全控制自己的策略、交易数据和 API 密钥。
### 为什么选择本地优先?
与将你的数据和策略锁定在云端的 SaaS 平台不同,QuantDinger 在本地运行。你的策略、交易日志、API 密钥和分析结果都保留在你的机器上。没有供应商锁定,没有订阅费用,没有数据泄露风险。
### 适合谁使用?
QuantDinger 为以下用户而构建:
- 重视数据主权和隐私的交易员、研究员和工程师
- 需要透明、可审计的交易基础设施
- 更偏好工程而非营销
- 需要完整的工作流:数据、分析、回测和执行
### 核心功能
QuantDinger 包含一个内置的**基于 LLM 的多智能体研究系统**,能够从网络收集金融情报,结合本地市场数据,生成分析报告。这与策略开发、回测和实盘交易工作流无缝集成。
### 核心价值
- **隐私优先**:所有策略、交易日志和 API 密钥都存储在本地 SQLite 数据库中
- **AI 驱动的分析**:基于 LLM 的研究智能体(OpenRouter/LLM)进行市场分析
- **多市场支持**:加密货币、美股、A股/港股、外汇和期货
- **Docker 部署**:使用 Docker Compose 一键部署
---
## 📺 视频演示
<div align="center">
<a href="https://youtu.be/HPTVpqL7knM">
<img src="docs/screenshots/video_demo.png" alt="QuantDinger 项目介绍视频" width="100%" style="border-radius: 10px; box-shadow: 0 4px 12px rgba(0,0,0,0.15); max-width: 800px;">
</a>
<p><strong>点击上方视频观看 QuantDinger 项目介绍</strong></p>
</div>
---
## 📚 文档
- [Python 策略开发指南](docs/STRATEGY_DEV_GUIDE_CN.md)
## 📸 功能预览
<div align="center">
<h3>📊 专业量化仪表盘</h3>
<p>实时监控市场动态、资产状况和策略状态。</p>
<img src="docs/screenshots/dashboard.png" alt="QuantDinger Dashboard" width="100%" style="border-radius: 10px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);">
</div>
<br/>
<table align="center" width="100%">
<tr>
<td width="50%" align="center" valign="top">
<h3>🤖 AI 深度投研</h3>
<p>多智能体协作进行市场情绪与技术分析。</p>
<img src="docs/screenshots/ai_analysis1.png" alt="AI Market Analysis" style="border-radius: 6px;">
</td>
<td width="50%" align="center" valign="top">
<h3>💬 智能交易助手</h3>
<p>通过自然语言接口获取即时市场洞察。</p>
<img src="docs/screenshots/trading_assistant.png" alt="Trading Assistant" style="border-radius: 6px;">
</td>
</tr>
<tr>
<td width="50%" align="center" valign="top">
<h3>📈 交互式指标分析</h3>
<p>丰富的技术指标库,支持拖拽式分析。</p>
<img src="docs/screenshots/indicator_analysis.png" alt="Indicator Analysis" style="border-radius: 6px;">
</td>
<td width="50%" align="center" valign="top">
<h3>🐍 Python 策略生成</h3>
<p>内置编辑器,支持 AI 辅助策略代码编写。</p>
<img src="docs/screenshots/indicator_creat_python_code.png" alt="Code Generation" style="border-radius: 6px;">
</td>
</tr>
</table>
---
## ✨ 关键特性
### 1. 通用数据引擎
QuantDinger 提供跨多个市场的统一数据接口:
- **加密货币**:直接 API 连接进行交易(10+ 交易所)和 CCXT 集成获取行情数据(100+ 数据源)
- **股票**Yahoo Finance、Finnhub、Tiingo(美股)和 AkShareA股/港股)
- **期货/外汇**: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["📊 构建上下文<br/>price · kline · news · indicators"]
end
%% ===== 🤖 多智能体工作流 =====
subgraph Agents["🤖 多智能体工作流"]
subgraph P1["📈 Phase 1 · 多维分析(并行)"]
E1["🔍 MarketAnalyst<br/><i>技术面分析</i>"]
E2["📑 FundamentalAnalyst<br/><i>基本面分析</i>"]
E3["📰 NewsAnalyst<br/><i>新闻舆情</i>"]
E4["💭 SentimentAnalyst<br/><i>市场情绪</i>"]
E5["⚠️ RiskAnalyst<br/><i>风险评估</i>"]
end
subgraph P2["🎯 Phase 2 · 多空博弈(并行)"]
F1["🐂 BullResearcher<br/><i>看多论据</i>"]
F2["🐻 BearResearcher<br/><i>看空论据</i>"]
end
subgraph P3["💹 Phase 3 · 交易决策"]
G["🎰 TraderAgent<br/><i>综合研判 → BUY / SELL / HOLD</i>"]
end
end
%% ===== 🧠 记忆层 =====
subgraph Memory["🧠 本地记忆库 SQLitedata/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 为全球用户构建,提供全面的国际化支持:
<p>
<img src="https://img.shields.io/badge/🇺🇸_English-Supported-2563EB?style=flat-square" alt="English" />
<img src="https://img.shields.io/badge/🇨🇳_简体中文-Supported-2563EB?style=flat-square" alt="Simplified Chinese" />
<img src="https://img.shields.io/badge/🇹🇼_繁體中文-Supported-2563EB?style=flat-square" alt="Traditional Chinese" />
<img src="https://img.shields.io/badge/🇯🇵_日本語-Supported-2563EB?style=flat-square" alt="Japanese" />
<img src="https://img.shields.io/badge/🇰🇷_한국어-Supported-2563EB?style=flat-square" alt="Korean" />
<img src="https://img.shields.io/badge/🇩🇪_Deutsch-Supported-2563EB?style=flat-square" alt="German" />
<img src="https://img.shields.io/badge/🇫🇷_Français-Supported-2563EB?style=flat-square" alt="French" />
<img src="https://img.shields.io/badge/🇹🇭_ไทย-Supported-2563EB?style=flat-square" alt="Thai" />
<img src="https://img.shields.io/badge/🇻🇳_Tiếng_Việt-Supported-2563EB?style=flat-square" alt="Vietnamese" />
<img src="https://img.shields.io/badge/🇸🇦_العربية-Supported-2563EB?style=flat-square" alt="Arabic" />
</p>
所有 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
```
<img src="https://img.shields.io/badge/USDT-Accepted-26A17B?style=flat-square&logo=tether" alt="USDT">
<img src="https://img.shields.io/badge/ETH-Accepted-3C3C3D?style=flat-square&logo=ethereum" alt="ETH">
### 交易所推荐链接
如果你正在注册支持的交易所,使用下面的链接可以提供推荐收益,帮助支持项目。这些是可选的,不会影响你的交易费用或账户功能。
| 交易所 | 推荐链接 |
|:--------:|:-------------|
| 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 等。
感谢所有维护者和贡献者! ❤️