# trade — 数字货币量化交易系统 Python + TypeScript (Bun) 混合架构:数据层 TS 采集行情入库,业务层 Python 跑策略/回测/风控。 ## 项目 - **`data/`**:TypeScript (Bun),行情采集、K 线合成、数据写入 TimescaleDB。workdir 必须是 `data/`。 - **`engine/`**:Python 3.10+,策略引擎、回测、信号分发。workdir 必须是 `engine/`,导入用 `from common import ...`。 - 两模块通过 Redis Pub/Sub 通信(设计阶段,尚未实现)。 - 数据库:TimescaleDB(Docker Compose 启动,端口 5432)。配置在根 `env.yaml`。 ## 命令 ```bash # 基础设施 docker compose up -d # 启动 TimescaleDB + Adminer(:8080) # data/ (TS) — 必须先 cd data cd data && bun install # 安装依赖 bun run data/run/exchange.ts --concurrency 2 # 拉取历史 K 线 bun run data/run/build_aggregates_sql.ts # 连续聚合刷新 (dry-run) bun run data/run/build_aggregates_sql.ts --execute # 实际执行聚合刷新 bun run lint # eslint bun run format # prettier bun run build # tsc 类型检查 ``` ## 架构 ``` data/ engine/ exchanges/rest.ts Binance common/base.py 策略基类 types/base.ts 类型定义 common/models.py Pydantic 数据模型 types/kline.ts K线类型 common/logger.py 日志 entities/ TypeORM backtest/ 回测引擎 run/exchange.ts 拉取入口 indicators/ 技术指标 run/build_aggregates_sql.ts example/ 策略示例+回测脚本 ``` - **K 线复合主键**:`[exchange, symbol, interval, time]`,TimescaleDB 超表按 `time` 分区。 - **`synchronize: false`**:TypeORM 不自动 sync schema,改实体需手动迁移。 - **`@timescaledb/typeorm` 是 v0.0.1 实验版**,连续聚合用原生 SQL 视图(`klines_5m` / `klines_15m` 等)。 - TS 侧价格字段为 `string`(精度),Python 侧 Pydantic `field_validator` 转 float。 - `KLINE_INTERVAL_MS` 定义在 `data/exchanges/rest.ts` 和 `data/types/kline.ts` 两处,新增周期需同步。 ## 约定 - **中文优先**:所有回答和推理用中文;代码、标识符、文件名、技术术语保持原文。 - **运行时是 Bun,不是 Node.js**:TS 执行用 `bun run `,禁止 `node`/`npm`/`npx`。 - **workdir 严格分离**:TS 命令在 `data/`,Python 命令在 `engine/`。`package.json` 在 `data/` 中。 - **先确认再动手**:涉及多文件或架构决策时先出方案等用户点头。不做未要求的改动。 - **一次改一处**:逐步 edit_file,不批量 multi_edit。改完让用户看到再继续。 - **拒绝时先问原因**:操作被 declined 不要立即换方式重试。 - **配置单一源**:`env.yaml` 是 TS 和 Python 共享的唯一配置,含 API Key,禁止硬编码密钥。 - **Python 虚拟环境**:`engine/.venv/`,未安装依赖(pydantic 等)需先 `pip install`。 ## 现状 - ✅ TS 数据模块:配置加载、TypeORM 实体、Binance REST K 线拉取+UPSERT、连续聚合刷新。 - ❌ 未实现:WebSocket 行情、K 线合成管道、Redis 发布、策略管理器、信号总线、回测引擎、参数优化器、风控、交易执行、API 网关。 - ❌ 无测试、无 CI。 - `data/run/main.ts` 不存在,`dev`/`start` 脚本指向未创建文件。 ## 注意事项 - `env.yaml` 含明文密钥且被 git 追踪,不可提交到公开仓库。 - 数据库当前指向远程 `10.0.0.7`,本地开发改 `env.yaml` 中 host 为 `localhost`。 - `db/pgsql/` 是 Docker volume 数据目录,已在 `.gitignore`。