Pineスクリプトでは、比較演算子の結果は、true
、false
、na
の3つの可能性がある。
na
の値を持つ変数に対して比較演算子を用いた場合、比較演算子の結果は常に na
となる。つまり、変数 a = na
のとき、a == true
、a == false
、a != true
、a != false
、a == na
、a != na
は全て na
と評価される。
このように、比較演算子の結果は true
か false
だけだと思い込んでいると、Pineスクリプトでは、予想に反した結果を得ることになるので注意が必要。
また、変数 a = na
のとき、a == na
、a != na
両方とも結果が na
となるので、変数の値が na
かどうか確認したいときはビルトイン関数 na()
を使う必要がある。関数 na()
は、与えられた変数の値が na
なら true
、そうでなければ false
を返す。
na
との評価結果の確認には下記のコードを使用した。
//@version=4
study("comparison with na")
eval(c) => c ? 1 : (na(c) ? na : 0)
NA = bool(na)
b1 = bool(true)
c1 = NA == b1 // na == true
plot(eval(c1)) // na
b2 = bool(false)
c2 = NA == b2 // na == false
plot(eval(c2)) // na
b3 = bool(true)
c3 = NA != b3 // na != true
plot(eval(c3)) // na
b4 = bool(false)
c4 = NA != b4 // na != false
plot(eval(c4)) // na
b5 = bool(na)
c5 = NA == b5 // na == na
plot(eval(c5)) // na
b6 = bool(na)
c6 = NA == b6 // na != na
plot(eval(c6)) // na