Files
DinQuant/README_CN.md
T
2026-01-03 20:25:58 +08:00

510 lines
21 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">
⚡ 5 分钟启动你自己的本地 TradingView + AI 量化投研实验室
</h3>
<p align="center">
<strong>🤖 AI 原生 · 🔒 隐私优先 · 🚀 全能量化工作台</strong>
</p>
<p align="center">
<i>下一代本地量化平台:多市场数据、AI 投研、可视化回测与自动交易。</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://github.com/brokermr810/QuantDinger/issues"><strong>报告 Bug</strong></a> ·
<a href="https://github.com/brokermr810/QuantDinger/discussions"><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/+ULKYtlLEE9M4ZWZl"><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/cn6HVE2KC"><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** 是一个专为交易员、研究员和极客设计的**本地优先**(Local-First)量化交易工作台。
与昂贵的 SaaS 平台不同,QuantDinger 将**数据所有权**归还给你。它内置了一个**基于 LLM 的多智能体投研团队**,能够自动从网络收集金融情报,结合本地行情数据,生成专业的分析报告,并与你的策略开发、回测及实盘交易流程无缝集成。
### 核心价值
- **🛡️ 隐私优先**:所有策略、交易日志和 API 密钥都存储在你的本地 SQLite 数据库中。
- **🧠 AI 赋能**:不仅是代码补全,更是真正的 AI 投研分析师(由 OpenRouter/LLM 驱动)。
- **⚡ 多市场支持**:原生支持 **加密货币**、**美股**、**A股/港股**、**外汇** 和 **期货**
- **🔌 开箱即用**:通过 Docker 一键部署。无需复杂的环境配置。
---
## 📚 文档
- [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. 通用数据引擎
无需再为数据 API 发愁。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["📊 构建上下文<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 支持**直连**主要加密货币交易所进行低延迟执行,同时利用 **CCXT** 覆盖广泛的行情数据。
> 💡 **独家福利**:通过下方的合作伙伴链接注册账户,可享受**交易手续费减免**和**独家赠金**。这将在不增加你成本的情况下支持本项目!
| 交易所 | 特点 | 注册福利 |
|:--------:|:---------|:-------------:|
| <img src="https://img.shields.io/badge/Binance-F0B90B?style=for-the-badge&logo=binance&logoColor=white" height="35"/> | 🥇 **全球最大**<br/>现货, 合约, 杠杆 | <a href="https://www.bmwweb.ac/referral/earn-together/refer2earn-usdc/claim?hl=zh-CN&ref=GRO_28502_9OSOJ"><img src="https://img.shields.io/badge/💰_节省_20%25_手续费-FF4D4F?style=for-the-badge" height="38" style="border-radius:10px; box-shadow:0 8px 18px rgba(255,77,79,.35);"/></a> |
| <img src="https://img.shields.io/badge/OKX-000000?style=for-the-badge&logo=okx&logoColor=white" height="35"/> | 🚀 **Web3 & 衍生品**<br/>现货, 永续, 期权 | <a href="https://www.bjwebptyiou.com/join/14449926"><img src="https://img.shields.io/badge/🎁_领取盲盒-722ED1?style=for-the-badge" height="38" style="border-radius:10px; box-shadow:0 8px 18px rgba(114,46,209,.35);"/></a> |
| <img src="https://img.shields.io/badge/Bitget-00C7B1?style=for-the-badge&logoColor=white" height="35"/> | 👥 **社交交易**<br/>跟单交易, 合约 | <a href="https://share.glassgs.com/u/H8XZGS71"><img src="https://img.shields.io/badge/🔥_领取赠金-FA8C16?style=for-the-badge" height="38" style="border-radius:10px; box-shadow:0 8px 18px rgba(250,140,22,.35);"/></a> |
<br>
**同时也支持 (直连/CCXT):**
| <img src="https://img.shields.io/badge/Bybit-F7931A?style=for-the-badge&logoColor=white"/> | <img src="https://img.shields.io/badge/Gate.io-17E6A1?style=for-the-badge&logoColor=white"/> | <img src="https://img.shields.io/badge/Kraken-5741D9?style=for-the-badge&logo=kraken&logoColor=white"/> | <img src="https://img.shields.io/badge/KuCoin-24AE8F?style=for-the-badge&logoColor=white"/> | <img src="https://img.shields.io/badge/HTX-1A73E8?style=for-the-badge&logoColor=white"/> |
|:---:|:---:|:---:|:---:|:---:|
---
### 多语言支持
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`
---
## 🤝 社区与支持
加入我们的全球社区进行策略分享和技术支持:
- **Telegram (Group)**: [Join QuantDinger Telegram Group](https://t.me/+ULKYtlLEE9M4ZWZl)
- **Discord**: [Join Server](https://discord.gg/cn6HVE2KC)
- **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">
---
### 商业服务
我们提供专业服务,助你充分利用 QuantDinger
| 服务 | 描述 |
|---------|-------------|
| **部署与设置** | 一对一协助服务器部署、配置和优化 |
| **定制策略开发** | 针对特定需求和市场定制交易策略 |
| **企业版升级** | 商业授权、优先支持和企业级高级功能 |
| **培训与咨询** | 为你的交易团队提供实战培训和战略咨询 |
**感兴趣?** 联系我们:
- 📧 Email: [brokermr810@gmail.com](mailto:brokermr810@gmail.com)
- 💬 Telegram: [QuantDinger Group](https://t.me/+ULKYtlLEE9M4ZWZl)
---
### 致谢
QuantDinger 站在这些伟大的开源项目肩膀之上:Flask, Pandas, CCXT, Vue.js, Ant Design Vue, KlineCharts 等。
感谢所有维护者和贡献者! ❤️