保持敬畏之心
交易是一场持久战

Pine Script(74):指定平仓模式-close_entries_rule参数详解

#Pine Script入门教学

在交易中,当我们分批建仓后,平仓时通常遵循一个默认规则“先进先出”(FIFO)。你可以把它想象成排队出场:最早进场的仓位,在平仓时也最先被平掉,这是TradingView策略的默认行为,也符合大部分经纪商的执行规则。

但如果你的策略逻辑比较复杂呢?比如你有一个基于长期趋势的底仓,后来又根据短期波动信号加了两次仓,现在短期信号消失,你想先平掉后面这两个加仓的头寸,但继续持有最早的那个底仓,这时候排队出场的FIFO规则就成了障碍。

为了解决这个问题,Pine Script提供了 close_entries_rule 这个参数,它允许我们打破默认的排队规则,实现精准点名,想让哪个仓位先出场,就让哪个先出场。

close_entries_rule 有两个可选值:

  • "FIFO":默认值,严格遵守“先进先出”规则。
  • "ANY":允许你按任意顺序,指定平掉某一个具体的入场订单。

启用这个功能很简单,只需要在 strategy() 函数中,将 close_entries_rule 的值设为字符串 "ANY"

//@version=6
strategy(title="我的策略", close_entries_rule="ANY")

如果你想明确使用或强调默认的FIFO规则,可以这样写:

//@version=6
strategy(title="我的策略", close_entries_rule="FIFO")

当然,更常见的做法是直接省略这个参数,因为默认就是FIFO。

仅仅设置 close_entries_rule="ANY" 是不够的!这只是拿到了可以不排队的许可,你还必须在离场时明确告诉系统,你要让谁插队。

要成功实现非FIFO的平仓,你的代码必须同时满足以下四个条件,缺一不可:

  1. 分批建仓: 策略在同一方向上至少有2笔或以上的入场订单。
  2. 开启权限: strategy() 函数中必须设置 close_entries_rule="ANY"
  3. 分批平仓: 策略通过2笔或更多的平仓指令来退出仓位
  4. 明确指定: 你的平仓函数必须明确指定要关闭哪一笔入场订单 使用 strategy.close() 时,通过其 id 参数来指定;使用 strategy.exit() 时,通过其 from_entry 参数来指定

如果这四项没有同时满足,即使你的平仓函数指定了订单ID,Pine Script 依然会强制执行默认的FIFO规则。

提醒

strategy.order() 的局限,你可能会问为什么不能用 strategy.order() 来指定平仓,因为它无法指定要平掉哪一笔入场订单,不满足上述第4个必要条件,所以它只能用于FIFO模式的平仓 。关于经纪商规则限制,这是最重要的一点,由于NFA的合规要求,美国的经纪商在处理股票、期货和外汇时,须使用FIFO规则 ,虽然你可以在TradingView上回测任何品种的非FIFO逻辑,但如果你的经纪商不支持,策略将无法在实盘中正确执行,非美国地区的外汇交易通常则允许非FIFO平仓

有个小细节: close_entries_rule 的值必须是全大写的 "ANY""FIFO",任何其他形式(如 “Any” 或 “any”)都会导致代码报错 此功能无法在策略设置的UI界面中修改,只能通过代码进行配置

总结

close_entries_rule 是Pine Script中实现高级平仓策略的关键参数。

  • 默认的 "FIFO" (先进先出)规则在大多数情况下够用且符合监管。
  • 当你需要更精细化的平仓控制,比如优先平掉加仓的头寸或对冲仓位时,就需要使用 "ANY" 模式
  • 请牢记,启用 "ANY" 模式必须与在 strategy.close()strategy.exit() 函数中明确指定订单ID配合使用,两者缺一不可
赞(0)
未经允许不得转载:图道交易 » Pine Script(74):指定平仓模式-close_entries_rule参数详解
分享到

评论 抢沙发

登录

找回密码

注册