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

请求将Pine Script V1的ATR策略脚本转换为V5版本

Pine Script V1转V5:ATR追踪止损策略转换方案

我尝试手动将一份基于ATR的Pine Script V1策略脚本转换为V5版本,但由于V1与V5版本差异较大,多次尝试均出现大量错误,希望能获得帮助。原脚本代码如下:

// Pine Script V1 原代码
strategy(title="ATR Strategy", overlay = true,  commission_type=strategy.commission.percent,commission_value=0.075)
nATRPeriod = input(2)
nATRMultip = input(3.5)
xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR
xATRTrailingStop = iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
                    iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss), 
                        iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))
pos =   iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1,
        iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
color = pos == -1 ? red: pos == 1 ? green : blue 
plot(xATRTrailingStop, color=color, title="ATR Trailing Stop")

barbuy = close > xATRTrailingStop 
barsell = close < xATRTrailingStop 

strategy.entry("Long", strategy.long, when = barbuy) 
strategy.entry("Short", strategy.short, when = barsell) 

barcolor(barbuy? green:red)

转换后的Pine Script V5代码

// Pine Script V5 转换后代码
//@version=5
strategy(title="ATR Strategy", overlay = true, commission_type=strategy.commission.percent, commission_value=0.075)

nATRPeriod = input.int(2, title="ATR周期")
nATRMultip = input.float(3.5, title="ATR倍数")

xATR = ta.atr(nATRPeriod)
nLoss = nATRMultip * xATR

// 用var声明状态变量,保留历史值
var float xATRTrailingStop = na
xATRTrailingStop := ta.iff(close > ta.nz(xATRTrailingStop[1], 0) and close[1] > ta.nz(xATRTrailingStop[1], 0), 
                            math.max(ta.nz(xATRTrailingStop[1]), close - nLoss),
                            ta.iff(close < ta.nz(xATRTrailingStop[1], 0) and close[1] < ta.nz(xATRTrailingStop[1], 0), 
                                    math.min(ta.nz(xATRTrailingStop[1]), close + nLoss), 
                                    ta.iff(close > ta.nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))

var int pos = 0
pos := ta.iff(close[1] < ta.nz(xATRTrailingStop[1], 0) and close > ta.nz(xATRTrailingStop[1], 0), 1,
              ta.iff(close[1] > ta.nz(xATRTrailingStop[1], 0) and close < ta.nz(xATRTrailingStop[1], 0), -1, ta.nz(pos[1], 0))) 

// V5中颜色需使用color前缀
plot_color = pos == -1 ? color.red : pos == 1 ? color.green : color.blue
plot(xATRTrailingStop, color=plot_color, title="ATR Trailing Stop")

barbuy = close > xATRTrailingStop 
barsell = close < xATRTrailingStop 

strategy.entry("Long", strategy.long, when = barbuy) 
strategy.entry("Short", strategy.short, when = barsell) 

barcolor(barbuy ? color.green : color.red)

关键转换说明

  • 函数前缀:V5要求所有技术分析类函数添加ta.前缀(如ta.atr()、ta.iff()、ta.nz()),数学函数使用math.前缀(如math.max()、math.min())
  • 输入类型:V5区分input.int()和input.float(),替代V1统一的input(),参数类型更明确
  • 状态变量保留:使用var声明xATRTrailingStop和pos,确保变量在每个K线周期保留历史值,避免重复初始化
  • 颜色常量:V5中颜色需使用color.前缀(如color.red),替代V1中直接使用的red等裸常量
  • 语法规范:V5要求变量重新赋值使用:=而非=,明确区分初始化与赋值操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:45:19