Files
AITrading/README.md
2026-03-26 23:10:06 +08:00

143 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AITrading 基础设施 新增
本项目提供一个可直接在 Docker 中运行的量化交易基础设施,包含:
- Go 实时行情采集服务Binance WebSocket K 线 + Redis Publisher 接口)
- Python 本地 K 线动态展示工具pandas + mplfinance
- Backtrader 回测框架(支持 Strategy Class 快速接入)
- Go 与 Python 之间统一 JSON 数据交换协议
## 目录结构
```text
.
├── 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`)加速基础镜像拉取。
如需切换其它镜像代理,可先设置:
```bash
export DOCKER_MIRROR_PREFIX=m.daocloud.io/docker.io/library
```
1. 构建并启动 Redis + Go 行情服务:
```bash
docker compose up --build redis go-service
```
2. 单独运行 Python 动态 K 线展示(实时订阅 Redis
```bash
docker compose run --rm python-app python app/kline_viewer.py \
--redis-host redis \
--redis-port 6379 \
--channel kline.stream
```
3. 运行 Backtrader 回测(可指定自定义策略类):
```bash
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
```
4. 股票速查入口(输入代码/名称):
```bash
./start.sh local quote 600519
./start.sh local quote 贵州茅台
```
5. 启动简单前端页面(信息 + 曲线 + 买卖点):
```bash
./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
示例:
```bash
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` 注册
- `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 Value``Max Drawdown (%)``Sharpe Ratio`
## 协议定义
统一 JSON 格式位于 `shared/protocol.md`Go 与 Python 都使用同一字段语义与时间戳单位(毫秒)。