You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

calc_on_every_tick=false与更高时间框架警报触发时机问询

策略警报触发时机问题解答

用户策略代码

strategy(title="Support BOT ALERTS ALL EXCHANGES ", 
 overlay=true , 
 format=format.price, 
 pyramiding = 0,
 initial_capital = 500,
 calc_on_every_tick = false,
 calc_on_order_fills = true,
 process_orders_on_close = false,
 default_qty_type = strategy.cash,
 default_qty_value = 500,
 commission_type = strategy.commission.percent, 
 commission_value = 0.1, 
 max_labels_count = 500,
 use_bar_magnifier = true)

BuySignal_tf1  =    (buy settings) and barstate.isconfirmed
f_Buy_TF2() =>    [buys settings2]

BuySignaltf2      = request.security(syminfo.tickerid, '60', f_buy_TF2(),  barmerge.gaps_off,  barmerge.lookahead_on)

if BuySignal_tf1 and BuySignaltf2 and strategy.position_size==0
    strategy.entry("Long", strategy.long )

用户问题

启用calc_on_every_tick=false后,若策略引用更高时间框架,警报是否仅在引用的更高时间框架K线收盘时触发?还是该参数仅作用于警报设置的当前时间框架?

回测表现正常,但我不希望警报仅在最高引用时间框架(如4小时)K线收盘时触发,故提前咨询相关建议。


解答

  1. calc_on_every_tick=false的作用范围
    这个参数仅作用于当前图表的时间框架(也就是你设置的1分钟图),它控制策略在当前时间框架的单根K线内是否逐tick计算。关闭后,策略只会在当前时间框架的K线收盘时执行一次计算逻辑。

  2. 跨时间框架信号与警报触发时机
    你通过request.security调用的60分钟信号,因为设置了barmerge.lookahead_on,会在1分钟K线运行期间就获取到60分钟框架的最新状态。而calc_on_every_tick=false会让策略只在1分钟K线收盘时检查所有触发条件(包括跨时间框架的信号),所以警报会在1分钟K线收盘时触发,而非等待更高时间框架的K线收盘。

不过需要注意:如果你的f_Buy_TF2()逻辑依赖60分钟K线的收盘状态(比如加入了barstate.isconfirmed),那只有当60分钟K线收盘后,该信号才会更新,此时后续的1分钟K线收盘时才会触发警报。如果跨时间框架信号不需要等待更高时间框架K线收盘,那只要1分钟K线收盘时所有条件满足,就会触发警报。

  1. 针对需求的建议
  • 如果你不想让警报局限于更高时间框架收盘时触发,当前的设置是可行的——因为策略仍会在1分钟K线收盘时检查条件,只要跨时间框架信号提前满足(取决于你的信号逻辑),就会触发警报。
  • 若需要更及时的警报,可以考虑开启calc_on_every_tick=true,但会增加计算量(1分钟图下影响不大)。同时要注意barstate.isconfirmed的使用,避免在未收盘的K线上误触发信号。

内容的提问来源于stack exchange,提问作者Juz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 04:23:10