Skip to content

v0.5.0 条件单 + 参数网格 + 日内规则 + 面板引擎区

Choose a tag to compare

@oldfunk oldfunk released this 19 Oct 08:00
· 318 commits to main since this release

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 侧无冲突