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
- 构建并启动 Redis + Go 行情服务:
docker compose up --build redis go-service
- 单独运行 Python 动态 K 线展示(实时订阅 Redis):
docker compose run --rm python-app python app/kline_viewer.py \
--redis-host redis \
--redis-port 6379 \
--channel kline.stream
- 运行 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
- 股票速查入口(输入代码/名称):
./start.sh local quote 600519
./start.sh local quote 贵州茅台
- 启动简单前端页面(信息 + 曲线 + 买卖点):
./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.py与stock_lookup.py不再直接依赖具体 SDK- 新增市场(如
us/hk)时,只需新增 Provider 并在market/factory.py注册 futuProvider 已接入:支持按代码/名称检索股票与日 K 线读取(通过 OpenD)
Go 服务说明
- 默认订阅:
btcusdt1mK 线 - 会将标准 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 Value、Max Drawdown (%)、Sharpe Ratio
协议定义
统一 JSON 格式位于 shared/protocol.md,Go 与 Python 都使用同一字段语义与时间戳单位(毫秒)。
Description
Languages
Python
64.2%
HTML
15.2%
Shell
11.5%
Go
6.9%
Dockerfile
2.2%