Pine Script(Pineスクリプト)でMACD(マックディー)を作成する方法
今回はMACDのインジケーターを作成する方法を紹介していきます。
シンプルなものと、少し手を加えてマルチタイムフレーム表示に対応した2つを解説していきます。
下図の下側がシンプルバージョン、上側がマルチタイムフレーム表示対応バージョンです。
1.MACD(シンプルバージョン)の作成
それではシンプルバージョンから作成していきます。
MACDを描くにはビルドイン関数の「ta.macd」が予め用意されていますのでこちらを活用して行きます。
スクリプト全体の内容は以下の通りです。
最低限、設定値を変更出来るようにしたものです。
1-1.スクリプトの各部分の説明です。
初めにインジケーターの宣言ですが、MACDはサブチャートに表示をしたいため、「indicator」のオプションにて、overlay = false を加えることで、サブチャートへの表示を指示しています。
1-2.入力画面で変更したい内容を変数で宣言します。
MACDのFastMA、SlowMA、シグナルの期間を宣言しています。
1-3.MACDのビルドイン関数「ta.macd」です。
ここで、新しい形式が出てきます。
MACDのビルドイン関数「ta.macd」は計算結果(戻り値)として、3つを返して来ます。
①MACDライン、②シグナルライン、③ヒストグラムラインです。
この3つを受け取るためには、下図の左辺のように[①, ② , ③ ]で受け取る3つの変数を記載します。
1-4.Plot関数でラインとヒストグラムの描画します。
以上で、MACDの完成です。
2.MACD(マルチタイムフレーム表示対応バージョン)の作成
次はマルチタイムフレーム表示対応バージョンです。
スクリプトで追加される内容は以下の通りです。
- 2-1.MACDをマルチタイムフレームで表示します。
- 2-2.ヒストグラムの傾きにより、ヒストグラムの色を塗り分けます。
- ※塗り分けの判定式が追加になりますが、if else文を使わずに判定式を表現します。
2-1.MACDをマルチタイムフレームで表示します。
初めはMACDの計算を行います。
次にマルチタイムフレームの処理をします。
ここでは、新しい関数「request.security」を使用します。
これは、別のシンボル/時間足をリクエスト出来る関数です。
これで、マルチタイムフレームの計算が完了しました。
2-2.ヒストグラムの傾きにより、ヒストグラムの色を塗り分けます。
塗り分けの判定式をif else文を使わずに判定式を表現してみます。
判定したい内容は以下の通りです。
ヒストグラムが
- 0より上にいる時にグリーン系の色で
- 0より下のときにレッド系の色で塗り分けし、
なおかつ、
- 上昇中は明るい色、
- 下降中は暗い色で塗り分けを行います。
このような形で条件を組み合わせて1行で表現することが出来ます。
最後はいつもの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証券での口座開設をご検討下さい。
本ホームページに掲載されている事項は、投資判断の参考となる情報の提供を目的としたものであり、投資の勧誘を目的としたものではありません。投資方針、投資タイミング等は、ご自身の責任において判断してください。本サービスの情報に基づいて行った取引のいかなる損失についても、当社は一切の責を負いかねますのでご了承ください。また、当社は、当該情報の正確性および完全性を保証または約束するものでなく、今後、予告なしに内容を変更または廃止する場合があります。なお、当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。