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

Pine Script空单选取高于入场收盘价的最近Swing High设止损

Pine Script空单止损位选取逻辑修复方案

问题背景

  • 交易策略原设计为使用近期Swing High(摆动高点)作为做空交易的止损点位
  • 实盘运行异常:部分交易场景下获取到的最近swingHigh低于计划入场K线的收盘价,导致空单开仓后立刻触发止损
  • 目标实现逻辑:策略自动选取距离当前最近、且数值高于入场K线收盘价的swingHigh作为空单止损位

原有代码

初始开仓与止损设置逻辑:

if isShort
   strategy.entry("Short",strategy.short)
   shortSL := swingHigh

初步尝试的修复思路为调用ta.barssince函数,计算满足条件的K线回溯数量,但写法存在两个问题:一是判断条件符号写反,二是未做入场价固定、无效值过滤:

barsback = ta.barssince(swingHigh < close)

当前卡点:无法让函数将历史Bar的swingHigh数值与当前入场K线的close值做固定比较。

异常场景示例

空单交易示例

  • 第一笔空单运行正常:对应的最近swingHigh高于入场K线收盘价,止损触发符合预期
  • 第二笔空单开仓即触发止损:当时取到的最近swingHigh低于入场K线收盘价,不符合止损位设置要求

可行实现代码

核心逻辑为开仓时固定记录入场参考价,过滤无效摆动高点值,直接提取最近一个满足“高于入场价”要求的摆动高点作为止损:

// 摆动高点定义,可根据自身策略参数调整,示例为左右各2根K线确认的标准swing high
swingHigh = ta.pivothigh(2, 2)

var float shortSL = na

if isShort
    strategy.entry("Short", strategy.short)
    // 固定开仓当根K线收盘价为入场参考价,避免后续K线价格变动导致止损漂移
    entryRefPrice = close
    // 直接取最近一次满足条件的摆动高点值,无需手动计算K线偏移
    shortSL := ta.valuewhen(not na(swingHigh) and swingHigh > entryRefPrice, swingHigh, 0)

// 止损出场逻辑
if strategy.position_size < 0
    strategy.exit("Short Exit", "Short", stop=shortSL)

关键说明:

  • 必须在开仓当根K线记录入场参考价,不能直接复用K线循环中变动的close值,否则会出现止损位随行情漂移的问题
  • 判断条件需同时过滤值为na的无效摆动高点,避免取值错误
  • 原初步写法的判断符号写反,查找高于入场价的摆动高点需要用>而非<

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:09:19