Skip to content
cloudQuantPublic

About

A financial data middle platform Python library that periodically fetches market data from AKShare, OpenBB and other sources, stores standardized data in MySQL, PostgreSQL and DolphinDB, verifies cross-source data quality, and provides unified data query interfaces.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

598 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

opendata

多源金融数据中台:把各数据源的获取 → 落库 → 服务化收敛为一套统一能力,以 REST + WebSocket 对外提供数据服务。

opendata 为 backtrader / ai-for-investor / bt_api_py 等项目提供统一数据支持:消费方只经 API 取数, 不再各自维护取数脚本。

当前状态

本仓库由 akshare_web 完整拷贝重构而来,正按迭代计划分批交付:

迭代 目标 状态
1A 地基 + 垂直切片 A 股日线一条链路端到端可用,消费方取数成功 进行中(A0 地基已完成)
1B 国内数据全覆盖 + 服务化 A 股四件套 + 期货双源落库,REST/WS + 客户端对外可用 未开始
1C 海外与宏观 + 验收收口 海外/宏观数据可用,上游同步就绪,端到端验收 未开始

迭代1设计与验收标准见 docs/迭代计划/迭代1-重构数据中台/。迭代2正在统一provider布局并补齐固定350个模型任务,执行状态见迭代2开发验收记录;整体尚未验收完成。

三个数据源

来源 形态 许可证 本项目采取的动作
akshare HTTP 爬取各站点 MIT 按需源码级搬运,保留版权声明
OpenBB provider 插件体系 AGPL-3.0 仅借鉴架构,实现全部自研(零源码复制)
同花顺扶摇 API REST(X-api-key) 商业服务 自建客户端位于 opendata/data/providers/ths/,传输层位于其 transport/

向 akshare 与 OpenBB 的致谢与许可证边界见 THIRD_PARTY_NOTICES.md。

功能特性

数据中台能力(迭代 1A/1B 交付)

  • 统一数据契约:与数据源无关的标准化模型(行情 / 复权 / 财务 / 指数成分 / 标的元数据 / 交易日历 / 宏观 …)
  • provider 注册与路由:source="auto" 按权威度与可用性自动选择并可降级;未验证能力不参与自动路由
  • 数仓分层:ods_<domain>_<source>(逐源原始保真)→ 多源交叉校对 → dwd_<domain>(契约统一)
  • 跨源校对:经契约模型归一化后逐字段比对,差异落 dq_diff_report,配套白名单/去重/分级告警
  • 跑批调度:数据域 pipeline(取数 → 落库 → 校对 → 合并 → 推送)作为调度单元,支持断点续拉与失败重入
  • 服务化:REST 查询(分页/过滤/导出/复权口径)+ WebSocket 订阅增量 + 最小 Python 客户端
  • 新鲜度与告警:每日检查各域是否含最近交易日数据,缺失即告警

既有平台能力(延续可用)

  • 数据脚本管理:按分类/频率组织,自动扫描注册,支持自定义脚本
  • 定时任务:Cron / Interval 调度,启用/暂停/删除,指数退避自动重试
  • 执行记录:状态追踪、行数统计、错误与堆栈、耗时与重试次数、统计趋势
  • 用户权限:管理员/普通用户角色、基于角色的访问控制、JWT 认证
  • 数据表管理:表列表、表结构、数据预览(适配 ods/dwd 分层)
  • Web 界面:Vue3 + Element Plus,响应式,暗色/亮色主题
  • 高可用工程:速率限制、结构化日志、健康检查、指标接口

快速开始

Docker(推荐)

cp .env.example .env
# 必填:MYSQL_ROOT_PASSWORD / MYSQL_PASSWORD / WAREHOUSE_ROOT_PASSWORD /
#       WAREHOUSE_PASSWORD / SECRET_KEY(缺失时 compose 会直接拒绝启动)
docker compose up -d

本地开发

pip install -e ".[web,dev]"
cp .env.example .env          # 填写数据库与密钥
alembic upgrade head          # 元数据库迁移
python -m opendata.cli init-db
uvicorn opendata.main:app --reload

前端:

cd frontend && npm install && npm run dev   # http://localhost:5173

更完整的步骤、生产部署与排障见 QUICKSTART.md 与 DEPLOYMENT.md。

API 使用示例

# 登录
curl -X POST "http://localhost:8000/api/v1/auth/login" \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"<your-password>"}'

# 数据能力清单(注册表内容)
curl "http://localhost:8000/api/v1/data/capabilities"

