首页 > 解决方案 > 松树脚本:如果与 IFF

问题描述

回到我的基础.. 似乎无法弄清楚“if”和“iff”语句之间的真正区别,而且我没有找到太多详细解释的信息。“如果”和“?:”具有我收集的相同功能。

这是一些示例代码,根据我使用的 if/iff 函数,它们的行为会有所不同。

'''

longStop = input(title="Stop", type=input.bool, defval=false)

//following works fine when passed to plot funtion
longStpTransp = iff(longStop, 0, 100)

//following does not work when passed to plot function
longStpTransp = if (longStop == true)
    0
else
    100

//also does not work when passed to plot function
longStpTransp = 100
if (longStop == true)
    longStpTransp := 0
else
    longStpTransp := 100
                                       

plot(series=(strategy.position_size > 0) ? longStopPrice : na, color=color.red, 
style=plot.style_linebr, transp=longStpTransp, linewidth=4, title="Long  Stop")

'''

标签: pine-script

解决方案


正确的。所有这些在功能上都是等效的。

if then else
iff
?:

iff与三元条件运算符完全相同,?:但采用函数式风格。
iff比操作员效率略低?:

您的两个示例都正确绘制。

示例 1

//@version=4
study("IF", "IF", false)

longStop = input(title="Stop", type=input.bool, defval=false)

//following does not work when passed to plot function
longStpTransp = if (longStop == true)
    0
else
    100

plot(longStpTransp)

示例 2

//@version=4
study("IF", "IF", false)

longStop = input(title="Stop", type=input.bool, defval=false)

//also does not work when passed to plot function
longStpTransp = 100
if (longStop == true)
    longStpTransp := 0
else
    longStpTransp := 100

plot(longStpTransp)

编辑 1以回应此评论
这是一个有趣的观察。
函数中的transp=参数plot()需要是一个固定的整数。
所以它不能是一个可变变量。
的返回值iff()不被视为可变变量,但在使用时if,它似乎被视为可变变量并被拒绝。
我自己不知道这一点。
我假设iff()并且if-then-else是相同的。
显然情况并非如此。

transp(输入整数)图的透明度。可能的值从 0(不透明)到 100(不可见)。可选参数。


推荐阅读