知识体系 / 实战与验证

从结构到代码:把判据写成状态机

前面所有概念都有一个共同点:它们都能用价格事实判定。这一篇讲的是怎么把它们真正写成代码 —— 不是伪代码,而是可以被回测、被审计的状态机。

从结构到代码:把判据写成状态机
图:六个可判定的状态

六个状态

把交易过程拆成六个状态:S1 摆动点已确认 → S2 流动池已识别 → S3 扫除发生 → S4 位移出现 → S5 缺口形成 → S6 回撤进入缺口。

每个状态都是一个布尔条件,都能单独计算。六个条件同时为真时才允许下单。

这样做的好处:任何一个状态都可以单独回测、单独关闭、单独统计命中率。而这正是「把主观判断变成可验证系统」的关键。

参数与判据要分开

判据是「结构是什么」,参数是「多严格才算」。例如「有缺口」是判据,「缺口至少 0.03% 宽」是参数。

把两者分开的好处:换品种时只需要改参数,不需要重写判据;回测时也只调参数,不会不小心改变了逻辑本身。

常见的错误是把参数焊死在判据里 —— 例如「跌破前低 5 个点才算 CHoCH」。换到另一个品种,这个 5 点可能等于「任何一次噪音」。

先写判据(结构),再标参数(阈值)。混在一起写,代码会因为换品种而全部作废。

状态机比函数链更稳

如果用「一个函数里顺序判断」的写法,很容易出现「后面的条件覆盖前面的条件」,或者「条件之间互相影响」的问题。

状态机的写法是:每个状态有明确的进入条件和退出条件,状态之间的转移是显式的。这样即使某一步判断错误,也能定位到具体是哪一步错了。

工程上的额外好处:状态机天然适合断点续跑 —— 程序崩溃重启后,可以从当前状态继续,而不需要重放整个历史。

先跑通再做对

第一步不是追求准确率,而是让整条链路跑起来:能检测到摆动点、能识别缺口、能打印出「今天触发了几个信号」。

第二步是可视化校验:把检测到的结构和缺口画在图上,用眼睛对照。这一步能发现 90% 的逻辑错误 —— 比如缺口检测把相邻 K 线也算进去了。

第三步才是回测。跳过前两步直接回测,通常得到的是「代码 bug 的统计特征」,不是策略表现。

本篇要点

  • 六个状态,各自可判定
  • 判据与参数分离
  • 状态机优于函数链
  • 先跑通再校验,最后回测
内容说明:本系列为 ICT / SMC 概念的独立中文整理,概念源自 Michael J. Huddleston 的公开教学体系 (Inner Circle Trader)及社区文献,非翻译转载。文中的判定口径参考了本项目自建的验证知识库, 所有观点仅用于技术教育,不构成任何交易建议,也不承诺任何收益。 保证金交易存在本金全损风险,请自行评估。