Pineスクリプト(Pine Script)で移動平均線の装飾とアラート機能を組み込む方法
前回は3本の移動平均線を表示するインジケーター「3MA」の作成を行ってきました。
前回記事:Pineスクリプト(Pine Script)を作成してTradingViewのチャートに表示する方法
今回はこのインジケーターが実用的なものになるように機能追加をしていきます(以降、移動平均線は「MA」と表記)。
スクリプトの行数は80行以下です。
とてもシンプルですが、色々な機能が実装されています。
完成図は以下のようになります。
それでは具体的な内容を見ていきます。
この3本のMAの動きを観察することで以下の特徴が分かりました。
(ここでは相場の動きの一例ですので、必ずしも下記のように動くわけではありませんのでご留意ください。)
- a.3本のMAが収束した後から、相場が大きく動き出す特徴がありそう。
- b.3本のMAが収束した後の相場の方向性は、中期MA、長期MAの並びの方向に動いて行っているように見える。
- c.以上のことを組み合わせると、相場の動き出しを捉える上昇サイン、下降サインが作れる可能性がある。
このa.b.c.の特徴を機能化してより便利なものにしていきます。
機能追加の内容は以下の通りです。
- 1.MAが集まったときに視覚的に判別できる機能
→背景の塗り分け機能の組み込み。 - 2.MAが収束したとき、拡大したときにメッセージで通知してくれる機能
→アラート機能の組み込み。 - 3.中期MAと長期MAの方向を視覚的に判別できる機能
→MAの位置関係から塗り分けてくれる機能の組み込み。
(MAリボン) - 4.上昇、下降サインの表示機能の組み込み。
※3.4.の機能をインジケーターに組み込んでいますが、
本章では簡単な説明となります。
別の章で詳しく解説いたします。
1.背景の塗り分け機能
MAが収束してきたときにチャートの背景を塗り分けます。
- 使用する関数:bgcolor
- 機能:指定した色でバーの背景を塗りつぶします。
- MAが収束したことを判定する判定式から作成していきます。
1-1.MAの収束判定式作成前の変数の準備
3本のMAの最大値、最小値、そして収束判定値を定義しています。
1-2.背景色の準備
1-3.MAが収束したことを判定する判定式の準備
★1 [0]の便利な役目 (今後必ず使用する機能)
ここまでで、MAが収束したときに背景を塗り分けることができるようになりました。
2.MAが収束時、拡大時のアラート機能の追加
MAの収束状態、拡大状態が成立している時にロウソク足が変わる度にアラートが出てしまわないよう「拡大状態から収束状態になったときのみ」「収束状態から拡大状態になったときのみ」の判定式の作成も行います。
- 使用する関数:alertcondition
- 機能:アラート作成ダイアログで利用できるアラートを作成します。
- 注意:アラートを使うには、ダイアログで設定する必要があります。
ダイアログを使うことでアラートに多くの機能の選択肢を使うことができるようになります。
ここで作成したアラートを使用するには、次の設定が必要です。
以上の設定が完了すると下図のようにアラートが届くようになります。
3.中期MAと長期MAの方向を視覚的に判別できる機能
MAの上下関係から移動平均線の中を塗り分けます。
- 使用する関数:fill
- 機能:2つのプロットの間の背景を指定された色で塗りつぶします。
これで下図のように、長期MAよりも中期MAが上にあるときに青く塗りつぶせるようにできました。
4.上昇サイン、下降サイン表示機能の組み込み
これまで作成してきた判定式を組み合わせて上昇サイン、下降サインを表示させてみます。
ここでは3本のMAが収束から拡大する条件と、長期MAと中期MAの位置関係の条件を下図のように組み合わせてみます。
アラートは、「2.MAが収束時、拡大時のアラート機能の追加」と同様です。
上昇サイン、下降サインを表示します。
- 使用する関数:plotshape
- 機能:チャート上に視覚的な図形(サイン)を描画します。
これで以下の様にチャート上に上昇サイン、下降サインも表示することができるようになりました。
またこのインジケーターの設定画面は下図の通りで、各種設定の変更ができます。
また各設定項目はグルーピング(スクリプト説明部分に記載)することで機能毎に見やすくまとめることができます。
80行に満たない短いスクリプトですが、Pineスクリプトに用意されている機能を活用することで、簡潔に機能を実装することができます。
また次回以降で、いくつかのインジケーターの作成方法などをご紹介していきます。
5.参考スクリプト
- インジケーター名:3MA_Signal
- 機能:
- 3本のMAを表示できる。
- MAの種類はSMAとEMAが選択できる。
- MAの期間は自由に設定できる。
- 3本のMAが収束した状態の背景を色分けできる。
- 上記が収束したとき、拡大したときにアラートが設定できる。
- 2本のMAの方向性をリボンで表示できる。
- 上昇、下降のサインを表示しアラートが設定できる。
//@version=5
indicator('3EMA_Signal', overlay=true, format=format.price, precision=2)
//設定画面表示グループの設定========================
var GrpRbn = "リボン"
var GrpCon = "収束"
//MAを描画する========================
price = input(close)
MAMethod = input.string(title='MAの種類', defval='EMA', options=['EMA', 'SMA'])
ma_plt1 = input.int(title='短期MA', defval=20, minval=1, maxval=1000)
ma_plt2 = input.int(title='中期MA', defval=75, minval=1, maxval=1000)
ma_plt3 = input.int(title='長期MA', defval=215, minval=1, maxval=1000)
ma1 = MAMethod == 'EMA' ? ta.ema(close, ma_plt1) : ta.sma(close, ma_plt1)
ma2 = MAMethod == 'EMA' ? ta.ema(close, ma_plt2) : ta.sma(close, ma_plt2)
ma3 = MAMethod == 'EMA' ? ta.ema(close, ma_plt3) : ta.sma(close, ma_plt3)
plt1 = plot(ma1, color=color.new(#32cd32, 0),title='MA 短期', linewidth=2)
plt2 = plot(ma2, color=color.new(#0000ff, 0),title='MA 中期', linewidth=2)
plt3 = plot(ma3, color=color.new(#ff0000, 0),title='MA 長期', linewidth=2)
//MAの間を塗り潰す========================
color_up = input.color(color.blue, title="上昇リボン色", group=GrpRbn)
color_dn = input.color(color.red, title="下降リボン色", group=GrpRbn)
color_transp = input.int( 85, minval=0, title="リボン透明度", group=GrpRbn)
flag_UD = ma2 > ma3
fill_colorUp = color.new( color_up, transp=color_transp )
fill_colorDn = color.new( color_dn, transp=color_transp )
fill(plt2,plt3, flag_UD ? fill_colorUp : fill_colorDn )
//MAの収束状態を判定========================
ma_max = math.max(ma1, ma2, ma3)
ma_min = math.min(ma1, ma2, ma3)
ma_Wide = input.float(title='MAの収束判定幅(通貨単位)', defval=0.3, minval=0.1, maxval=10000,group=GrpCon)
color_Con = input.color(color.new(#dda0dd, 80), title="MA 収束背景色", group=GrpCon)
int Concent = 0
if (ma_max - ma_min) < ma_Wide
Concent := 1
else
Concent := 0
bgcolor(Concent[0] == 1 ? color_Con : na ,title='MA 収束背景色')
//収束拡大アラート========================
alertcondition(Concent[1] == 0 and Concent[0] == 1, title='MAが収束', message='MAが収束,' + '{{ticker}}')
alertcondition(Concent[1] == 1 and Concent[0] == 0, title='MAが拡大', message='MAが拡大,' + '{{ticker}}')
//上昇下降状態を判定========================
Signal_Up = false
if Concent[2] == 1 and Concent[1] == 0 and flag_UD[0] == true
Signal_Up := true
Signal_Dn = false
if Concent[2] == 1 and Concent[1] == 0 and flag_UD[0] == false
Signal_Dn := true
//上昇下降サインアラート========================
alertcondition(Signal_Up, title='上昇サイン', message='上昇サイン,' + '{{ticker}}')
alertcondition(Signal_Dn, title='下降サイン', message='下降サイン,' + '{{ticker}}')
//上昇下降サイン表示========================
plotshape(Signal_Up ? low : na, title='上昇サイン', location=location.belowbar, style=shape.triangleup, size=size.small, color=color.new(color.blue, 0))
plotshape(Signal_Dn ? high : na, title='下降サイン', location=location.abovebar, style=shape.triangledown, size=size.small, color=color.new(color.red, 0))
6.Pineエディタの補助機能
Pineエディタには、ユーザビリティ向上のための様々な補助機能があります。
ここでは、補助機能を2つ紹介します。
6-1.ソース全体を素早く移動できる機能
6-2.スクリプトが見やすくなる機能
Pine Script(Pineスクリプト)をさらに学びたい方へオススメのコンテンツ
OANDA証券では、TradingViewのプログラミング言語である「Pine Script(Pineスクリプト)」に関する記事を豊富に提供しています。
プログラミング初心者の方でも、インジケーターやストラテジーの作成ができるよう、ソースコードをコピペ+少しの修正で組み上がる構成としています。
またOANDA証券とTradingViewのアカウントを連携させることで、「Tradingview」から直接トレードすることが可能です。
ぜひOANDA証券での口座開設をご検討下さい。
TradingView(トレーディングビュー)で使用する情報は、全てTradingView(トレーディングビュー)社に帰属するものであり、当社は、その正確性、完全性を保証するものではありません。同サイトで使用する情報に基づいて行った取引によって発生したいかなる損害・損失について、当社は一切責任を負いかねますのでご了承下さい。最終的な投資判断についてはお客様ご自身でお願い致します。
本ホームページに掲載されている事項は、投資判断の参考となる情報の提供を目的としたものであり、投資の勧誘を目的としたものではありません。投資方針、投資タイミング等は、ご自身の責任において判断してください。本サービスの情報に基づいて行った取引のいかなる損失についても、当社は一切の責を負いかねますのでご了承ください。また、当社は、当該情報の正確性および完全性を保証または約束するものでなく、今後、予告なしに内容を変更または廃止する場合があります。なお、当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。