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

PineScript:calc_on_order_fills=true时如何避免多次订单成交警报

问题

当设置calc_on_order_fills=true时,即使pyramiding(加仓)设为0,仍会收到多次订单入场警报。尝试通过如下代码限制仅在无持仓时开仓:

shortCondition = close < ta.sma(close,50)
if strategy.position_size == 0
    strategy.entry(id="SHORT2",long=false, qty = positionSize, when = shortCondition)

但发现strategy.position_size需等到蜡烛收盘后才会更新。若交易在同一根蜡烛内完成开平仓,该变量不会显示变化;strategy.closedtrades的计数也存在同样问题,需蜡烛收盘后才更新。请问是否有其他函数可在蜡烛收盘前(盘中)判断当前是否持仓或已开仓?

解决方案

在Pine Script中,要实现盘中实时判断持仓状态,可采用以下两种实用方法:

1. 自定义全局变量追踪持仓状态

自行维护一个布尔变量,在订单成交时立即更新状态,无需等待K线收盘:

var inPosition = false  // 初始化持仓状态标记

shortCondition = close < ta.sma(close,50)
exitCondition = close > ta.sma(close,50)

// 开仓逻辑:无持仓且满足条件时下单,同时更新状态
if not inPosition and shortCondition
    strategy.entry(id="SHORT2", long=false, qty=positionSize)
    inPosition := true

// 平仓逻辑:持仓且满足条件时平仓,同步更新状态
if inPosition and exitCondition
    strategy.close(id="SHORT2")
    inPosition := false

这种方法通过自定义变量inPosition实时同步持仓变化,不受K线周期限制,能在同一根K线内准确反映开平仓后的状态。

2. 使用strategy.opentrades系列函数

strategy.opentrades可实时获取当前未平仓订单的信息,其中strategy.opentrades.size能直接返回当前未平仓的订单数量,成交后立即更新:

shortCondition = close < ta.sma(close,50)

// 无未平仓订单且满足开仓条件时触发入场
if strategy.opentrades.size == 0 and shortCondition
    strategy.entry(id="SHORT2", long=false, qty=positionSize)

该函数无需等待K线收盘,能精准反映盘中实时的持仓情况,有效避免同一根K线内重复触发入场警报。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:50:44