2026-03-26 23:10:06 +08:00
2026-03-26 14:13:44 +08:00
2026-03-26 14:13:44 +08:00
2026-03-26 14:13:44 +08:00
2026-03-26 14:13:44 +08:00
2026-03-26 14:13:44 +08:00
2026-03-26 14:13:44 +08:00
2026-03-26 14:13:44 +08:00
2026-03-26 23:10:06 +08:00
2026-03-26 14:13:44 +08:00
2026-03-26 23:10:06 +08:00

AITrading 基础设施 新增

本项目提供一个可直接在 Docker 中运行的量化交易基础设施,包含:

  • Go 实时行情采集服务Binance WebSocket K 线 + Redis Publisher 接口)
  • Python 本地 K 线动态展示工具pandas + mplfinance
  • Backtrader 回测框架(支持 Strategy Class 快速接入)
  • Go 与 Python 之间统一 JSON 数据交换协议

目录结构

.
├── docker-compose.yml
├── go-service
│   ├── Dockerfile
│   ├── go.mod
│   └── main.go
├── python-app
│   ├── Dockerfile
│   ├── requirements.txt
│   └── app
│       ├── data_protocol.py
│       ├── kline_viewer.py
│       ├── backtest_runner.py
│       ├── strategies
│       │   ├── __init__.py
│       │   └── sma_cross.py
│       └── sample_data
│           └── klines.jsonl
└── shared
    └── protocol.md

快速启动Docker

默认已使用国内 Docker Hub 镜像前缀(m.daocloud.io/docker.io/library)加速基础镜像拉取。
如需切换其它镜像代理,可先设置:

export DOCKER_MIRROR_PREFIX=m.daocloud.io/docker.io/library
  1. 构建并启动 Redis + Go 行情服务:
docker compose up --build redis go-service
  1. 单独运行 Python 动态 K 线展示(实时订阅 Redis
docker compose run --rm python-app python app/kline_viewer.py \
  --redis-host redis \
  --redis-port 6379 \
  --channel kline.stream
  1. 运行 Backtrader 回测(可指定自定义策略类):
docker compose run --rm python-app python app/backtest_runner.py \
  --input app/sample_data/klines.jsonl \
  --strategy strategies.sma_cross.SmaCrossStrategy \
  --strategy-param fast=5 \
  --strategy-param slow=13
  1. 股票速查入口(输入代码/名称):
./start.sh local quote 600519
./start.sh local quote 贵州茅台
  1. 启动简单前端页面(信息 + 曲线 + 买卖点):
./start.sh local web

打开浏览器访问:http://localhost:8000

多通道数据接入(解耦)

当前已将上层业务与下游数据源解耦,上层统一走 market 服务层:

  • MARKET_CHANNEL=cn + MARKET_PROVIDER=akshare(默认)
  • MARKET_CHANNEL=cn + MARKET_PROVIDER=cmesdata(需 CMES_TOKEN
  • MARKET_CHANNEL=cn|hk|us + MARKET_PROVIDER=futu(需本地运行 Futu OpenD

示例:

export MARKET_CHANNEL=cn
export MARKET_PROVIDER=akshare
# 或使用 cmesdata
# export MARKET_PROVIDER=cmesdata
# export CMES_TOKEN=你的token
# 或使用 futu需先启动 OpenD
# export MARKET_PROVIDER=futu
# export FUTU_HOST=127.0.0.1
# export FUTU_PORT=11111
# export FUTU_MARKET=cn   # 可选: cn/hk/us默认跟随 MARKET_CHANNEL
# export FUTU_IS_ENCRYPT=0 # 可选: 1/0

说明:

  • web_app.pystock_lookup.py 不再直接依赖具体 SDK
  • 新增市场(如 us / hk)时,只需新增 Provider 并在 market/factory.py 注册
  • futu Provider 已接入:支持按代码/名称检索股票与日 K 线读取(通过 OpenD

Go 服务说明

  • 默认订阅:btcusdt 1m K 线
  • 会将标准 JSON K 线数据打印到 stdout
  • 预留 RedisPublisher 接口,默认实现为 NoopPublisher
  • 若配置 Redis将自动切换到 RedisChannelPublisher

可用环境变量:

  • BINANCE_SYMBOL(默认 btcusdt
  • BINANCE_INTERVAL(默认 1m
  • REDIS_ADDR(例如 redis:6379
  • REDIS_PASSWORD(可选)
  • REDIS_DB(默认 0
  • REDIS_CHANNEL(默认 kline.stream

Python 回测快速接入策略

你可以新增一个策略类并通过完整路径接入:

  • 文件示例:python-app/app/strategies/my_strategy.py
  • 类示例:class MyStrategy(bt.Strategy): ...
  • 启动参数:--strategy strategies.my_strategy.MyStrategy
  • 参数注入:--strategy-param key=value(可重复传入)
  • 回测简报自动输出:Final ValueMax Drawdown (%)Sharpe Ratio

协议定义

统一 JSON 格式位于 shared/protocol.mdGo 与 Python 都使用同一字段语义与时间戳单位(毫秒)。

Description
一个量化交易的工具
Readme 198 KiB
Languages
Python 64.2%
HTML 15.2%
Shell 11.5%
Go 6.9%
Dockerfile 2.2%