Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
16 KiB
AI ICT Codebase Skeleton Spec v1
1. 文档目标
本文档用于把 AI ICT 项目第一阶段的总体设计进一步落到“代码骨架”粒度,明确:
- 目录结构
- 模块职责
- 配置文件分工
- 服务边界
- 运行入口
- 第一轮实现顺序
目标不是一次把全部业务写完,而是先把后续开发要长期承载的工程骨架固定下来,确保数据库、规则引擎、信号、执行、回测和 AI 报告都能在同一套结构下持续推进。
2. 设计原则
代码骨架应遵循以下原则:
- 先支撑基础数据与基础规则,再支撑信号与执行
- 规则判定与 AI 解释分层,不混在一个模块里
- 数据入库、规则计算、信号生成、执行管理职责分离
- 所有核心输出都应能回写 PostgreSQL
- 第一阶段优先单体代码仓库,模块清晰即可,不急于微服务拆分
因此,第一版更适合采用:
- 单仓库
- 单进程多入口
- 共享
config/db/models/services/rules - 后续再按实际负载拆服务
3. 推荐目录结构
建议第一版代码仓库采用以下结构:
ai-ict/
src/
app/
config/
db/
migrations/
seeds/
repositories/
domain/
market/
session/
structure/
signal/
execution/
backtest/
report/
services/
market-data/
rule-engine/
signal/
execution/
report/
backtest/
rules/
swings/
ranges/
liquidity/
sweep/
displacement/
structure/
fvg/
bias/
jobs/
api/
runtime/
utils/
types/
scripts/
tests/
unit/
integration/
fixtures/
docs/
.env.example
package.json
tsconfig.json
README.md
说明:
src/domain/放领域对象与核心数据结构,不放外部 API 细节src/services/放跨模块编排逻辑src/rules/放纯规则判定逻辑src/db/放 migration、seed、repository 和数据库接入src/runtime/放各类启动入口src/jobs/放定时任务、重算任务、数据同步任务src/api/放 HTTP 接口或内部管理接口
4. 目录职责拆分
4.1 src/app/
用于放应用装配层。
建议内容:
- 容器初始化
- 配置加载
- 日志初始化
- 数据库初始化
- 服务注册
- runtime 共享启动辅助
这个目录不负责业务规则本身,只负责把系统拼起来。
4.2 src/config/
用于集中管理配置。
建议拆分:
src/config/
env.ts
database.ts
market.ts
sessions.ts
timeframes.ts
risk.ts
models.ts
职责建议:
env.ts- 读取环境变量
- 做最小边界校验
database.ts- PostgreSQL 连接参数
- pool 配置
market.ts- 交易所、品种、symbol 映射
sessions.ts- ASIA / LONDON / NY_AM / NY_LUNCH / NY_PM 定义
timeframes.ts- bias/setup/trigger 周期配置
risk.ts- 单笔风险、日亏损、新闻窗口、会话限制
models.ts- 各策略模型编码,例如
SWEEP_MSS_FVG
- 各策略模型编码,例如
要求:
- 配置模块只负责提供配置值
- 不在配置模块里写业务查询或数据库逻辑
4.3 src/db/
用于统一管理数据库接入。
建议结构:
src/db/
client.ts
migrations/
seeds/
repositories/
venues-repository.ts
instruments-repository.ts
candles-repository.ts
market-sessions-repository.ts
swings-repository.ts
dealing-ranges-repository.ts
liquidity-pools-repository.ts
sweep-events-repository.ts
displacement-events-repository.ts
structure-events-repository.ts
fvg-zones-repository.ts
bias-snapshots-repository.ts
trade-signals-repository.ts
trade-executions-repository.ts
backtest-runs-repository.ts
backtest-results-repository.ts
职责:
client.ts负责 PostgreSQL 连接与事务入口migrations/放正式 migration 文件seeds/放初始种子数据repositories/只负责表读写,不负责业务判断
建议约束:
- repository 不直接做规则识别
- 复杂业务编排交给
services/ - 规则计算交给
rules/
4.4 src/domain/
用于放领域模型与跨模块共享结构。
建议子目录:
src/domain/
market/
session/
structure/
signal/
execution/
backtest/
report/
可承载内容:
- Candle
- SessionWindow
- Swing
- DealingRange
- LiquidityPool
- SweepEvent
- DisplacementEvent
- StructureEvent
- FvgZone
- BiasSnapshot
- TradeSignal
- TradeExecution
- BacktestRun
- BacktestResult
要求:
- 领域层表达“数据是什么”
- 不表达“从哪个 API 拉来的”
- 不耦合具体数据库客户端
4.5 src/rules/
这是第一阶段最关键的纯规则层。
建议结构:
src/rules/
swings/
detect-swings.ts
ranges/
detect-dealing-range.ts
classify-price-location.ts
liquidity/
detect-liquidity-pools.ts
sweep/
detect-sweeps.ts
displacement/
detect-displacement.ts
structure/
detect-msb.ts
detect-mss.ts
fvg/
detect-fvg.ts
update-fvg-status.ts
bias/
build-bias-snapshot.ts
职责:
- 输入标准化市场数据或上游结构对象
- 输出结构化判定结果
- 尽量保持纯函数、可回测、可重复执行
设计要求:
rules/不直接调用交易所 APIrules/不直接控制下单rules/可以被实时运行和回测共用
这层是后续“规则口径与回测口径一致”的核心。
4.6 src/services/
服务层负责把 repository、rules、外部数据源串起来。
建议结构:
src/services/
market-data/
ingest-okx-candles.ts
sync-instruments.ts
generate-market-sessions.ts
rule-engine/
rebuild-market-structure.ts
run-swing-pipeline.ts
run-liquidity-pipeline.ts
run-structure-pipeline.ts
signal/
build-bias.ts
generate-trade-signals.ts
update-signal-state.ts
execution/
run-risk-check.ts
create-paper-order.ts
create-semi-auto-order.ts
manage-open-position.ts
report/
build-pre-market-report.ts
build-intraday-report.ts
build-post-trade-review.ts
backtest/
run-backtest.ts
summarize-backtest.ts
服务层职责是:
- 组织调用顺序
- 控制事务边界
- 调用 repository 落库
- 调用 rules 计算
- 处理任务入口与失败恢复
要求:
- service 可以依赖多个 repository 和 rule 模块
- service 不应把 SQL 写得到处都是
- service 不应承载底层公共工具函数
4.7 src/jobs/
用于放异步任务与定时任务入口。
建议首批任务:
sync-okx-candles-job.tsgenerate-sessions-job.tsrebuild-swings-job.tsrebuild-liquidity-job.tsgenerate-signals-job.tsrun-backtest-job.ts
职责:
- 作为 cron 或手动触发入口
- 调用
services/完成任务 - 记录任务执行日志
4.8 src/api/
第一阶段即使不做完整前端,也建议预留轻量 API 层。
建议提供:
- health check
- recent candles query
- current sessions query
- current structure query
- candidate signals query
- backtest summary query
作用:
- 供后续 Web 控制台使用
- 供人工验证与调试使用
- 避免所有数据检查都依赖直接查库
4.9 src/runtime/
用于放程序入口。
建议结构:
src/runtime/
worker.ts
api-server.ts
market-data-runner.ts
rule-engine-runner.ts
signal-runner.ts
backtest-runner.ts
每个入口只负责:
- 启动应用上下文
- 选择要跑的 service 或 job
- 处理进程级日志与退出码
不建议把核心业务直接堆在入口文件里。
4.10 src/utils/
只放通用工具。
例如:
- 时间处理
- 数值精度处理
- 时区转换
- 分页工具
- 幂等键生成
要求:
- 不把业务规则偷偷塞进
utils - 与 ICT 规则直接相关的逻辑应留在
rules/
4.11 src/types/
用于放跨层共享类型。
例如:
- DTO
- job payload
- service input/output
- API response shape
如果某类型已经明显属于领域对象,应优先放回 domain/,不要全堆在 types/。
5. 服务边界
结合总体设计,第一阶段建议保留 5 条主要服务边界。
5.1 market-data-service
职责:
- 拉取 OKX / LMAX 行情
- 规范化 candles
- 维护 instruments 元数据
- 生成 market sessions
- 持续写入 PostgreSQL
核心输入:
- 交易所 API
- 品种配置
- session 配置
核心输出:
venuesinstrumentscandlesmarket_sessions
5.2 rule-engine-service
职责:
- 基于 candles 和 sessions 识别结构
- 生成 swings、ranges、liquidity、sweep、displacement、MSS、FVG
- 维护结构对象的更新与重算
核心输入:
candlesmarket_sessions- 参数配置
核心输出:
swingsdealing_rangesliquidity_poolssweep_eventsdisplacement_eventsstructure_eventsfvg_zones
5.3 signal-service
职责:
- 汇总 higher timeframe context
- 生成 bias snapshot
- 把结构链路组合成 trade signal
- 维护 signal 状态流转
核心输出:
bias_snapshotstrade_signals
5.4 execution-service
职责:
- 风控检查
- 模拟盘执行
- 半自动下单编排
- 持仓与订单状态更新
核心输出:
trade_executions- 风控结论
- 审计记录
5.5 report-service
职责:
- 盘前计划
- 盘中解释
- 盘后复盘
- 回测摘要
- 为 LLM 准备结构化输入
核心要求:
- 只解释规则层和执行层的结构化结果
- 不绕过规则直接生成裸建议
6. 配置文件与环境变量建议
第一阶段建议至少具备以下配置文件:
6.1 .env.example
建议包含:
DATABASE_URL=
OKX_API_KEY=
OKX_API_SECRET=
OKX_PASSPHRASE=
LMAX_BASE_URL=
APP_TIMEZONE=UTC
DEFAULT_SESSION_TIMEZONE=America/New_York
LOG_LEVEL=info
说明:
- 第一阶段至少把数据库和 OKX 接入所需变量明确下来
- 未实际接入的供应商变量也可以预留,但不要提前绑定太多无用项
6.2 package.json
建议承载:
- dev 启动命令
- migration 命令
- seed 命令
- ingest 命令
- rule rebuild 命令
- backtest 命令
6.3 tsconfig.json
建议固定:
- 路径别名
- strict 模式
- source map
- 测试目录纳入方式
6.4 日志与格式配置
若使用:
- ESLint / Biome
- Prettier
- Vitest / Jest
应在项目启动初期固定,避免中期频繁改工程规范。
7. 数据库层与代码层映射建议
第一阶段建议先把数据库对象与代码模块稳定映射:
| 数据表 | repository | 主要服务 | 主要规则 |
|---|---|---|---|
venues |
venues-repository.ts |
sync-instruments.ts |
- |
instruments |
instruments-repository.ts |
sync-instruments.ts |
- |
candles |
candles-repository.ts |
ingest-okx-candles.ts |
- |
market_sessions |
market-sessions-repository.ts |
generate-market-sessions.ts |
- |
swings |
swings-repository.ts |
run-swing-pipeline.ts |
detect-swings.ts |
dealing_ranges |
dealing-ranges-repository.ts |
run-structure-pipeline.ts |
detect-dealing-range.ts |
liquidity_pools |
liquidity-pools-repository.ts |
run-liquidity-pipeline.ts |
detect-liquidity-pools.ts |
displacement_events |
displacement-events-repository.ts |
run-structure-pipeline.ts |
detect-displacement.ts |
structure_events |
structure-events-repository.ts |
run-structure-pipeline.ts |
detect-msb.ts / detect-mss.ts |
fvg_zones |
fvg-zones-repository.ts |
run-structure-pipeline.ts |
detect-fvg.ts |
bias_snapshots |
bias-snapshots-repository.ts |
build-bias.ts |
build-bias-snapshot.ts |
trade_signals |
trade-signals-repository.ts |
generate-trade-signals.ts |
组合规则 |
trade_executions |
trade-executions-repository.ts |
create-paper-order.ts |
风控规则 |
backtest_runs |
backtest-runs-repository.ts |
run-backtest.ts |
- |
backtest_results |
backtest-results-repository.ts |
run-backtest.ts |
回放逻辑 |
这样可以避免后续代码增长后职责混乱。
8. 运行入口建议
第一阶段建议至少提供以下运行入口。
8.1 API server
用途:
- 健康检查
- 查询当前市场结构
- 查询候选信号
- 查询回测摘要
建议入口:
src/runtime/api-server.ts
8.2 market data runner
用途:
- 定时拉取 OKX candles
- 同步 instruments
- 驱动 session 生成
建议入口:
src/runtime/market-data-runner.ts
8.3 rule engine runner
用途:
- 重算 swings
- 重算 dealing range
- 重算 liquidity
- 重算 displacement / MSS / FVG
建议入口:
src/runtime/rule-engine-runner.ts
8.4 signal runner
用途:
- 生成 bias snapshot
- 生成 trade signal
- 更新 signal 状态
建议入口:
src/runtime/signal-runner.ts
8.5 backtest runner
用途:
- 执行指定模型、品种、周期范围的回测
- 输出 backtest summary
建议入口:
src/runtime/backtest-runner.ts
9. 第一轮实现顺序
结合路线图与总体设计,建议第一轮按以下顺序实现。
9.1 Step 1:项目骨架初始化
先完成:
src/config/src/db/client.tssrc/runtime/src/services/market-data/基础空壳.env.example- 日志模块
完成标准:
- 项目可启动
- 配置可加载
- PostgreSQL 可连接
9.2 Step 2:基础 migration 落地
先建:
venuesinstrumentscandlesmarket_sessionsswingsdealing_rangesliquidity_pools
说明:
- 这是第一阶段共享底座
- 后续所有规则与信号都依赖这些表
9.3 Step 3:OKX 数据接入
优先接通:
- BTC
- ETH
完成内容:
- candles 拉取
- 标准化
- 入库
- 去重
9.4 Step 4:session generator
完成内容:
- ASIA / LONDON / NY_AM / NY_LUNCH / NY_PM 切分
- session high / low / midpoint 生成
- 状态更新
9.5 Step 5:基础规则层
优先实现:
- swings
- dealing_ranges
- liquidity_pools
原因:
- 它们是 sweep / MSS / FVG 的共同前提
9.6 Step 6:核心信号链
按链路推进:
- sweep
- displacement
- MSB / MSS
- FVG
- bias snapshot
- trade signal
主链路保持为:
Sweep -> MSS -> FVG Retrace -> IRL/ERL
9.7 Step 7:回测与执行
在信号链稳定后,再进入:
- backtest
- paper trading
- semi-auto execution
- report generation
不建议跳过回测直接做执行自动化。
10. 第一阶段最小启动文件清单
若现在要直接开始建项目,建议先落以下最小文件:
src/config/env.ts
src/config/database.ts
src/config/sessions.ts
src/db/client.ts
src/db/migrations/001_create_venues.sql
src/db/migrations/002_create_instruments.sql
src/db/migrations/003_create_candles.sql
src/db/migrations/004_create_candles_partitions_and_indexes.sql
src/db/migrations/005_create_market_sessions.sql
src/services/market-data/ingest-okx-candles.ts
src/services/market-data/generate-market-sessions.ts
src/runtime/market-data-runner.ts
src/runtime/api-server.ts
.env.example
若以上文件稳定,再继续进入 swing / dealing range 实现。
11. 验证与关闭标准
根据执行检查清单,代码骨架文档完成至少应满足:
- 文档已写入本地
.md - 路径存在
- 已读取前部内容检查格式正常
- 标题、章节结构、核心内容完整
后续代码真正开始落地时,每个骨架模块也应满足:
- 有目标文件
- 有最小启动或导入验证
- 与当前阶段目标直接相关
12. 当前结论
AI ICT 项目第一阶段最合适的代码组织方式,不是上来拆成很多独立服务,而是:
先建立单仓库、清晰分层、可多入口运行的工程骨架,再按
数据 -> 基础规则 -> 核心信号 -> 回测 -> 执行 -> 报告顺序推进。
只要骨架按本文档固定下来,后续 migration、OKX 接入、session generator、swings、dealing range、liquidity、MSS、FVG 和 signal 都可以在同一套结构下稳定扩展。