[TradingView]Pineで直線をプロットする

Pocket

TradingViewでカスタムインジケータを実装するのに使うPineスクリプトを使って、直線をプロットする方法です。特に直線をひくことに意味はありません。

過去のデータに対する変数の値を利用して処理を行うにはSelf Referencing Variable(自己参照型変数と呼ぶことにします)を利用することで実現できます。

この自己参照型変数はversion3では削除されているようです。

自己参照型変数の利用には[]を使ってインデックスを指定するみたいですが、普通に配列をイメージして使えばよさそうです。

すなわち現在処理中のデータを[0]として、1つ前のデータは[1]、2つ前のデータは[2]、……という感じになっています。

これを利用して右上がりの直線を描くには、前の値に特定の量を加えた値を次々とつくれば良いので、次のように記述できます。

study()関数は実装しているスクリプトの名前を定義します。

2行目のvar = nz(var[1])+1が直線を描くための点のデータを用意している部分ですが、ここでポイントが1つあります。前の値に特定の量を加えた値を次々と作っていけば良いのですから、var[1]+1としたくなります。

一番最初にこのコードが実行されるとき、データは1つしかありませんから、var[1]の値は未定義です。つまりvar[1] = NaN。
このときvar[1]+1はNaN+1となりますが、NaNに何を足そうが結果は常にNaNになります。そのためvar[1]+1と記述してしまうとNaN+1=NaNとなり、結果的に何もプロットされないことになります。
そのため、一番最初の処理では初期値を与えてやる必要があります。そこでnz関数を使います。nzは任意の変数がNaNであるときに0を返します。こうすることでvarの値にNaNが格納されることを防ぐことができます。するとvarの値は1,2,3,……というように増えていきます。

最後にplot関数を使用してデータをプロットしています。

実行すると次のようにプロットされます。

Pocket

コメントを残す

メールアドレスが公開されることはありません。