ボリンジャーバンドについてです。計算式、チャート、エクセルVBAコード
オーソドックスなテクニカル指標の一つです。
移動平均線を基とし、標準偏差にて価格の帯を形成します。
偏差(1次や2次)によって、移動平均線から一定幅外側にオフセットされ、価格の一定割合がその帯の中に留まることを利用し、線へのタッチで反発、線を上抜き(下抜き)することでそちら方向へのトレンドの形成などを判断します。
計算式、計算方法、チャート、エクセルVBAコードを掲載。
ボリンジャーバンドの計算式
計算方法は移動平均線にσ×偏差を加減することで計算されます。
σは標準偏差で、散らばりの度合いを示す指標です。
計算では、標準偏差には終値のデータを使用するのが一般的です。
標準偏差については専門的なことになりますのし標準偏差自体の計算方法はあまり重要なことでは無いので詳細は省略します。ここでは、「散らばり度」を示すものだと思っていただければと思います。
さて、ボリンジャーの計算方法ですが、例えば、20本移動平均線のボリンジャーバンドは、
MA20+σ×偏差
MA20-σ×偏差
の2つのラインにて、ボリンジャーバンド(±偏差)が求められます。
エクセルでは、標準偏差が「=STDEVP(数値1,数値2,・・・)」で求められますので、MA20を基とした場合、σは終値の現在の足も含めた過去20本の標準偏差となり、その値を偏差倍した値を20本移動平均線から加減します。
ボリンジャーバンドの1次偏差ですと、
MA20+STDEVP(過去20本の終値)
MA20-STDEVP(過去20本の終値)
となり、2次偏差は、
MA20+STDEVP(過去20本の終値)×2
MA20ーSTDEVP(過去20本の終値)×2
となります。(下図、ボリンジャーバンド±σ1,2,3)
ボリンジャーバンドのチャート
下図、ボリンジャーバンド±σ1,3,5)
下記チャートは、ボリンジャーバンドの±σ1の差をとり(水色線)、その値を5本平均した物(赤線)です。
ご覧の通り、レートでのトレンドの発生というよりは、上昇・下降の発生の場合に近いですが、変動があると差は上昇し、変動が無いと差は小さくなります。差が一定量まで小さくなり、その後上昇に転じる時に、レートが上昇もしくは下降に向かうという判断も可能です。
上記チャートの様に平均線とのクロスにて、売買判断を行うこともできますが、このラインはレートに比例するものではなく、あくまで上昇・下降の発生に伴って上昇する物ですので、別にレートの方向性を探る指標などと併用する必要があります。(ボリンジャーバンドの差のラインはゴールデンクロスの時のみ、仕掛けのサインとなります。デッドクロスの場合はレートの変動が収束に向かう時などに発生しますので、手仕舞いの判断は出来ても仕掛けには向きません。)
また、ボリンジャーバンドは移動平均線と終値のみを使用して計算されますので、採用する数値を変更し、終値と移動平均線ではなく、例えばMACDとMACDシグナルのボリンジャーバンドを計算することも出来ます。(下図、ボリンジャーバンドMACD±σ2)
最後に、ボリンジャーバンドのVBAコードです。
ボリンジャーバンドのVBAコード
‘※ エクセルの1列目(A列)に行番号、2列目(B列)に日時、
‘※ 3列目(C列)~6列目(F列)に始値・高値・安値・終値
‘********************************
‘ ma :ボリンジャーバンド計算に使用する移動平均線採用本数
‘ num:現在の行
‘ cell_ma_(p/m)(i):ボリンジャーバンド計算値書込み列(iは偏差,pがプラス,mはマイナス)
‘ cell_ma:移動平均線の記入列
‘ bb(1~3):偏差
‘********************************
ma = 20
bb1 = 1
bb2 = 2
bb3 = 3
cell_ma = 7
cell_ma_p1 = 8
cell_ma_m1 = 9
cell_ma_p2 = 10
cell_ma_m2 = 11
cell_ma_p3 = 12
cell_ma_m3 = 13
If num – (ma-20) >= 2 Then
‘*****移動平均線の計算=ma_bb
ma_bb = Application.WorksheetFunction.Average(Range(Cells(num – (ma – 1), 6), _
Cells(num, 6)))
‘******
Cells(num, cell_ma) = ma_bb
Cells(num, cell_ma_p1) = ma_bb + bb1 * _
Application.WorksheetFunction.StDevP(Range(Cells(num – (ma – 1), 6), _
Cells(num, 6)))
Cells(num, cell_ma_m1) = ma_bb – bb1 * _
Application.WorksheetFunction.StDevP(Range(Cells(num – (ma – 1), 6), _
Cells(num, 6)))
Cells(num, cell_ma_p2) = ma_bb + bb2 * _
Application.WorksheetFunction.StDevP(Range(Cells(num – (ma – 1), 6), _
Cells(num, 6)))
Cells(num, cell_ma_m2) = ma_bb – bb2 * _
Application.WorksheetFunction.StDevP(Range(Cells(num – (ma – 1), 6), _
Cells(num, 6)))
Cells(num, cell_ma_p3) = ma_bb + bb3 * _
Application.WorksheetFunction.StDevP(Range(Cells(num – (ma – 1), 6), _
Cells(num, 6)))
Cells(num, cell_ma_m3) = ma_bb – bb3 * _
Application.WorksheetFunction.StDevP(Range(Cells(num – (ma – 1), 6), _
Cells(num, 6)))
End If
(外部リンク)テクニカル指標(Wikipedia)