「Igor:waveの読み込み3」で扱ったデータを元に,株価チャートの一つであるシグマバンド(ボリンジャーバンド)を作成する。

シグマバンドとは,株価の移動平均に対して,移動平均算出区間内での標準偏差σの線を引いて,株価の異常値を見つけるチャートである。

株価の変動について正規分布を仮定すると,平均値±σの範囲には68%±2σの範囲には95.5%±3σの範囲には99.7%の確率で株価は収まることになる。

 

移動平均を表すwave,+2σおよび-2σを表すwaveを作成する。
「Igor:waveの読み込み3」で読み込んだデータ数は250であったので,「Make」コマンドで,

Make /O /N=250 ‘wave_mean’ ‘wave_mean_2stdp’ ‘wave_mean_2stdm’;
AppendToTable wave_mean wave_mean_2stdm wave_mean_2stdp

とする。

移動平均算出のために,以下のマクロ「calc_mean(input_w, output_w)」を作成した。
input_wの移動平均値がoutput_wに代入される。
input_wとして株価の終値であるclosing_priceを代入し,wave_meanにその移動平均値が代入されるように使用する。

平均を算出する関数「 mean(waveName, [x1, x2]) 」を利用した。
waveNameのx1~x2の区間の平均値を算出してくれる関数である。

waveのデータ数が250であり,移動平均算出区間は20データ(定数spanとした)であるため,for文の区間は230とすべきである。例えばi=240の場合,mean(input_w, 240, 260)となり,waveデータが存在しないところを参照してしまう。
ただし,Igorはこのような場合,自動的にmean(input_w, 240, 249)として出力してくれるようである。

標準偏差を算出するために,以下のマクロ「calc_std(input_w, output_w1, output_w2, mean_w)」を作成した。
input_wの標準偏差σの2倍を移動平均値にプラスしたoutput_w1,マイナスしたoutput_w2を算出する。

標準偏差σを算出にあたり,分散σ2を算出する「 Variance(waveName, [x1,x2]) 」を利用した。
waveNameのx1~x2の区間の分散を算出してくれる関数である。

分散の平方根をとることで(sqrt関数),標準偏差を算出した。

移動平均と標準偏差

移動平均と標準偏差

 

以下のように,マクロを実効

calc_mean(closing_price,wave_mean)
calc_std(closing_price,wave_mean_2stdp,wave_mean_2stdm,wave_mean)

メニューバーの[Window]->[New Graph]よりグラフを作成。
XWave:[Day],YWave:closing_price, mean_wave, mean_2stdp, mean_2stdm
を選択。

見栄えは,軸をダブルクリックしていろいろと変更,ラインをダブルクリックしていろいろと変更。
メニューバーの[Graph]->[Add Anotation]から凡例を設定。

これらどのように設定したかは,以下のコマンドラインを参照のこと。

シグマバンドのできあがり

シグマバンドのできあがり