用途
该技能用于协助设置和运行交易引擎模拟,并在运行前后进行诊断分析。当前阶段为双重焦点:验证 + 优化。技能说明中指出系统置信度约 85% 准确,模拟系统大体可信但仍存在差异,找出这些差异很关键。
技能建议在运行模拟之前调用,以辅助设置决策:配置选择、通过 collection 选择 segment、批量规模。
优先级
第一优先级:准确性差异。任何预期行为与实际行为之间的差距都可能是 bug 或误解,需要突出显示,包括:行为是否匹配配置参数、数据是否存在逻辑不一致、结果是否与策略应有产出一致。
第二优先级:利润优化。在系统可信的前提下,研究哪些配置表现最好、什么市场条件适合哪些策略、参数如何影响 PnL。
使用方式
用户输入优先。如果用户在调用技能时提供了任何参数、指令或上下文,这些优先于所有默认值。例如用户指定运行某配置、测试某些 segment 或提出特定问题,则按用户指定执行,不运行完整默认流程。默认行为仅在无参数调用时生效。
默认设置流程
- 选取多样化的配置和 segment,使用 segment collections(legacy filters 已弃用):查询可用配置
SELECT name, config FROM strategy_configs ORDER BY name;选择 10–20 个配置覆盖不同指标类型(EMA、RSI、Bollinger、combined)。 - 选择或创建 segment collection(v1 中仅支持 AND annotations),命令示例:
bun src/systems/trading-engine/bd-segments.ts listbun src/systems/trading-engine/bd-segments.ts create --name=high-activity --annotations=high_activity --limit=100bun src/systems/trading-engine/bd-segments.ts preview --name=high-activity
- 运行批量模拟:
bun src/systems/trading-engine/batch-runner.ts --config-pattern="<pattern>" --collection=high-activity --save
推荐批量规模为每批 2,000–3,000 次模拟,约 30–60 秒(启用 tick caching),能提供统计上有效的结果,超过 3,000 在当前阶段收益不大。公式:配置数 × segment 数 = 总运行数(例如 20 配置 × 100 segment = 2,000 次运行)。
Batch Runner CLI 参考
位置:src/systems/trading-engine/batch-runner.ts
用法:bun src/systems/trading-engine/batch-runner.ts [options]
选项包括:--config=ID(-c,策略配置 ID,可指定多个)、--all-configs(-a,运行所有可用策略配置)、--config-pattern=PAT(-p,按名称模式匹配配置,SQL LIKE)、--strategy-type=TYPE(按策略类型过滤:volatility、arb、grid)、--collection=NAME|ID(-C,segment collection 选择器,必需)、--show-selection(预览解析后的 segment 列表并退出)、--capital=CENTS(初始资金,单位分,默认 10000 = $100)、--workers=N(-w,并行 worker 数,默认 8)、--save(-S,保存结果到数据库)、--dry-run(显示将运行什么但不执行)、--warmup-candles=N(指标预热,默认 50)、--db-pool-max=N(主批处理 DB pool 大小,默认 10)、--db-pool-max-worker=N(worker 进程 DB pool 大小,默认 3)。
示例:
# 在一个 segment collection 上运行单个配置
bun src/systems/trading-engine/bd-segments.ts create --name=swings100 --annotations=high_activity
bun src/systems/trading-engine/batch-runner.ts --config=abc123 --collection=swings100 --save
# 在一个 collection 上运行所有配置
bun src/systems/trading-engine/batch-runner.ts --all-configs --collection=swings50 --save
# 在指定 segment ID 上运行所有配置(snapshot collection)
bun src/systems/trading-engine/bd-segments.ts create --name=segment-set --segment-ids=949,950,951,952 --mode=snapshot
bun src/systems/trading-engine/batch-runner.ts --all-configs --collection=segment-set --save
# 在 high_activity segments 上运行匹配 "RSI-*" 的配置
bun src/systems/trading-engine/bd-segments.ts create --name=rsi-activity --annotations=high_activity
bun src/systems/trading-engine/batch-runner.ts --config-pattern="RSI-%" --collection=rsi-activity --save
# 空跑查看将执行什么
bun src/systems/trading-engine/batch-runner.ts --all-configs --collection=swings100 --dry-run
模拟后综合分析(始终运行)
技能要求模拟完成后运行以下全部诊断查询,以表格呈现结果:
- 2.1 核心统计:每个配置的运行数、平均/标准差/最小/最大交易数。
- 2.2 入场信号频率:计算入场间隔的平均值、中位数及小于 1 秒、5 秒、1 分钟的间隔数量。中位间隔小于 60 秒提示过度交易;健康配置间隔通常为分钟级(典型 20–30 分钟);小于 1 秒为主力红旗,说明指标持续触发。
- 2.3 持仓重叠:平均和最大并发持仓数。
- 2.4 持有时间分布:按时间段分桶(<30s、30–60s、1–2min、2–3min、3–4min、4–5min、5min+),统计交易数与平均 PnL。
- 2.5 退出原因分析:按 exit_reason 统计交易数、平均 PnL 与占比。
- 2.6 YES vs NO 双向分析:检查不对称性。YES/NO 表现显著不对称可能意味着价格转换或方向选择逻辑存在 bug。除策略明确偏好一侧外,两侧特征应相似。
- 2.7 仓位规模验证:检查成交数量是否匹配配置的 maxTradeSize,是否有部分成交,并与 maxPositionPerMarket 比较。
- 2.8 交易序列表现:按交易序号分桶(第 1 笔、2–5 笔、6–10 笔、11–20 笔、21 笔以上)查看平均 PnL 与胜率。
- 2.9 市场片段分析:按 segment 定义统计运行数、交易数、平均运行 PnL 及 swing 数、reversion rate 等指标。
- 2.10 运行健康检查:按状态统计运行数。若批处理后仍有 running 状态则说明有模拟崩溃。
日志分析(始终运行)
- 查找最近模拟日志:
ls -lt logs/sim/ | head -5 - 采样日志内容并统计类别日志量(性能红旗:超过 100 万条指标日志):
rg '"category"' "$LOG" | jq -r '.category' | sort | uniq -c | sort -rn - 从时间戳检查运行时长
- 统计退出原因分布
- 检查错误(level 50)和警告(level 40)
需关注的异常:不常见的退出原因(非 profit_target、time_limit、collapse、end_of_data)、错误级条目、疑似 bug 的模式(重复相同条目、字段缺失)。性能提示:日志文件超过 500MB 表示日志过多;超过 100 万条指标类别日志表示调试日志成为瓶颈。
性能分析
查询最近批次每秒运行数。预期吞吐为启用 tick caching 时 20–40 runs/sec。若低于 10 runs/sec,需排查:是否使用 tick cache、是否启用指标调试日志、worker 是否受 I/O 限制。
分析总结
应同时呈现准确性问题与利润洞察。先做准确性检查(优先级一):配置行为是否匹配参数、是否存在无法解释的模式或异常、指标是否逻辑合理。准确性问题优先,1% 的准确性 bug 可能使利润分析失效。准确性验证后再分析利润:哪些配置最赚钱、跨市场条件有哪些模式、是否有优化机会。
验证问题表列出了各观察项的预期行为与需调查方向,包括入场间隔、退出原因、YES vs NO 表现、仓位规模、持有时间、交易序列、指标触发等。
关键验证检查包括:指标触发频率(入场间隔是否符合指标周期,例如 EMA(20) 配合 60 秒 K 线需要 20 分钟数据,入场是否比这更快出现)、价格/方向一致性(YES 和 NO 应保持一致)。