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

TradingView PineScript策略回测时止损止盈偶发不触发问题咨询

问题核心原因

1. 止盈止损价计算时机错误

你将strategy.exit和strategy.entry放在同一个if代码块内执行,此时strategy.entry提交的多单还未实际成交,strategy.position_avg_price还没有更新为本次新开仓的成本价,计算出来的止损、止盈价实际上是错误的(首次开仓时甚至会取到0值,导致订单完全无法触发)。
第二次场景正常触发是因为上一次持仓平仓后,position_avg_price残留了上一次的成本值,刚好和本次开仓价接近,才碰巧符合预期。

2. 策略计算频率设置问题

Pine Script策略默认仅在K线收盘时计算信号,如果你的止盈止损是在K线运行过程中被触及,但K线收盘时价格又回到了止盈止损价之外,默认设置下不会触发平仓。
如果需要让策略响应K线内的价格波动,需要在策略声明代码中开启calc_on_every_tick参数:

strategy("你的策略名称", calc_on_every_tick = true, 其他参数...)

3. 回测填充规则匹配问题

如果你的回测设置中开启了严格的订单填充规则(比如要求成交量匹配、滑点设置过大),也会出现价格触及止盈止损位但订单无法成交的情况,可以检查回测设置中的「交易」选项卡,调整填充规则到你需要的模式。


修复代码示例

正确的写法应该是单独判断持仓状态后设置止损止盈,同时增加重复开仓限制,避免订单绑定混乱:

longcon = crossover(ema5, ema21)
longCondition1 = longcon[4]
longCondition2 = ema50 > ema200 ? 1: 0
longCondition3 = bbr > 0.75 ? 1: 0
longCondition4 = sig > 15 ? 1: 0
longCondition5 = ao > 2 ? 1: 0

// 仅在无持仓时开仓,避免重复下单
if (longCondition1 and longCondition2 and longCondition3 and longCondition4 and longCondition5 and strategy.position_size == 0)
    strategy.entry("long", strategy.long)

// 持仓状态下绑定止盈止损,此时开仓价已经更新完成
if strategy.position_size > 0
    strategy.exit("exit", "long", stop=strategy.position_avg_price*0.98, limit=strategy.position_avg_price*1.01)

plot(strategy.position_avg_price)
plot(strategy.position_avg_price*0.98)
plot(strategy.position_avg_price*1.01)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 14:27:02