+97
-112
@@ -1,138 +1,123 @@
|
||||
# QuantDinger Python API Server
|
||||
# QuantDinger Python API (backend)
|
||||
|
||||
Python 后端服务,提供金融数据获取、技术指标分析、AI 智能体分析和回测功能。
|
||||
Flask-based local-first backend for QuantDinger: market data, indicators, AI analysis, backtesting, and a strategy runtime (with an optional pending-order worker).
|
||||
|
||||
## 项目结构
|
||||
This repository is intentionally simple: **no external database is required by default**. Data is stored in a local SQLite file (`quantdinger.db`) created/updated automatically on startup.
|
||||
|
||||
```
|
||||
## What you get
|
||||
|
||||
- **Multi-market data layer**: factory-based providers (crypto / US stocks / CN&HK stocks / futures, etc.)
|
||||
- **Indicators + backtesting**: persisted runs/history in SQLite
|
||||
- **AI multi-agent analysis**: optional web search + OpenRouter LLM integration
|
||||
- **Strategy runtime**: thread-based executor, with optional auto-restore on startup
|
||||
- **Pending orders worker (optional)**: polls queued orders and dispatches signals (webhook/notifications)
|
||||
- **Local auth (single-user)**: `/login` with env-configured admin credentials (JWT)
|
||||
|
||||
## Project layout
|
||||
|
||||
```text
|
||||
backend_api_python/
|
||||
├── app/ # 应用主目录
|
||||
│ ├── __init__.py # Flask 应用工厂
|
||||
│ ├── config/ # 配置模块 ⭐ (支持数据库动态配置)
|
||||
│ │ ├── __init__.py # 配置统一导出
|
||||
│ │ ├── settings.py # 服务配置
|
||||
│ │ ├── api_keys.py # API 密钥集中管理
|
||||
│ │ ├── database.py # 数据库/Redis/缓存配置
|
||||
│ │ └── data_sources.py # 数据源配置
|
||||
│ ├── data_sources/ # 数据源模块
|
||||
│ │ ├── base.py # 数据源基类
|
||||
│ │ ├── factory.py # 数据源工厂
|
||||
│ │ ├── crypto.py # 加密货币 (CCXT)
|
||||
│ │ ├── us_stock.py # 美股 (yfinance/Finnhub)
|
||||
│ │ ├── cn_stock.py # A股/港股 (yfinance/akshare)
|
||||
│ │ └── futures.py # 期货数据源
|
||||
│ ├── services/ # 业务服务层
|
||||
│ │ ├── agents/ # AI 智能体系统 (多智能体架构) ⭐
|
||||
│ │ │ ├── coordinator.py # 智能体协调器
|
||||
│ │ │ ├── tools.py # 智能体工具集 (含搜索/数据获取)
|
||||
│ │ │ ├── analyst_agents.py # 各类分析师 (技术/基本面/新闻等)
|
||||
│ │ │ └── researcher_agents.py # 研究员 (多空辩论)
|
||||
│ │ ├── kline.py # K线数据服务
|
||||
│ │ ├── search.py # 搜索服务 (Google/Bing)
|
||||
│ │ ├── llm.py # LLM 调用封装 (OpenRouter)
|
||||
│ │ └── analysis.py # 分析服务入口
|
||||
│ ├── routes/ # API 路由
|
||||
│ │ ├── health.py # 健康检查
|
||||
│ │ ├── kline.py # K线数据 API
|
||||
│ │ ├── analysis.py # AI 分析 API
|
||||
│ │ └── market.py # 市场数据 API
|
||||
│ └── utils/ # 工具模块
|
||||
│ ├── config_loader.py # 数据库配置加载器
|
||||
│ ├── logger.py # 日志工具
|
||||
│ └── http.py # HTTP 请求
|
||||
├── run.py # 入口文件 ⭐
|
||||
├── gunicorn_config.py # Gunicorn 配置
|
||||
├── requirements.txt # 依赖列表
|
||||
├── start.sh # 启动脚本
|
||||
└── README.md
|
||||
├─ app/
|
||||
│ ├─ __init__.py # Flask app factory + startup hooks
|
||||
│ ├─ config/ # Settings (env-driven)
|
||||
│ ├─ data_sources/ # Data sources + factory
|
||||
│ ├─ routes/ # REST endpoints
|
||||
│ ├─ services/ # Analysis, agents, strategies, search, ...
|
||||
│ └─ utils/ # SQLite helpers, config loader, logging, HTTP utils
|
||||
├─ env.example # Copy to .env for local config
|
||||
├─ requirements.txt
|
||||
├─ run.py # Entrypoint (loads .env, applies proxy env, starts Flask)
|
||||
├─ gunicorn_config.py # Optional production config
|
||||
└─ README.md
|
||||
```
|
||||
|
||||
## 快速开始
|
||||
## Quick start (local development)
|
||||
|
||||
### 1. 安装依赖
|
||||
### Prerequisites
|
||||
|
||||
- Python 3.10+ recommended
|
||||
|
||||
### 1) Install dependencies
|
||||
|
||||
```bash
|
||||
cd backend_api_python
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 2. 数据库配置
|
||||
### 2) Create your local `.env`
|
||||
|
||||
本系统依赖 MySQL 数据库中的 `qd_addon_config` 表进行配置管理。请确保导入 `update_config_search.sql` 等 SQL 文件以初始化配置。
|
||||
Windows (CMD):
|
||||
|
||||
### 3. 启动服务
|
||||
```bash
|
||||
copy env.example .env
|
||||
```
|
||||
|
||||
Windows (PowerShell):
|
||||
|
||||
```bash
|
||||
Copy-Item env.example .env
|
||||
```
|
||||
|
||||
Then edit `.env` and set at least:
|
||||
|
||||
- `SECRET_KEY`
|
||||
- `ADMIN_USER`
|
||||
- `ADMIN_PASSWORD`
|
||||
|
||||
Optional but common:
|
||||
|
||||
- `OPENROUTER_API_KEY` (for AI analysis)
|
||||
- `FINNHUB_API_KEY` / `SEARCH_GOOGLE_*` / `SEARCH_BING_API_KEY` (for richer data/search)
|
||||
- `PROXY_PORT` or `PROXY_URL` (if your network blocks some providers)
|
||||
|
||||
### 3) Start the API server
|
||||
|
||||
**开发环境:**
|
||||
```bash
|
||||
python run.py
|
||||
```
|
||||
|
||||
**生产环境(使用 Gunicorn):**
|
||||
Default address: `http://localhost:5000`
|
||||
|
||||
## Database (SQLite)
|
||||
|
||||
- Default file: `backend_api_python/quantdinger.db` (override via `SQLITE_DATABASE_FILE`)
|
||||
- Tables are created/updated automatically on startup (see `app/utils/db.py`)
|
||||
- `qd_addon_config` exists for backward compatibility, but **this backend reads secrets from `.env` / OS env**, not from the database (see `app/utils/config_loader.py`)
|
||||
|
||||
## Frontend integration (Vue dev server)
|
||||
|
||||
The Vue dev server proxies `/api/*` to this backend by default:
|
||||
|
||||
- Frontend: `http://localhost:8000`
|
||||
- Backend: `http://localhost:5000`
|
||||
|
||||
Proxy config: `quantdinger_vue/vue.config.js`
|
||||
|
||||
## Useful endpoints
|
||||
|
||||
```text
|
||||
GET /health
|
||||
POST /login
|
||||
GET /info
|
||||
GET /api/indicator/kline
|
||||
POST /api/analysis/multi
|
||||
```
|
||||
|
||||
## Production (optional)
|
||||
|
||||
Gunicorn example:
|
||||
|
||||
```bash
|
||||
gunicorn -c gunicorn_config.py "run:app"
|
||||
```
|
||||
|
||||
服务将在 `http://localhost:5000` 启动
|
||||
## Troubleshooting
|
||||
|
||||
## 主要功能
|
||||
|
||||
### 1. 多维度 AI 分析
|
||||
基于多智能体架构 (Multi-Agent Architecture),模拟真实投研团队:
|
||||
- **市场分析师**: 技术面分析 (K线, MACD, RSI, 均线)
|
||||
- **基本面分析师**: 公司财务、估值、行业地位
|
||||
- **新闻分析师**: 实时新闻、舆情分析 (集成 Finnhub + Google/Bing 搜索)
|
||||
- **情绪分析师**: 市场情绪评估
|
||||
- **风险分析师**: 波动率、流动性风险评估
|
||||
- **多空辩论**: 模拟看涨/看跌研究员辩论,提供平衡观点
|
||||
|
||||
### 2. 数据获取增强
|
||||
- **美股**: 实时行情 (Finnhub/yfinance) + 深度公司资料
|
||||
- **加密货币**: 实时行情 (CCXT/Binance) + 项目资讯搜索
|
||||
- **A股/港股**: 延迟行情 + 网络资讯搜索补充
|
||||
|
||||
### 3. 智能搜索集成
|
||||
支持 Google Custom Search 和 Bing Search,自动补全传统数据源缺失的信息(如公司简介、最新突发新闻)。
|
||||
|
||||
## API 接口
|
||||
|
||||
### 健康检查
|
||||
```
|
||||
GET /health
|
||||
```
|
||||
|
||||
### K线数据
|
||||
```
|
||||
GET /api/indicator/kline
|
||||
参数: market (Crypto/USStock/AShare), symbol, timeframe, limit
|
||||
```
|
||||
|
||||
### AI 多维度分析
|
||||
```
|
||||
POST /api/analysis/multi
|
||||
{
|
||||
"market": "USStock",
|
||||
"symbol": "NVDA",
|
||||
"language": "zh-CN"
|
||||
}
|
||||
```
|
||||
|
||||
## 配置说明
|
||||
|
||||
系统配置采用 **数据库 + 环境变量** 混合模式,支持热更新。
|
||||
|
||||
### 核心环境变量 (启动参数)
|
||||
| 变量名 | 说明 |
|
||||
|--------|------|
|
||||
| PYTHON_API_HOST | 监听地址 |
|
||||
| PYTHON_API_PORT | 监听端口 |
|
||||
| MYSQL_HOST | MySQL 主机 |
|
||||
| REDIS_HOST | Redis 主机 |
|
||||
|
||||
### 数据库配置 (`qd_addon_config` 表)
|
||||
大部分业务配置已迁移至数据库,支持动态调整:
|
||||
- **API Keys**: Finnhub, Google Search, Bing Search
|
||||
- **AI 模型**: OpenRouter 模型选择
|
||||
- **系统参数**: 超时时间、重试次数、缓存策略
|
||||
- If outbound data/search requests fail, configure `PROXY_PORT` (or `PROXY_URL`) in `.env`.
|
||||
- If you don’t want strategies to auto-restore on startup, set `DISABLE_RESTORE_RUNNING_STRATEGIES=true`.
|
||||
- If you don’t want the pending-order worker, set `ENABLE_PENDING_ORDER_WORKER=false`.
|
||||
|
||||
## License
|
||||
This project is released under the Apache License 2.0.
|
||||
See the repository root `LICENSE` for details.
|
||||
|
||||
Apache License 2.0. See repository root `LICENSE`.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user