Pine Script策略strategy.exit设定价位触发后未执行平仓问题求助
问题根因
- 错误1:不必要的触发前置判断
你在调用strategy.exit()前增加了if longTPTarget的判断逻辑,这会导致止盈止损订单仅在价格触及TP的那一根K线生效,该K线走完后订单会被自动撤销,后续即使价格再次达到目标位也没有对应订单触发平仓。strategy.exit()本身内置了价位监控能力,不需要手动判断价格是否达标。 - 错误2:
strategy.exit()参数传值错误
你将stop参数也赋值为止盈价exitLongTP,相当于止盈止损设为同一个价位,完全不符合分开设置止盈止损的需求,stop参数应该传入止损价exitLongSL。 - 错误3:调用时机错误
strategy.exit()应该在开仓逻辑执行后立即调用,和开仓逻辑绑定,而不是等价格接近目标位才触发调用,否则会出现订单提交不及时的问题。 - 潜在问题:缩进逻辑错误
你当前贴出的代码里,strategy.entry()的外层判断if dateRange和if closeDistanceFromBaseline < atr没有正确缩进,如果实际代码也是这个格式,会导致开仓条件判断完全失效。
修正后的代码示例
//====================// 多头开仓逻辑 \====================\ // 多头开仓条件 longCondition1 = bBullTrend and c1LongSignal longCondition2 = bLongSignal and c1BullTrend longEntry = longCondition1 or longCondition2 // 执行多头开仓 if dateRange and closeDistanceFromBaseline < atr strategy.entry("Long", strategy.long, qty = totalPosition, when = longEntry) // 绑定多头止盈止损 exitLongTP = valuewhen(longEntry, longProfit, 0) exitLongSL = valuewhen(longEntry, longLoss, 0) // 直接调用exit,不需要前置判断,策略会自动监控价位 strategy.exit("Long Exit", "Long", limit = exitLongTP, stop = exitLongSL)
额外验证建议
- 确认
longProfit和longLoss的计算逻辑没有未来函数,不会在开仓后发生数值漂移 - 检查策略设置里的「仅在收盘价计算」选项是否开启,如果开启的话盘中触及价位不会触发平仓,只会在K线收盘后判断
- 确认没有其他平仓逻辑(比如
strategy.close())在止盈触发前提前平掉了多头仓位
内容的提问来源于stack exchange,提问作者kenjosimmons
相关产品推荐
相关产品推荐

