保持敬畏之心
交易是一场持久战

Pine Script(8):三元运算符的使用

在PineScript里,我们怎么表达“如果条件A成立,就做B;否则,就做C”这种最常见的逻辑呢?

其他编程语言里可能有长长的if/else语句,但在PineScript里,我们有一个更简洁、更高效的工具:条件三元运算符?:。它是PineScript里唯一一个需要三个操作数的“大块头”,但用法却异常简单清晰。

它的语法结构就像一个问答句:

条件 ? 结果1 : 结果2

你可以这么理解:先判断“条件”是否成立,打个问号?;如果成立,就选择冒号:左边的“结果1”;如果不成立,就选择冒号:右边的“结果2”。

在使用时,有两条规则必须遵守:

  1. 返回类型要统一:“结果1”和“结果2”的“数据类型”必须一样。比如,如果结果1是一个颜色,那结果2也必须是颜色,你不能让它返回一个数字,否则程序会“精神分裂”,直接报错。
  2. 条件的判断:前面的“条件”部分,通常就是一个返回truefalse的表达式,比如close > open。但它也可以是一个数字,这时候你要记住,只有0NaN等少数特殊值会被当成false,其他所有非零数字都会被当成true

由于这个运算符总是会返回一个值,因此它最常见的用途就是给变量赋值。比如,一行代码就能决定K线的颜色:

barColour = close > open ? color.blue : color.red

这行代码判断K线收盘价是否高于开盘价,如果是,barColour变量就是蓝色,否则就是红色。

案例一:根据成交量变化为背景上色

下面的指标展示了条件运算符的实际应用,我们可以根据成交量的变化,动态地改变图表背景色。

//@version=6
indicator(title="三元运算符 - 案例1", overlay=true)

// 1. 定义颜色逻辑
background = volume > volume[1] ? color.green : color.yellow

// 2. 将颜色应用到图表背景
bgcolor(color.new(background, 85))

将此示例指标添加到图表后,效果如下(图表下方的柱状图为默认的“成交量”指标):

案例二:嵌套使用实现复杂逻辑

单个?:只能处理“二选一”的场景。那如果我想实现更复杂的“多选一”逻辑,比如“如果条件A成立,就做X;否则,如果条件B成立,就做Y;再否则,就做Z”呢?

答案就是把多个?:嵌套起来,形成一个“逻辑链”。程序会从上到下依次判断,一旦某个条件满足,就立刻返回值,不再继续往下判断。下面这个例子就完美展示了这种用法,它会根据一系列的看涨看跌信号,来绘制不同方向的箭头。

//@version=6
indicator(title="三元运算符 - 案例2 (嵌套)", overlay=true)
height = input.int(20, title="箭头高度")

// 嵌套三元运算符
arrowPlot =
     // 条件1
     close > close[1] and close[1] > close[2] ? 1 :
     // 条件2
     high > high[1] and high[1] > high[2] ? 1 :
     // 条件3
     close < close[1] and close[1] < close[2] ? -1 :
     // 条件4
     low < low[1] and low[1] < low[2] ? -1 :
     // 如果以上所有条件都不满足,则返回na
     na

// 根据arrowPlot的值来绘制箭头
plotarrow(arrowPlot, colordown=color.red, colorup=color.lime,
     maxheight=height, minheight=height)

这段代码的核心在于arrowPlot变量的赋值。我们建立了一个有优先级的判断序列: 首先,判断最强的看涨信号(连续两根K线收高),如果满足,arrowPlot就被赋值为1,整个判断结束。 如果不满足,才继续判断下一个看涨信号(连续创出新高),如果满足,arrowPlot也被赋值为1。 以此类推,接着判断两个看跌信号(赋值为-1)。

在这个逻辑链的最后,我们放了一个na值。它就像一个“保底”的默认选项:如果前面的所有条件都没能满足,那么arrowPlot变量最终就会被赋予na值。plotarrow函数在拿到na时,就知道这里不需要画任何箭头。

将此示例指标添加到图表后,效果如下:

我们还通过input.int()函数,允许用户在指标设置里手动调整箭头的高度。如果我们将“箭头高度”输入选项更改为10,则箭头将更改为:

将其设置为50会创建大箭头:

总结

条件运算符?:是PineScript里实现if/else条件逻辑的紧凑形式,可以理解为“提问-二选一”结构。它返回的两个结果(结果1结果2)必须是相同的数据类型。通过嵌套多个条件运算符,可以构建出复杂的“if/else if/else”逻辑链,程序会按顺序进行判断。逻辑链的最后一个值,会成为所有条件都不满足时的“默认值”。

赞(1)
未经允许不得转载:图道交易 » Pine Script(8):三元运算符的使用
分享到

评论 抢沙发