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
相关产品推荐
相关产品推荐

