{{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]]