You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

为何TradingView Pine Script策略首单名称带+-1等后缀?如何消除?

Bollinger Bands策略订单名称后缀问题解答

问题背景

用户编写了基于布林带的Pine Script策略,使用strategy.entry并配置OCA组避免冲突订单,但运行时发现订单名称自动追加了+1+2等后缀,具体代码如下:

//@version=6
strategy("Bollinger Bands Strategy", overlay=true)

source = close
length = input.int(20, minval=1)
mult = input.float(2.0, minval=0.001, maxval=50)
basis = ta.sma(source, length)
dev = mult * ta.stdev(source, length)
upper = basis + dev
lower = basis - dev

// Entry conditions
if (ta.crossover(source, lower))
    strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands", oca_type=strategy.oca.cancel)
if (ta.crossunder(source, upper))
    strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands", oca_type=strategy.oca.cancel)

用户的疑问:

  1. 为何TradingView会给首单名称追加+1+2等后缀?
  2. 是否有方法避免这类后缀,让订单名称保持一致(如仅显示BBandLEBBandSE)?

问题解答

1. 后缀出现的原因

TradingView给订单名称加后缀是平台订单唯一性追踪机制导致的:

  • 即使配置了OCA组取消冲突订单,系统仍会为每个新生成的订单实例分配唯一标识。当策略重复触发下单条件(哪怕之前的订单已被OCA取消),系统会认为这是新的订单请求,为了区分历史订单(无论状态是成交、取消还是平仓),会自动在名称后追加数字后缀。
  • OCA机制仅负责订单的冲突取消逻辑,不干预订单名称的生成规则。只要系统判断是新的订单创建请求,就会生成带后缀的名称,和是否存在同名历史订单无关。

2. 避免后缀的方法

要固定订单名称,需手动控制订单创建逻辑,确保同一方向的订单不会重复触发创建:

  • 通过strategy.position_size判断当前持仓状态,避免在已有对应方向持仓时触发新订单。
  • 创建新订单前主动取消同名挂单,确保系统不会因存在历史同名订单而生成后缀。

修改后的代码示例:

//@version=6
strategy("Bollinger Bands Strategy", overlay=true)

source = close
length = input.int(20, minval=1)
mult = input.float(2.0, minval=0.001, maxval=50)
basis = ta.sma(source, length)
dev = mult * ta.stdev(source, length)
upper = basis + dev
lower = basis - dev

// 定义固定订单名称
long_order_id = "BBandLE"
short_order_id = "BBandSE"

// 多单触发逻辑:无多单持仓且价格上穿布林下轨
if (ta.crossover(source, lower) and strategy.position_size <= 0)
    strategy.cancel(long_order_id)  // 取消同名挂单
    strategy.entry(long_order_id, strategy.long, stop=lower, oca_name="BollingerBands", oca_type=strategy.oca.cancel)

// 空单触发逻辑:无空单持仓且价格下穿布林上轨
if (ta.crossunder(source, upper) and strategy.position_size >= 0)
    strategy.cancel(short_order_id)  // 取消同名挂单
    strategy.entry(short_order_id, strategy.short, stop=upper, oca_name="BollingerBands", oca_type=strategy.oca.cancel)

关键改动说明:

  • strategy.position_size过滤重复触发:持仓为正(多单)时不触发新多单,持仓为负(空单)时不触发新空单。
  • 下单前主动取消同名挂单,确保新订单是唯一的同名请求,系统不会追加后缀。

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

火山引擎 最新活动