jackyu66gitandClaude cc95bbb638 v10: Trading OS — 5-subsystem architecture + Signal Intelligence + Dashboard Command Center
Architecture:
- Restructure into 5 subsystems: data/, features/, market/, signals/, execution/, apps/
- Unified ts_code conversion in core/codes.py (idempotent, kills 4 duplicate copies)
- analytics_conn() + kline_glob() — zero hardcoded DB/Parquet paths
- Fixed double-suffix bug (.SZ.SZ) in backfill pipeline root cause

Signal Intelligence (the moat):
- 14 signal types: EMA52, Vegas, Chan, ORB, Gap, NR7, Inside Bar
- 640K+ historical signal instances across 8 backfilled types
- Multi-signal Expectancy Engine with breadth-similarity matching
- Signal backfill CLI: ashare-dp backfill signals

Market Intelligence:
- 8 engines: State, Leadership, Opportunity, Flow, Sentiment, Memory, Knowledge Graph, Recommendations
- Real limit-up/down sentiment via akshare (108 ZT, 19 DT, 52 broken board)
- Knowledge Graph: 8 themes × 30+ concepts with keyword matching
- Money-flow stock recommendations with entry/stop/target trade plans

Dashboard Command Center:
- Decision-first layout: COMMAND → WHERE → WHY → RISK → EXPECTANCY
- Multi-signal Expectancy comparison table (8 types ranked by WR)
- Theme Map visualization with rotation detection
- Intraday Replay infrastructure (30min state snapshots)
- RECOMMENDATIONS card with actionable trade plans

Trading Memory:
- trade_log table + POST/GET/PUT API for trade recording
- Performance stats aggregation

Code Quality:
- 0 hardcoded DB paths, 0 REPLACE hacks, 0 dead ts_code copies
- EMA52 screening deduplicated (CLI + scheduler share one function)
- read_parquet_sql() helper for 28 duplicate patterns
- 6 bugs fixed from code review (NR7 window, theme matching, column indices, etc.)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 12:11:42 +08:00

A-Share Data Platform

A股全量数据服务 — Parquet + DuckDB 存储,REST + WebSocket 双协议。

支持的 K 线周期

周期 代码 数据范围 来源
1 分钟 1m 近 1-3 月(需每日盘后积累) AKShare
5 分钟 5m 同上 AKShare
15 分钟 15m 同上 AKShare
30 分钟 30m 同上 AKShare
1 小时 1h 同上 AKShare
2 小时 2h 1h 实时推导 DuckDB
日线 1d 全部历史(1990 年起) AKShare
周线 1w 从日线推导 DuckDB
月线 1M 从日线推导 DuckDB

分钟线数据受限于上游 API 只保留近 1-3 个月,必须通过每日盘后自动拉取持续积累。日线/周线/月线可随时回填全部历史。

架构

AKShare (East Money / Sina)
  → AKShareClient (dual backend, auto-fallback)
    → BackfillPipeline / EODPipeline
      → Parquet (Hive-partitioned, Zstd compressed)
        → DuckDB (metadata + read_parquet queries)
          → FastAPI (REST + WebSocket)
  • 存储: Parquet 列存(Zstd 压缩 ~80%),Hive 分区 year=YYYY/month=MM/day=DD/data.parquet
  • 查询: DuckDB 内嵌 OLAPread_parquet() 直接读取,支持分区裁剪和谓词下推
  • 数据源: AKShare 封装,双后端自动切换(East Money 国内优先,Sina 全球可访问)

快速开始

安装

pip install -e .

配置

cp .env.example .env
# 编辑 .env 按需调整参数

初始化数据库 + 导入股票列表

ashare-dp backfill init

回填历史数据

# 回填全部日线/周线/月线
ashare-dp backfill daily --workers 10

# 回填指定股票指定日期范围
ashare-dp backfill daily --start 2025-01-01 --end 2026-05-16 --symbols 000001,600000

# 回填近 30 天分钟数据
ashare-dp backfill minute --days 30 --workers 5

启动 API 服务

ashare-dp serve start --port 8000

启动后访问 http://localhost:8000/ 查看文档,http://localhost:8000/docs 查看 Swagger。

命令行查询

ashare-dp query kline 1d 000001.SZ --start 2026-01-01
ashare-dp query latest --freq 1d --ts-code 000001.SZ
ashare-dp query stats
ashare-dp query stocks --exchange SH

API 端点

所有 REST 端点前缀 /api/v1

股票查询

方法 路径 说明
GET /stocks 分页列表,可按交易所/板块筛选
GET /stocks/search?q=平安 名称/代码模糊搜索
GET /stocks/{ts_code} 单只股票详情

K 线查询

方法 路径 说明
GET /klines/{freq}?ts_code=&start_date=&end_date= 单只 K 线查询
POST /klines/{freq}/batch 批量 K 线查询
GET /klines/{freq}/latest?ts_code= 最新交易日数据
GET /klines/available-freqs 支持的频率列表

实时行情

方法 路径 说明
GET /realtime/spot?codes=000001.SZ,600000.SH 实时快照
GET /realtime/market-state 市场状态

交易日历

方法 路径 说明
GET /calendar/trading-days?start=&end= 区间内交易日
GET /calendar/is-trading-day?date= 判断交易日
GET /calendar/next-trading-day?date= 下一个交易日

WebSocket

ws://localhost:8000/ws/realtime

交易时段每 5 秒推送订阅股票的实时行情。连接后发送 JSON 控制消息:

{"action": "subscribe", "codes": ["000001.SZ", "600519.SH"]}
{"action": "unsubscribe", "codes": ["000001.SZ"]}
{"action": "unsubscribe_all"}

其他

方法 路径 说明
GET /health 健康检查
GET /stats 数据库统计(各周期记录数、日期范围)

CLI 命令

ashare-dp version                  # 显示版本
ashare-dp backfill init            # 初始化数据库
ashare-dp backfill daily [...]     # 回填日线/周线/月线
ashare-dp backfill minute [...]    # 回填分钟线
ashare-dp serve start [...]        # 启动 API 服务
ashare-dp query kline ...          # 查询 K 线
ashare-dp query latest ...         # 最新数据
ashare-dp query stocks ...         # 股票列表
ashare-dp query stats              # 数据统计

配置参数

变量 默认值 说明
DATA_DIR data 数据目录
DUCKDB_PATH data/duckdb/ashare.db DuckDB 文件路径
API_HOST 0.0.0.0 API 绑定地址
API_PORT 8000 API 绑定端口
BACKFILL_WORKERS 10 回填并发线程数
AKSHARE_MAX_RETRIES 3 API 调用重试次数
AKSHARE_RETRY_DELAY 1.0 重试基础延迟(指数退避)
AKSHARE_BACKEND auto 数据后端: auto, em (East Money), sina
REALTIME_POLL_INTERVAL 5 实时行情轮询间隔(秒)
LOG_LEVEL INFO 日志级别

部署说明

  • 国内服务器: 配置 AKSHARE_BACKEND=em 使用 East Money 后端(数据质量更好)
  • 海外服务器: 保持 auto,客户端会自动检测并降级到 Sina 后端
  • 分钟线积累: 盘后拉取任务(15:05 北京时间)必须稳定运行,否则分钟线历史会出现缺口
  • 存储估算: 约 12 GB / ~3,300 文件(全部历史 + 所有频率),建议 SSD

开发

pip install -e ".[dev]"
pytest
ruff check src/
S
Description
No description provided
Readme
329 KiB
Languages
Python 100%