Pine Script交易策略如何获取多头入场价设置止盈止损
Pine Script 开仓价设置止盈止损解决方案
问题原因
- 原代码中
longCond只要满足ema50>ema200就会每根K线重复触发开仓指令,策略会持续加仓导致持仓平均价strategy.position_avg_price不停变动,TP/SL也会跟着反复更新,不符合预期 - 没有限制开仓触发时机为首次进入多头信号的空仓状态,只有该时刻获取的入场价才是对应订单的实际开仓价格
修正后完整代码
strategy("止盈止损正确写法", overlay = true, initial_capital = 100) ema50 = ema(close, 50) ema200 = ema(close, 200) plot(ema50) plot(ema200) // var关键字定义的变量仅初始化一次,不会随K线刷新重置 var float TP = na var float SL = na var bool holdLong = false longCond = ema50 > ema200 // 仅在空仓且刚触发多头信号时执行开仓 if longCond and not holdLong strategy.entry("long", strategy.long) // 取最新一笔开仓订单的实际入场价,避免加仓导致平均价变动的影响 entryPrice = strategy.opentrades.entry_price(0) TP := entryPrice * 1.2 SL := entryPrice * 0.8 holdLong := true // 仅持有多头仓位时执行退出逻辑 if holdLong strategy.exit("close", "long", limit = TP, stop = SL) // 平仓后重置状态参数,为下次开仓做准备 if strategy.position_size == 0 holdLong := false TP := na SL := na
核心修改点说明
- 新增
holdLong状态变量记录当前持仓状态,避免信号持续期间重复开仓 - 使用
strategy.opentrades.entry_price(0)直接获取指定订单的入场价,比持仓平均价更精准,不受加仓行为影响 - 仅在开仓触发的瞬间计算固定的TP/SL值,后续不会随行情或持仓变化更新,符合策略逻辑
- 平仓后自动重置所有状态参数,保证下一次开仓逻辑正常执行
内容的提问来源于stack exchange,提问作者Sombre Dreamer
相关产品推荐
相关产品推荐

