将 Pine 脚本 v1 或 v2 转换为 v4

Convert Pine Script v1 or v2 to v4

请看下面我在 Trading View 上找到的一个指标。我的目标是将其与其他指标或震荡指标结合起来制定交易策略。

由于其他指标是使用 Pine Script 版本 4 制作的,我需要确保该指标与版本 4 兼容。当我在顶部添加 //@version=4 时,它会报错。看起来 vswitch21 部分有问题。有人可以帮我解决这个问题吗?

非常感谢

//@version=4
study(title="Volatility Switch [LazyBear]", shorttitle="VOLSWITCH_LB")
dr= roc(close,1)/sma(close,2)
dummy=input(false, title="------- Choose lengths below ----"), il21=input(true, title="21"), il14=input(false, title="14")

vola21=stdev(dr, 21)
vswitch21=((vola21[1] <= vola21 ) + (vola21[2] <= vola21 ) +   (vola21[3] <= vola21 ) +   
        (vola21[4] <= vola21 ) +  (vola21[5] <= vola21 ) + (vola21[6] <= vola21 ) +   
        (vola21[7] <= vola21 ) +  (vola21[8] <= vola21 ) +  (vola21[9] <= vola21 ) +  
        (vola21[10] <= vola21 ) + (vola21[11] <= vola21 ) +  (vola21[12] <= vola21 ) +  
        (vola21[13] <= vola21 ) +  (vola21[14] <= vola21 ) +  (vola21[15] <= vola21 ) +  
        (vola21[16] <= vola21 ) +  (vola21[17] <= vola21 ) +  (vola21[18] <= vola21 ) +  
        (vola21[19] <= vola21 ) +  (vola21[20] <= vola21 ) + 1) / 21

vola14=stdev(dr, 14)
vswitch14=((vola14[1] <= vola14 ) + (vola14[2] <= vola14 ) +   (vola14[3] <= vola14 ) +   
        (vola14[4] <= vola14 ) +  (vola14[5] <= vola14 ) + (vola14[6] <= vola14 ) +   
        (vola14[7] <= vola14 ) +  (vola14[8] <= vola14 ) +  (vola14[9] <= vola14 ) +  
        (vola14[10] <= vola14 ) + (vola14[11] <= vola14 ) +  (vola14[12] <= vola14 ) +  
        (vola14[13] <= vola14 ) + 1) / 14 
 
hline(0.5, title="Median")
plot(il21?vswitch21:na, color=red, linewidth=2, title="VOLSWITCH_21")
plot(il14?vswitch14:na, color=green, linewidth=2, title="VOLSWITCH_14")

有几处需要修改:

  1. 在 v1 中,函数外的任何缩进都被视为一行的延续。在 v4 中,只有不能被 4 整除的缩进被认为是行继续。 vswitch21vswitch14 都是单行,因此您需要使用不是 4 的倍数的缩进。
  2. 两个变量都包含 bool 值的附加值。在 v4 中,不再可能对 bool 值进行加法运算,因此您需要将它们转换为 int.
  3. 颜色常量 redgreen 已重命名为 color.redcolor.green

工作代码:

//@version=4
study(title="Volatility Switch [LazyBear]", shorttitle="VOLSWITCH_LB")
dr= roc(close,1)/sma(close,2)
dummy=input(false, title="------- Choose lengths below ----"), il21=input(true, title="21"), il14=input(false, title="14")

// bool to int
b2i(_bool) =>
    _bool ? 1 : 0

vola21=stdev(dr, 21)
vswitch21=(b2i(vola21[1] <= vola21 ) + b2i(vola21[2] <= vola21 ) + b2i(vola21[3] <= vola21 ) +   
 b2i(vola21[4] <= vola21 ) + b2i(vola21[5] <= vola21 ) + b2i(vola21[6] <= vola21 ) +   
 b2i(vola21[7] <= vola21 ) + b2i(vola21[8] <= vola21 ) + b2i(vola21[9] <= vola21 ) +  
 b2i(vola21[10] <= vola21 ) + b2i(vola21[11] <= vola21 ) + b2i(vola21[12] <= vola21 ) +  
 b2i(vola21[13] <= vola21 ) + b2i(vola21[14] <= vola21 ) + b2i(vola21[15] <= vola21 ) +  
 b2i(vola21[16] <= vola21 ) + b2i(vola21[17] <= vola21 ) + b2i(vola21[18] <= vola21 ) +  
 b2i(vola21[19] <= vola21 ) + b2i(vola21[20] <= vola21 ) + 1) / 21

vola14=stdev(dr, 14)
vswitch14=(b2i(vola14[1] <= vola14) + b2i(vola14[2] <= vola14 ) + b2i(vola14[3] <= vola14 ) +   
 b2i(vola14[4] <= vola14 ) + b2i(vola14[5] <= vola14 ) + b2i(vola14[6] <= vola14 ) +   
 b2i(vola14[7] <= vola14 ) + b2i(vola14[8] <= vola14 ) + b2i(vola14[9] <= vola14 ) +  
 b2i(vola14[10] <= vola14 ) + b2i(vola14[11] <= vola14 ) + b2i(vola14[12] <= vola14 ) +  
 b2i(vola14[13] <= vola14 ) + 1) / 14 
 
hline(0.5, title="Median")
plot(il21?vswitch21:na, color=color.red, linewidth=2, title="VOLSWITCH_21")
plot(il14?vswitch14:na, color=color.green, linewidth=2, title="VOLSWITCH_14")