TradingView にあらかじめ備わっている Pine スクリプトを作成するためのエディタ。
スクリプトを作成するのにはどのエディタを使っても構わないが、Pine スクリプトエディタには下記の利点がある。
エディタを開くには TradingView チャートの下部にある “Pine エディタ” タブをクリックする。そうするとエディタペインが開く。
Pine スクリプトではじめてのスクリプトを作成する。ここでは MACD インジケーターを実装する。
//@version=5 indicator("MACD #1") fast = 12 slow = 26 fastMA = ta.ema(close, fast) slowMA = ta.ema(close, slow) macd = fastMA - slowMA signal = ta.ema(macd, 9) plot(macd, color = color.blue) plot(signal, color = color.orange)
はじめての Pine スクリプトはチャート上で実行され、次のようになるはずである。
サンプルスクリプトのコードを一行ずつ見ていこう。
1 行目://@version=5
これは コンパイラアノテーション (コンパイラに対する特別な指示)。スクリプトが Pine スクリプトのバージョン 5 を使用することをコンパイラに伝えている。
2 行目:indicator(“MACD #1”)
チャート上に表示されるスクリプトの名前を “MACD #1” と定義している。
3 行目:fast = 12
MACD の短期 EMA 期間を格納しておくための整数変数 fast を定義している。
4 行目:slow = 26
MACD の長期 EMA 期間を格納しておくための整数変数 slow を定義している。
5 行目:fastMA = ta.ema(close, fast)
ローソク足の終値系列、期間 fast(=12) の EMA (指数平滑移動平均) を格納する変数 fastMA を定義している。
6 行目:slowMA = ta.ema(close, slow)
ローソク足の終値系列、期間 slow(=26) の EMA を格納する変数 slowMA を定義している。
7 行目:macd = fastMA - slowMA
2 つの EMA の差を格納する変数 macd を定義している。
8 行目:signal = ta.ema(macd, 9)
期間 9 の EMA アルゴリズムを使用して macd を平滑化した値を格納する変数 signal を定義している。
9 行目:plot(macd, color = color.blue)
plot() 関数を呼び出して、変数 macd を青い線で出力している。
10 行目:plot(signal, color = color.orange)
plot() 関数を呼び出して、変数 signal をオレンジの線で出力している。
上の最初のバージョンでは MACD を “手動で” 計算したが、Pine スクリプトはインジケーターとストラテジーを書くために設計されていることから、多くの一般的なインジケーターが組み込み関数として用意されている。
MACD もその一つで、ta.macd() で使用することができる。
では、2 つ目のスクリプトを見ていこう。
//@version=5 indicator("MACD #2") fastInput = input(12, "Fast length") slowInput = input(26, "Slow length") [macdLine, signalLine, histLine] = ta.macd(close, fastInput, slowInput, 9) plot(macdLine, color = color.blue) plot(signalLine, color = color.orange)
注目する点は以下の通り。
先ほどと同じようにサンプルスクリプトを新しいインジケーターにコピーしてみよう。
2 つ目の Pine スクリプトがチャート上で実行される。
チャート上でインジケーターの名前をダブルクリックすると、スクリプトの設定画面が表示され、ここで MACD の MA 期間を変更できる。
2 つ目のサンプルスクリプトのコードを一行ずつ見ていこう。
2 行目:indicator(“MACD #2”)
#1 から #2 に変更したので、2 つ目のインジケーターはチャート上に “MACD #2” と表示される。
3 行目:fastInput = input(12, “Fast length”)
短期 MA 期間の変数に定数を代入する代わりに、スクリプトの設定画面で値を変更できるよう input() 関数を使用している。
デフォルト値は 12、項目名ラベルは “Fast length ” としている。“パラメーター” タブで値を変更した場合、変数 fastInput に新しい値が格納され、スクリプトは再実行される。
4 行目:slowInput = input(26, “Slow length”)
長期 MA 期間についても同じことをする。変数名、デフォルト値、項目名ラベルの値が異なることに注意する。
5 行目:[macdLine, signalLine, histLine] = ta.macd(close, fastInput, slowInput, 9)
ここで ta.macd() 組み込み関数を呼び出し、最初のバージョンのすべての計算を 1 行で行っている。
この関数は 4 つの引数 (関数名 input の後の括弧 ()
で囲まれた値) を必要とし、またこれまでの関数のようにただ 1 つの戻り値を返すのではなく、3 つの変数に 3 つの戻り値を返す。
そのため、関数の結果を受け取る 3 つの変数のリストは角括弧 []
で囲む必要がある。
引数のうち 2 つは、ユーザー入力値が入った変数 (短期 MA 期間 fastInput と長期 MA 期間 slowInput) であるであることに注目する。
6 行目:plot(macdLine, color = color.blue)
7 行目:plot(signalLine, color = color.orange)
プロットする変数名は変わったが、これらの行は最初のバージョンと同じことをしている。
2 つ目のスクリプトは最初のバージョンと同じ計算を行うが、計算に使う 2 つの MA 期間を変更することができるようになった。
また、コードは 3 行短くシンプルになり、改良することができた。