在其他编程语言里,switch
语句常用于根据一个变量的不同取值,来执行不同的操作。PineScript虽然没有switch
,但它提供了一个更灵活的替代方案:级联if
语句 (if...else if...else
)。不少人听到级联if很陌生,其实这个语法很简单,指的是一系列连续的 if
/ else if
/ else
条件判断语句,通常用于多条件分支判断的情境。
级联if
语句
它的执行逻辑像一个瀑布,或者说是一个筛子。程序会从上到下,依次检查每个if
或else if
的条件。一旦找到第一个为true
的条件,就执行它对应的代码块,然后立刻跳出整个级联结构,不再检查后面的任何条件。这保证了在多个选项中,有且只有一个会被执行。
案例:根据RSI值设定背景色
下方的指标通过一个级联if
语句来判断5周期RSI的值,并据此在超买、超卖、中性等多个区间应用不同的背景颜色。
//@version=6
indicator(title="级联if案例", overlay=false)
// 1. 计算并绘制RSI
rsiValue = ta.rsi(close, 5)
plot(rsiValue, color=color.new(color.blue, 10), title="RSI")
// 2. 使用级联if语句,像一个多层筛子,根据RSI值决定背景颜色
bgColour = if rsiValue > 90 // 条件1: 严重超买
color.green
else if rsiValue < 10 // 条件2: 严重超卖
color.red
else if rsiValue > 75 // 条件3: 普通超买
color.blue
else if rsiValue < 25 // 条件4: 普通超卖
color.orange
else if rsiValue > 45 and rsiValue < 55 // 条件5: 中性区域
color.yellow
// 注意:如果以上条件都不满足,bgColour会是na
// 3. 80%的透明度图表背景
bgcolor(color.new(bgColour, 80))
这个级联if
语句没有最后的else
分支。这意味着,如果RSI值不在任何一个预设的区间内,bgColour
变量就会被隐式地赋予na
值,背景也就不会有任何特殊颜色。
其在图表上的效果如下:
总结
switch
替代方案:使用级联if
语句(if...else if...
)可以完美模拟switch
的功能,实现多重条件下的“单选”逻辑。级联if
的特性:按顺序判断,一旦某个条件为true
,则执行并跳出整个结构,确保了执行路径的唯一性。