# 期货统一数据平台 - 项目文档 > **版本**: 0.1.0 > **状态**: 开发中 (Dev) > **维护者**: 小马哥 --- ## 1. 项目概述 本项目是一个**期货统一数据平台**,旨在解决多数据源接入、数据格式不统一、历史行情查询困难等问题。平台提供标准化的 RESTful API 供外部系统或 AI 调用,并配备管理后台进行数据源配置、合约管理及行情可视化。 ### 核心目标 - **统一出口**:无论底层是 Tushare、CTP 还是其他数据源,对外提供统一的数据格式。 - **灵活配置**:支持多数据源切换、优先级管理。 - **高效缓存**:针对历史 K 线数据(日 K/周 K/分钟级)进行分级存储。 - **易于扩展**:基于适配器模式,新增数据源只需实现标准接口。 --- ## 2. 技术架构 ### 2.1 技术栈 | 层次 | 技术选型 | 说明 | |------|----------|------| | **前端** | Vue3 + Vite + Element Plus | 现代化 SPA,响应式布局 | | **图表** | Apache ECharts 5 | 专业金融 K 线图表渲染 | | **后端** | Python 3.11 + FastAPI | 高性能异步 Web 框架 | | **数据库** | PostgreSQL + TimescaleDB | 专为时序数据优化,支持高效压缩与查询 | | **本地开发** | SQLite | 无需外部依赖,快速验证 | | **缓存/消息** | Redis | 实时行情缓存与发布订阅 | | **数据源** | Tushare / AKShare / CTP (规划) | 外部数据接入 | | **部署** | Docker Compose | 一键环境搭建 | ### 2.2 数据源架构 ```text [外部系统/AI] <--> [统一 API 网关] <--> [业务逻辑层] <--> [数据源适配器] | [缓存层 (Redis)] | [持久层 (PostgreSQL)] ``` - **适配器模式**:`DataSourceBase` 定义了 `get_kline_daily`、`get_contract_list` 等标准方法。 - **管理器模式**:`DataSourceManager` 负责加载配置、优先级排序和实例管理。 --- ## 3. 部署与启动指南 ### 3.1 环境准备 - Docker & Docker Compose(生产/测试环境) - Python 3.11+(本地开发环境) - Node.js 20+(前端开发) ### 3.2 Docker Compose 部署(推荐) 适用于拥有完整基础设施(PostgreSQL, Redis)的环境。 ```bash cd share_data/project/futures-data-platform # 1. 配置环境变量 cp .env.example .env # 编辑 .env,填入你的 Tushare Token: TUSHARE_TOKEN=xxxxxx # 2. 启动服务 docker compose up -d --build # 3. 查看日志 docker compose logs -f backend ``` **服务地址:** - 管理后台:http://localhost:3000 - 后端 API:http://localhost:8000 - Swagger 文档:http://localhost:8000/docs ### 3.3 本地开发模式(SQLite) 适用于快速调试,无需启动数据库容器。 ```bash cd backend # 1. 安装依赖 pip install -r requirements.txt # 2. 使用 SQLite 启动后端 export DATABASE_URL="sqlite:///./futures.db" uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 # 3. 启动前端 (新终端) cd frontend npm install npm run dev ``` --- ## 4. 操作指南 ### 4.1 配置数据源 1. 进入**"数据源监控"**页面。 2. 点击 `tushare` 或 `akshare` 行的**"配置"**按钮。 3. 在弹出的配置对话框中: - **启用状态**:使用开关快速启用/禁用该数据源 - **显示名称**:自定义数据源在界面上的显示名称 - **Token** (Tushare):填入你的 Tushare API Token - **最大重试次数** (AKShare):设置反爬重试策略 - **优先级**:数字越小优先级越高,系统将优先使用高优先级数据源 4. 点击**"测试连接"**,确认状态为 `ok`。 5. 点击**"保存"**完成配置。 > **提示**:也可在表格的"启用"列直接点击开关快速切换启用/禁用状态,无需打开配置对话框。 ### 4.2 同步合约信息 1. 进入**"合约管理"**页面。 2. 点击右上角**"同步合约"**按钮。 3. 系统将遍历所有交易所(CFFEX, SHFE, DCE 等)拉取合约信息并入库。 4. 同步完成后,列表将显示所有活跃合约。 ### 4.3 查询与展示 K 线 1. 进入**"K 线查询"**页面。 2. 选择合约(如 `rb2401`)和周期(如 `日 K`)。 3. 点击**"同步数据"**(首次查询建议同步,后续直接查询数据库)。 4. 点击**"查询"**,下方将渲染 ECharts K 线图和详细数据表格。 --- ## 5. 注意事项 ### 5.1 Tushare 积分限制 - 不同积分等级对数据调用的频率和数据范围有限制。 - 高频调用分钟级数据或全量历史数据可能需要较高级别的积分(如 2000 分以上)。 - **建议**:在"接口测试"中先测试单个合约的同步,确认返回数据正常后再批量同步。 ### 5.2 AKShare 反爬策略 AKShare 数据源内置了 `SmartRequester` 反爬管理器,包含以下策略: - **随机 User-Agent**:每次请求轮换浏览器指纹。 - **拟人化延时**:首次请求随机延迟 0.5~1.5s,重试时指数级增加。 - **智能重试**:遇到 403 或网络错误自动重试(默认 3 次)。 - **Referer 伪装**:自动匹配目标网站的 Referer。 > 注:IP 代理功能预留接口,当前版本主要依赖频率控制和头部伪装。 ### 5.3 数据一致性 - 平台默认**"优先读库"**策略。如果数据库中已有缓存数据,直接返回;若无,则调用数据源。 - `sync_kline` 接口采用 `upsert` 逻辑(插入或更新),支持增量同步,不会破坏已有数据。 ### 5.4 生产环境配置 - **数据库**:务必使用 Docker Compose 中的 PostgreSQL + TimescaleDB,SQLite 仅用于本地开发。 - **安全性**:生产环境应移除 `cors.allow_origins=["*"]` 的宽泛策略,改为白名单;数据库密码应通过 Secret 管理。 --- ## 6. 后续规划与改进 ### Phase 1: 基础完善 (当前阶段) - [x] 历史 K 线数据同步与查询(日 K/周 K/分钟) - [x] 合约信息管理 - [x] Tushare 数据源接入 - [x] AKShare 数据源接入 (含反爬策略) - [x] 管理后台基础功能 ### Phase 2: 实时行情与推送 - [ ] **实时行情引擎**:开发 CTP 适配器,接入实时 Tick 和 K 线。 - [ ] **WebSocket 订阅**:实现实时数据推送服务,支持客户端按合约订阅。 - [ ] **行情快照缓存**:利用 Redis 实现最新行情快照的快速读取。 ### Phase 3: 性能与高可用 - [ ] **TimescaleDB 优化**:配置超表(Hypertables)和自动压缩策略。 - [ ] **定时任务调度**:使用 APScheduler 实现每日收盘后的自动数据同步。 - [ ] **多数据源回退**:主数据源异常时,自动切换到备用数据源。 ### Phase 4: 高级功能 - [ ] **数据清洗与校验**:增加数据质量监控,自动识别异常跳空或缺失数据。 - [ ] **AI 辅助接口**:提供专为大模型优化的自然语言转 SQL 接口。 --- ## 7. 开发规范 - **代码风格**:后端遵循 PEP 8,使用 `black` 格式化;前端遵循 ESLint + Prettier。 - **提交规范**: - `feat`: 新功能 - `fix`: 修复 - `docs`: 文档更新 - `refactor`: 重构 - **API 响应格式**: ```json { "code": 0, "message": "ok", "data": { ... } } ``` --- > 文档最后更新:2026-05-07