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

如何在策略输入中使用“once per bar”功能并实现即时交易?

实现「每根K线仅触发一次」+实时无延迟交易的量化策略方案

核心需求拆解

你需要同时满足两个关键点:

  • 复刻指标的「每根K线仅执行一次」特性,避免同一K线内重复触发交易信号
  • 不等待K线收盘,价格满足条件时立即执行交易操作

具体实现(以Pine Script为例)

以下是直接可用的代码示例,结合tick级计算和自定义触发标记来实现需求:

//@version=5
strategy("实时触发+单K线限次策略", overlay=true, calc_on_every_tick=true, default_qty_type=strategy.cash, default_qty_value=1000)

// 示例交易条件:价格上穿/下穿20日均线
ma20 = ta.sma(close, 20)
long_condition = ta.crossover(close, ma20)
short_condition = ta.crossunder(close, ma20)

// 自定义变量:标记当前K线是否已触发过交易
var bool has_triggered = false

// 新K线启动时重置触发标记
if ta.change(time)
    has_triggered := false

// 多单触发:条件满足且当前K线未触发过
if long_condition and not has_triggered
    strategy.entry("Long", strategy.long)
    has_triggered := true  // 标记为已触发,防止同一K线重复执行

// 空单触发:同理
if short_condition and not has_triggered
    strategy.entry("Short", strategy.short)
    has_triggered := true

关键逻辑说明

  • calc_on_every_tick=true:强制策略在每个价格tick更新时重新计算,实现实时响应,无需等待K线收盘
  • ta.change(time):检测新K线的开始,此时重置has_triggered变量,确保每根K线的触发状态独立
  • not has_triggered:交易条件判断时加入该限制,保证同一K线内无论价格如何波动,都只会执行一次交易,完美复刻指标的「once per bar」效果

注意事项

  • 确认你的交易平台支持tick级策略计算,部分平台默认仅在K线周期节点执行计算
  • 实时触发可能会提升信号响应速度,但通过单K线限次控制,可以避免过度交易
  • 回测时建议使用tick级历史数据,确保策略逻辑符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:20:07