# 按数据域查询(迭代 1A 交付,含复权口径)
curl "http://localhost:8000/api/v1/data/stock/daily?symbols=600519&start=2024-01-01&end=2024-12-31&adjust=qfq"

# 创建定时任务
curl -X POST "http://localhost:8000/api/v1/tasks" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"A股日线增量","schedule_type":"daily","schedule_expression":"17:30"}'

完整接口清单见 API.md。

项目结构

opendata/
├── opendata/                  # 主服务包(自研)
│   ├── api/                   # REST / WS 路由
│   ├── core/                  # 配置、数据库、安全
│   ├── models/  services/     # ORM 模型与业务逻辑
│   ├── data/                  # 统一契约与唯一 provider 注册/路由
│   │   └── providers/         # 自研 provider 描述、模型与注册入口
│   │       ├── akshare/       # 自研 AkShare 适配器
│   │       │   └── _vendor/   # 搬运源码与资源,保留 MIT 许可
│   │       ├── ths/           # THS 端点、模型、导入与 transport 传输层
│   │       └── ...            # 其他来源;注册状态和模型完成状态分别记账
│   ├── pipeline/              # ★ 数据域 pipeline(迭代 1A-A4)
│   └── data_fetch/            # 既有脚本框架(向 provider 体系迁移)
├── opendata_client/           # 独立安装的 REST/WS Python 消费方 SDK
├── frontend/                  # Vue3 + TypeScript 前端
├── alembic/                   # 元数据库迁移
├── alembic_data/              # ★ 数据仓库独立迁移环境(迭代 1A-A4)
├── scripts/                   # 运维与 codemod 工具
├── tests/                     # pytest 测试
└── docs/                      # 设计、部署与验收文档

原 opendata_http/ 与 opendata_fuyao/ 已分别并入上面的 AkShare 与 THS provider;消费方 SDK 保持独立安装包。

开发与代码质量

make check              # ruff + mypy + bandit
make test               # pytest -n 8(默认跳过 e2e)
make test-cov           # 覆盖率门禁 + 报告归档
make quality-ratchet    # 存量债务棘轮检查(只降不升)
make public-api-quality # 公共 API docstring/注解覆盖率
make frontend-lint frontend-typecheck frontend-test
make gate               # 全部门禁聚合,逐项阻断(CI 与本地验收统一入口)

质量分层口径(存量棘轮 / 新增零容忍 / 搬运保真)见 CODE_QUALITY.md。

许可证

本项目采用 BSL 1.1(Business Source License 1.1):

  • 个人与非商业用途:免费使用、修改、分发。
  • 机构内部使用与商业用途:需获得 Licensor 书面授权。
  • Change Date:发布日起 4 年后自动转为 MIT License。

内嵌的 akshare 源码为 MIT 许可,其版权声明与全文见 LICENSE-AKSHARE 与 THIRD_PARTY_NOTICES.md; 该部分代码他人仍可按 MIT 条款取用。

商务授权联系:cloudQuant — 个人主页 / GitHub。 授权范围为软件使用许可,不含数据再分发。

免责声明与使用风险(审阅草案)

免责声明与使用风险草案说明软件、数据、回测和实盘交易的主要风险;该文件尚未批准生效,其中拟议的责任限制不是现行条款。 现行软件许可及第三方许可保持;许可调整状态和待审事项见许可审阅说明。 软件使用许可不代替第三方数据的访问、使用或再分发权限。

数据免责声明

opendata 本身不生产数据。所有数据均来源于第三方站点与商业 API,本项目不主张任何数据权利, 亦不对数据的准确性、完整性与时效性作出保证。消费方须自行确认其数据使用方式符合数据来源方的 条款与适用法律。通用数据说明不构成针对特定个人的投资建议;具体服务或输出的性质应按实际内容与适用法律判断。

数据用途边界已逐源记录于数据权利登记表:公开许可可作为依据,免费接口和开源客户端不自动授予全部数据的落库、再分发或商业使用权。软件许可不包含第三方数据许可;已通过技术对照的源仍须遵守其登记条件。

迭代2新增 BLS 与 FMP 的专属登记。BLS 统计复用须遵守来源、访问日期、免责声明与限额条件;FMP 两个行情模型仅完成离线原型接线,本项目尚无适用订阅与多用户数据许可证明,未批准真实采集、集中落库或分发。新能力均未进入自动选源;模型覆盖和真实验收状态见开发验收记录。

About

A financial data middle platform Python library that periodically fetches market data from AKShare, OpenBB and other sources, stores standardized data in MySQL, PostgreSQL and DolphinDB, verifies cross-source data quality, and provides unified data query interfaces.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages