【新手求教】关于TB回测时Bar内路径模拟与Tick级信号触发的疑问

各位前辈好,我是刚接触 TradeBlazer (TB) 的新手。

在转到 TB 之前,我主要使用 MultiCharts、无限易和天勤等量化软件,对回测引擎的底层逻辑有一点了解。最近在用 TB 跑策略时,对它的 K 线(OnBar)事件触发机制产生了一些疑惑,想向大家请教一下。

【测试案例与现象】 我使用了 TB 系统自带的“海龟交易法则 (TurtleTrader)”作为测试用例,在代码中加入了 Print 和 Commentary 日志,并在螺纹钢指数的日线级别上进行了回测。

通过观察日志(详见下方截图),我发现了一个现象: 在同一根日线 Bar(例如 2022年4月1日 这根 K 线)内,策略不仅触发了长周期突破开仓,还瞬间完成了后续的加仓动作(达到了设定的建仓次数上限)。从日志打印的执行价格来看,系统似乎是直接根据这根 K 线的 High 和 Low 极值,在数学层面一次性“算”出了所有的突破价和加仓价,并在 Bar 结束时模拟成交了。

【我的疑惑】 基于以上现象,我有两个问题想请教熟悉 TB 底层机制的前辈:

  1. Bar内价格细节缺失导致失真: 既然系统默认是通过 High 和 Low 极值来“脑补”成交,那么如果遇到极端的日内波动(例如:先暴涨触发突破开仓 -> 随后立刻暴跌打穿止损 -> 尾盘又拉升收高),这种 OnBar 回测是不是就无法识别真实的先后顺序,从而导致止损被忽略,产生严重的“回测水分”?TB 默认的粗略回测引擎,在面对这种同一根 K 线内同时触及止盈/止损线的情况,内部的处理优先级是怎样的?
  2. 对标其他主流软件,TB 高精度回测的最佳实践是什么? 我之前在其他平台处理此类问题时,通常有以下方案:
  • MultiCharts: 支持原生停损单(Stop Order / 触价单)。虽然代码主逻辑是在 OnBar 时计算并挂单,但回测框架在内部能根据价格轨迹,精细地在具体穿越该价位的时间点触发成交,规避了路径陷阱。
  • 无限易 / 天勤: 纯 Python 驱动,定制化程度极高,可以直接写 on_tick 函数,从根源上监听 Tick 级数据的跳动来发单。

请问在 TB 中: 如果我想实现类似 MC 那样精准的日内触价成交,或者天勤那种 Tick 驱动的逻辑,有什么解决办法吗?

非常感谢各位大佬的指点!




TB回测时事件触发时刻的问题
回测时开平仓信号消失
求教!写了个策略,回测时无信号无交易。求教!
关于tick的疑问
关于setbaseperiod的几个疑问
关于TICK最高价的疑问
如何确定一根bar内的tick数
tb3回测时间选择
关于tick推送的问题
日志路径