Pineスクリプトの落とし穴:比較演算子の結果は true、false、na の3つの可能性がある

Pineスクリプトでは、比較演算子の結果は、truefalsena の3つの可能性がある。

na の値を持つ変数に対して比較演算子を用いた場合、比較演算子の結果は常に na となる。つまり、変数 a = na のとき、a == truea == falsea != truea != falsea == naa != na は全て na と評価される。

このように、比較演算子の結果は truefalse だけだと思い込んでいると、Pineスクリプトでは、予想に反した結果を得ることになるので注意が必要。

また、変数 a = na のとき、a == naa != 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