{{tag>pine pine初心者 pine基礎}}
====== 🔰はじめての Pine インジケーター作成 ======
{{INLINETOC}}
===== Pine スクリプトエディタ =====
TradingView にあらかじめ備わっている Pine スクリプトを作成するためのエディタ。\\
スクリプトを作成するのにはどのエディタを使っても構わないが、Pine スクリプトエディタには下記の利点がある。
* Pine スクリプトの構文に従ってコードをハイライトする
* 組込み関数やライブラリ関数にカーソルを置くと、構文のヒントがポップアップ表示される
* Pine スクリプトのキーワードを ctrl + click / cmd + click すると、リファレンスマニュアルがポップアップ表示される
* ctrl + space / cmd + space でオートコンプリート機能を有効にできる
* エディタ上でスクリプトの新しいバージョンを保存すると即座に実行されるため、書き込み / コンパイル / 実行のサイクルを素早く行える
* 有名エディタほど機能は豊富ではないが、検索と置換、マルチカーソル、バージョン管理などの主要な機能を備えている
エディタを開くには TradingView チャートの下部にある "Pine エディタ" タブをクリックする。そうするとエディタペインが開く。
{{gallery>:tradingview:pine:pasted:20230805-100537.png?lightbox}}
===== MACD インジケーターを作成 =====
Pine スクリプトではじめてのスクリプトを作成する。ここでは [[https://jp.tradingview.com/support/solutions/43000502344/|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 エディタの右上にある "開く" ドロップダウンメニューを表示し、"新規インジケーター" を選択する。
* 次に上のサンプルスクリプトをコピーする。行番号を含めないように注意する。
* エディタ内のコードをすべて選択し、サンプルスクリプトに置き換える。
* "保存" をクリックし、スクリプトの名前を決めると、スクリプトが TradingView クラウド上のユーザーアカウントのもとに保存される。他のユーザーは使用できない。
* エディタのメニューバーにある "チャートに追加" をクリックすると、チャート上に MACD インジケーターが別ペインで表示される。
はじめての Pine スクリプトはチャート上で実行され、次のようになるはずである。
{{gallery>:tradingview:pine:pasted:20230805-112808.png?lightbox}}
=== 解説 ===
サンプルスクリプトのコードを一行ずつ見ていこう。
1 行目:''%%//%%@version=5''
これは [[https://www.tradingview.com/pine-script-docs/en/v5/language/Script_structure.html#pagescriptstructure-compilerannotations|コンパイラアノテーション]] (コンパイラに対する特別な指示)。スクリプトが 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 をオレンジの線で出力している。
==== 2 つ目のスクリプト ====
上の最初のバージョンでは MACD を "手動で" 計算したが、Pine スクリプトはインジケーターとストラテジーを書くために設計されていることから、多くの一般的なインジケーターが組み込み関数として用意されている。\\
MACD もその一つで、[[https://jp.tradingview.com/pine-script-reference/v5/#fun_ta.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)
注目する点は以下の通り。
* MA の長さを変更できるように組み込み関数 [[https://jp.tradingview.com/pine-script-reference/v5/#fun_input|input()]] を使用して入力パラメータ化した。
* MACD の計算に組み込み関数 [[https://jp.tradingview.com/pine-script-reference/v5/#fun_ta.macd|ta.macd()]] を使用することでコードがすっきりした。
先ほどと同じようにサンプルスクリプトを新しいインジケーターにコピーしてみよう。
* Pine エディタの右上にある "開く" ドロップダウンメニューを表示し、"新規インジケーター" を選択する。
* 次に上のサンプルスクリプトをコピーする。先ほどと同じように行番号を含めないように注意する。
* エディタ内のコードをすべて選択し、サンプルスクリプトに置き換える。
* "保存" をクリックし、前回とは異なる名前でスクリプトの名前を決める。
* エディタのメニューバーにある "チャートに追加" をクリックする。"MACD #2" インジケーターが "MACD #1" の下に別のペインで表示される。
2 つ目の Pine スクリプトがチャート上で実行される。\\
チャート上でインジケーターの名前をダブルクリックすると、スクリプトの設定画面が表示され、ここで MACD の MA 期間を変更できる。
{{gallery>:tradingview:pine:pasted:20230805-140621.png?lightbox}}
=== 解説 ===
2 つ目のサンプルスクリプトのコードを一行ずつ見ていこう。
2 行目:''indicator("MACD #2")''
#1 から #2 に変更したので、2 つ目のインジケーターはチャート上に "MACD #2" と表示される。
3 行目:''fastInput = input(12, "Fast length")''
短期 MA 期間の変数に定数を代入する代わりに、スクリプトの設定画面で値を変更できるよう [[https://jp.tradingview.com/pine-script-reference/v5/#fun_input|input()]] 関数を使用している。\\
デフォルト値は 12、項目名ラベルは "Fast length " としている。"パラメーター" タブで値を変更した場合、変数 fastInput に新しい値が格納され、スクリプトは再実行される。
変数名の末尾に "Input" を付加することで、スクリプトの後半部でその値がユーザー入力値であることをわかりやすくしている。\\
Pine Script® [[https://www.tradingview.com/pine-script-docs/en/v5/writing/Style_guide.html#pagestyleguide|Style Guide]] で推奨される書き方。
4 行目:''slowInput = input(26, "Slow length")''
長期 MA 期間についても同じことをする。変数名、デフォルト値、項目名ラベルの値が異なることに注意する。
5 行目:''[macdLine, signalLine, histLine] = ta.macd(close, fastInput, slowInput, 9)''
ここで [[https://jp.tradingview.com/pine-script-reference/v5/#fun_ta.macd|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 行短くシンプルになり、改良することができた。
===== 参考 =====
* Pine Script® v5 User Manual [[https://www.tradingview.com/pine-script-docs/en/v5/primer/First_indicator.html|First indicator]]