Pineスクリプト(Pine Script)でボリンジャーバンドを作成する方法
今回は、ボリンジャーバンドのインジケーターを作成する方法を紹介していきます。
このインジケーターの特徴は、上下2組のボリンジャーバンドの表示ができることと、ローソク足と移動平均線の位置関係でミドルバンド(中心の移動平均線)の色が変わることです。
それでは各機能を組み込んでいます。
ボリンジャーバンドを描く関数は「ta.bb」があらかじめ用意されていますが、今回は単純移動平均線の関数「ta.sma」と偏差計算の関数「ta.stdev」を使っていきます。
スクリプトの内容は以下の通りです。
- 1.「パラメーター」タブの項目を追加
- 2.ミドルバンドと偏差の計算
- 3.ボリンジャーバンドの上下の各バンドの計算
- 4.ローソク足とミドルバンドの位置関係で色分け
- 5.plot関数とfill関数でチャートに表示
今回のスクリプトは30行ほどです。
スクリプトの各部分の説明です。
1.「パラメーター」タブの項目を追加
はじめに、indicator関数で作成するスクリプトがインジケーターである宣言を行い、名前や表示位置を引数で指定します。
続いて、input関数を使って、作成するボリンジャーバンドで調整できるパラメーター項目を用意します。
今回は、以下の3つです。
・Price:計算で使用する価格
・期間:計算の対象期間
・偏差:外側のバンドの偏差
「price」「length」「deviation」という変数を定義して、上記の設定値をそれぞれ代入します。
2.ミドルバンドと偏差の計算
ミドルバンドと偏差は、Pineスクリプトであらかじめ用意されているビルトイン関数を使います。
単純移動平均線を計算する「ta.sma」と、標準偏差を計算する「ta.stdev」です。
いずれも計算に使用する価格/計算する期間を指定することで、値を返してくれます。
ここで指定するのは、「パラメーター」タブに追加したPrice/期間の設定値です。
計算した単純移動平均線の値は「base」、標準偏差の値は「dev1」という変数に、それぞれ代入します。
また、標準偏差と「パラメーター」タブに追加した偏差の設定値をかけた値を、「dev2」という変数に代入します。
3.ボリンジャーバンドの上下の各バンドの計算
ミドルバンドの値(base)に、標準偏差の値(dev1/dev2)を足す/引くことで上下の各バンドの値を計算します。
計算結果は、各バンド用の変数(upper1/lower1/upper2/lower2)に代入します。
変数の型を宣言せずに使用していますが、自動的に適切なものが割り当てられます。
小規模なインジケーターなどは、変数の型などを省略しても間違いにくいため、簡潔に書いても良いでしょう。
ただ、数百行など長いスクリプトを作成する場合は、積極的に変数の型などは宣言をしておくと、型違いによる間違いなどに気付きやすく、未然に不具合を防止できます。
4.ローソク足とミドルバンドの位置関係で色分け
ローソク足(パラメーターの「Price」で設定した価格)とミドルバンドの位置関係で、異なる色が「colorBase」という変数に代入されるようにします。
具体的には、ローソク足が移動平均線より上ならアクア色、移動平均線の下ならばオレンジ色です。
if文でも記述できますが、今回は三項条件演算子を使用して記述したので、ぜひ参考にしてください。
※この記述方法の詳細については、「Pineスクリプト(Pine Script)の三項条件演算子「?:」の使い方」をご覧ください。
5.plot関数とfill関数でチャートに表示
最後に、計算した変数を使って、ボリンジャーバンドをチャート上に表示する部分です。
plot関数を使って、以下の5つの変数を表示します。
・base:ミドルバンド
・upper1:内側のアッパーバンド
・upper2:外側のアッパーバンド
・lower1:内側のロワーバンド
・lower2:外側のロワーバンド
ポイントは、ミドルバンドの色を前章で定義した「colorBase」で指定しているところです。
これによりローソク足と移動平均線の位置関係により、ミドルバンドの色が変わるようになります。
fill関数を使って、2つの各バンドの間を以下のように塗りつぶします。
内側と外側のバンドの間は2重で塗られるので、内側より外側が濃くなる仕組みです。
・ミドルバンドと外側のアッパーバンドの間:透明度80%のアクア色
・内側と外側のアッパーバンドの間:透明度80%のアクア色
・ミドルバンドと外側のロワーバンドの間:透明度80%のオレンジ色
・内側と外側のロワーバンドの間:透明度80%のオレンジ色
チャートに追加すると、以下のように表示されます。
以下は、設定画面です。
30行のとてもシンプルなインジケーターです。
ボリンジャーバンドの本数を増やしたい場合は、「3.ボリンジャーバンドの上下の各バンドの計算」の部分を増やすことで簡単に追加できますので、チャレンジしてみてください。
また次回以降、他のインジケーターの作成方法などをご紹介していきます。
6.参考スクリプト
インジケーター名:Bollinger Bands
機能:
ボリンジャーバンドを2組表示できる。
中心のMAとローソク足の終値の位置関係でMAの色が変化する。
ボリンジャーバンドの内側を塗りつぶすことができる。
//@version=5
indicator(shorttitle="BB", title="Bollinger Bands", overlay=true)
price = input(close)
length = input.int(25, minval=1)
deviation = input.float(2.0,title="偏差", minval=0.001, maxval=50)
//移動平均線と偏差の計算
base = ta.sma(price, length)
dev1 = ta.stdev(price, length)
dev2 = deviation*dev1
//各ボリンジャーバンドの計算
upper1 = base + dev1
lower1 = base - dev1
upper2 = base + dev2
lower2 = base - dev2
//中心のMAとロウソク足終値の位置関係でMAの色が変化機能
colorBase = price >= base ? color.aqua : color.orange
plt__Base = plot(base, linewidth=2, color=colorBase)
pltUpper1 = plot(upper1, color=color.new(color.aqua, 80), style=plot.style_circles)
pltUpper2 = plot(upper2, color=color.new(color.aqua, 80))
pltLower1 = plot(lower1, color=color.new(color.orange, 0), style=plot.style_circles)
pltLower2 = plot(lower2, color=color.new(color.orange, 0))
fill(plt__Base,pltUpper2, color=color.new(color.aqua, 80))
fill(pltUpper1,pltUpper2, color=color.new(color.aqua, 80))
fill(plt__Base,pltLower2, color=color.new(color.orange, 80))
fill(pltLower1,pltLower2, color=color.new(color.orange, 80))
Pine Script(Pineスクリプト)をさらに学びたい方へオススメのコンテンツ
OANDA証券では、TradingViewのプログラミング言語である「Pine Script(Pineスクリプト)」に関する記事を豊富に提供しています。
プログラミング初心者の方でも、インジケーターやストラテジーの作成ができるよう、ソースコードをコピペ+少しの修正で組み上がる構成としています。
またOANDA証券とTradingViewのアカウントを連携させることで、「Tradingview」から直接トレードすることが可能です。
ぜひOANDA証券での口座開設をご検討下さい。
本ホームページに掲載されている事項は、投資判断の参考となる情報の提供を目的としたものであり、投資の勧誘を目的としたものではありません。投資方針、投資タイミング等は、ご自身の責任において判断してください。本サービスの情報に基づいて行った取引のいかなる損失についても、当社は一切の責を負いかねますのでご了承ください。また、当社は、当該情報の正確性および完全性を保証または約束するものでなく、今後、予告なしに内容を変更または廃止する場合があります。なお、当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。