Repository navigation
v0.5.0 条件单 + 参数网格 + 日内规则 + 面板引擎区
v0.5.0 — 条件单 + 参数网格 + 日内规则 + 面板引擎区
从"能跑回测"推进到"盘中能自动择时执行"。核心变化:AI 只出条件与策略,盘中执行交给规则引擎——
两者共用同一个 RiskManager + PaperBroker,口径一致。
AI 条件单(P4)
条件单现在不成交,只挂一个可验证的触发条件;盘中引擎每分钟核对实时价,触发才过风控下单。
engine/conditional.py:conditional_orders表 + fail-closed 校验(非 A 股代码 / 非法条件类型 /
金额越界 / 有效期 ≤0 或 >30 天一律不入库)+armed → filled / cancelled / expired / rejected状态机engine/ai_conditions.py:AI 只输出「触发价或涨跌幅 + 有效期 + 理由」,池外代码与越界金额由程序丢弃engine/runner.py:ConditionRunner与规则引擎在同一守护循环里各跑各的,单模块异常不拖垮另一模块- CLI:
cond list / add / cancel / tick / design;面板:「条件单」区可人工挂条件、AI 设计、撤销
不触发就是 0 成本,每条都留痕,可复盘 AI 准不准。
参数网格(P3.5)
engine optimize 批量回测参数变体,按超额收益(对比等权买入持有)排序。
网格:ma_cross / rsi_zone / trailing_stop(日线)与 vwap_dev / minute_ma(日内)。
输出是"值得继续验证的线索",不是结论——样本外复验前不要写进生产规则集。
日内规则(分钟线)
规则类型从 6 种加到 9 种,新增三种依赖当日分钟线的:
| 类型 | 触发 |
|---|---|
vwap_dev |
现价偏离当日均价 ±N%(低于买、高于卖) |
intraday_pullback |
自日内高点回落 N%(可选先涨 M% 以上) |
minute_ma_cross |
分钟均线金叉 / 死叉 |
回测器新增逐分钟重放:窗口只到当前分钟(ts > now 的分钟一律丢弃)、成交价取该分钟收盘、
当日买入的份额当天卖不掉(T+1)。没有分钟数据时回测会在 skipped 里写明"未触发",不假装跑过。
面板
- 「规则引擎」区:规则集一览(开关/间隔/单笔下限/校验结果)、一键回测(策略 vs 基准 + 超额 + ASCII 净值曲线)、
参数网格排序表、最近触发记录 - 「条件单」区:挂条件(代码/方向/触发类型/触发值/金额/有效期)、AI 设计、撤销、状态列表
- CLI 与面板的回测/网格走同一份实现,避免两处口径漂移
修复
size_for_value去掉靠短路求值蒙对的写法- 条件单的 A 股代码校验改用
integration.universe.is_a_share,与选股口径统一
诚实边界
分钟线只覆盖最近约 5 个交易日,日内规则与日内网格的样本天然极小,面板与 CLI 都会显式提示。
手写这批代码时最该记住的一句:回测漂亮不等于能赚——先有度量,再谈优化。
验证
111 个离线单测全绿(新增 test_engine_cond / test_engine_intraday / test_dashboard_engine)。
兼容性
config.yaml新增注释化的engine.rules示例(原为空列表,无行为变化)data.db新增minute_bars/quote_log表,paper_account.db新增conditional_orders/
engine_state/engine_triggers表——均为新增,与 Stock Dashboard 侧无冲突