Pineスクリプト(Pine Script)でMACDを作成する方法
今回はMACDのインジケーターを作成する方法を紹介していきます。
シンプルなものと、少し手を加えてマルチタイムフレーム表示に対応した2つを解説していきます。
下図の上側がシンプルバージョン、下側がマルチタイムフレーム表示対応バージョンです。
1.MACD(シンプルバージョン)の作成
それではシンプルバージョンから作成していきます。
MACDを描くにはビルドイン関数の「ta.macd」があらかじめ用意されていますのでこちらを活用していきます。
スクリプト全体の内容は以下の通りです。
最低限、設定値を変更できるようにしたものです。
1-1.Indicator関数の記述
初めにインジケーターの宣言ですが、MACDはサブチャートに表示をしたいため、「indicator」の引数にoverlay = false を加えることで、サブチャートへの表示を指示しています。
1-2.設定の「パラメーター」タブに追加する項目
MACDの基本的なパラメーターは、「Fast MA期間」「Slow MA期間」「Signal 期間」の3つです。
「input.int()」を使ってそれぞれを「パラメーター」タブの項目に追加し、設定値が「fastMA」「slowMA」「SinLength」という変数に代入されるように設定します。
1-3.MACDのビルドイン関数「ta.macd」
ここで、新しい形式が出てきます。
MACDのビルドイン関数「ta.macd」は計算結果(戻り値)として、以下の3つの値を返してきます。
①MACD
②シグナル
③ヒストグラム
この3つを受け取るためには、下図の左辺のように[①, ② , ③ ]で受け取る3つの変数を記載します。
今回は①は「macdLine」、②は「signalLine」、③は「histLine」という変数で受け取るので、[macdLine, signalLine, histLine]という書き方です。
1-4.plot関数でラインとヒストグラムの描画
最後に、「macdLine」「signalLine」「histLine」の3つの変数に格納されている値を、plot関数を使ってチャート上に表示します。
以上で、MACDの完成です。
2.MACD(マルチタイムフレーム表示対応バージョン)の作成
次はマルチタイムフレーム表示対応バージョンです。
スクリプトで追加される内容は以下の通りです。
- 2-1.MACDをマルチタイムフレームで表示します。
- 2-2.ヒストグラムの傾きにより、ヒストグラムの色を塗り分けます。
- ※塗り分けの判定式が追加になりますが、if else文を使わずに判定式を表現します。
スクリプト全体の内容は以下の通りです。
機能を追加した分、先ほどよりも長くなっています。
2-1.MACDをマルチタイムフレームで表示
indicator関数と設定の「パラメーター」タブの基本項目3つについては、先ほどと同じなので省略します。
異なるのはMACDの計算からで、以下の値が代入される変数を定義します。
・_CurMACD:MACDの現在値
・_Signal:シグナルの現在値
・_CurHistogram:ヒストグラムの現在値
・_PreHistogram:ヒストグラムの1期間前の値
次に、マルチタイムフレームの処理です。
設定の「パラメーター」タブに表示したい時間足を入力できる項目「マルチタイムフレーム」を追加するために、input関数(「input.timeframe()」)を使います。
また、「マルチタイムフレーム」に設定した時間足を代入する、「IptPeriod」という変数を定義します。
さらに、指定したシンボル/時間足の値をリクエストできる「request.security」という関数を使って、「マルチタイムフレーム」に設定した時間足(「IptPeriod」に代入された時間足)の値を取得します。
具体的には、例えば「CurMACD」という変数であれば、「表示中のチャートのシンボル/IptPeriodに格納されている時間足」の「MACDの現在値(_CurMACD)」の値が代入される形です。
これで、マルチタイムフレームの計算が完了しました。
2-2.ヒストグラムの傾きによりヒストグラムを色分け
塗り分けの判定式を、if else文を使わずに三項条件演算子で表現してみます。
判定したい内容は以下の通りです。
ヒストグラムが
- 0より上にいる時にグリーン系の色で
- 0より下のときにレッド系の色で塗り分けし、
なおかつ、
- 上昇中は明るい色、
- 下降中は暗い色で塗り分けを行います。
具体的には、例えば「ヒストグラムが0より大きい(CurHistogram > 0である)/ヒストグラムの現在値が1期間前の値以下(CurHistgram > PreHistogramuではない)」の場合、「plotColor」という変数に暗い緑色(his_colorUp2に指定した色)が代入されます。
※この記述方法の詳細については、「Pineスクリプト(Pine Script)の三項条件演算子「?:」の使い方」をご覧ください。
2-3.plot関数で各変数を描画
最後はいつものplot関数で、各変数に格納された値をチャート上に描画して完成です。
完成したMACDインジケーターです。
設定画面からは、下図のようにマルチタイムフレームの指定ができるようになります。
今回まで、まずは簡単なインジケーターを直ぐに作れることを目的に説明してきました。
次回以降で、これまで使用してきたビルドイン関数などの詳細などを紹介していく予定です。
3.参考スクリプト シンプルバージョン
インジケーター名:MACD_Base
機能:MACDを表示する。
//@version=5
indicator("MACD Base",overlay = false)
SigLength = input.int(title='Signal 期間', defval = 9, minval = 1)
fastMA = input.int(title="Fast MA 期間", defval = 12, minval = 1)
slowMA = input.int(title="Slow MA 期間", defval = 26, minval = 1)
[macdLine, signalLine, histLine] = ta.macd(close, fastMA, slowMA, SigLength)
plot(macdLine, color=color.blue)
plot(signalLine, color=color.red)
plot(histLine, color=color.orange, style=plot.style_histogram)
4.参考スクリプト マルチタイムフレームバージョン
インジケーター名:MACD_mtf
機能:
MACDをマルチタイムフレームで表示ができる。
ヒストグラムの推移を塗り分けできる。
//@version=5
indicator("MACD mtf",overlay = false)
//MACD期間の設定
SigLength = input.int(title='Signal 期間', defval = 9, minval = 1)
fastMA = input.int(title="Fast MA 期間", defval = 12, minval = 1)
slowMA = input.int(title="Slow MA 期間", defval = 26, minval = 1)
//MACDの計算
source = close
[_CurMACD,_Signal,_CurHistogram] = ta.macd(source[0], fastMA, slowMA, SigLength)
[_,_,_PreHistogram] = ta.macd(source[1], fastMA, slowMA, SigLength)
//マルチタイムフレームの設定
IptPeriod = input.timeframe("D",title="マルチタイムフレーム")
CurMACD = request.security(syminfo.tickerid, IptPeriod, _CurMACD)
Signal = request.security(syminfo.tickerid, IptPeriod, _Signal)
CurHistogram = request.security(syminfo.tickerid, IptPeriod, _CurHistogram)
PreHistogram = request.security(syminfo.tickerid, IptPeriod, _PreHistogram)
//ヒストグラム色指定 プラス側2色
his_colorUp1=color.new(color.lime, transp = 50)
his_colorUp2=color.new(color.green, transp = 50)
//ヒストグラム色指定 マイナス側2色
his_colorDn1=color.new(color.maroon,transp = 50)
his_colorDn2=color.new(color.red, transp = 50)
//条件によるヒストグラムの塗り分け
plotColor = CurHistogram > 0 ? CurHistogram > PreHistogram ? his_colorUp1 :
his_colorUp2 : CurHistogram < PreHistogram ? his_colorDn1: his_colorDn2
//各データのプロット
plot(CurMACD, title = "MACD", color = color.blue,linewidth = 2)
plot(Signal, title = "シグナル", color = color.red, linewidth = 2)
plot(CurHistogram, title = "ヒストグラム", style = plot.style_histogram, color =
plotColor, linewidth = 3)
plot(0, title = "ゼロライン", color = color.gray,linewidth = 1)
Pine Script(Pineスクリプト)をさらに学びたい方へオススメのコンテンツ
OANDA証券では、TradingViewのプログラミング言語である「Pine Script(Pineスクリプト)」に関する記事を豊富に提供しています。
プログラミング初心者の方でも、インジケーターやストラテジーの作成ができるよう、ソースコードをコピペ+少しの修正で組み上がる構成としています。
またOANDA証券とTradingViewのアカウントを連携させることで、「Tradingview」から直接トレードすることが可能です。
ぜひOANDA証券での口座開設をご検討下さい。
本ホームページに掲載されている事項は、投資判断の参考となる情報の提供を目的としたものであり、投資の勧誘を目的としたものではありません。投資方針、投資タイミング等は、ご自身の責任において判断してください。本サービスの情報に基づいて行った取引のいかなる損失についても、当社は一切の責を負いかねますのでご了承ください。また、当社は、当該情報の正確性および完全性を保証または約束するものでなく、今後、予告なしに内容を変更または廃止する場合があります。なお、当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。