私と私の猫の他は誰でも隠し事を持っている

野良プログラマ発、日々のアウトプット

PHP Trader 関数を使ってみる - ボリンジャーバンドの巻

前回の続きで、今回は trader_bbands 関数ボリンジャーバンドを算出してみます。ボリンジャーバンドは、移動平均標準偏差を重ね合わせただけの指標ですが、直観的だしトレンドやボラティリティがひと目で分かって便利なので、自分もよく使っています。

trader_bbands のコーリングシーケンスは、

trader_bbands(<株価が格納された1次元の配列>, <移動平均日数>, <+σの係数>, <-σの係数>, <移動平均の種類>)

です。株式相場では通常、25日の単純移動平均を元に計算するようです。返り値は +Nσ値・移動平均・-Nσ値が格納された2次元配列です。

それでは、前回同様、k-db.com さんから頂いた今年の日経平均日足データを元にボリンジャーバンドを算出して表示するというシナリオのサンプルプログラムです。

<?php
// CSV ファイルから株価データを読み込んで、配列に格納
$data = file('indices_I101_1d_2016.csv', FILE_IGNORE_NEW_LINES);
//見出し行を省く
unset($data[0]);
// 各行のカンマ区切りを配列に分割
$data = array_map(function($item){ return explode(',', $item); }, $data);
// 日付昇順でソート
usort($data, function($a, $b){ return ($a[0] < $b[0]) ? -1 : 1; });
// 終値だけ収集(兼実数変換)
$closePrices = array_map(function($item){ return +$item[4]; }, $data);
// 25日単純移動平均に基づくボリンジャーバンドを計算
$bbands = trader_bbands($closePrices, 25, 1, 1, TRADER_MA_TYPE_SMA);
// CSV 形式で整形・出力
echo "日付,株価,25日SMA,+1σ,-1σ\n";
foreach ($data as $n => $data) {
	echo implode(",", [
		$data[0],
		$closePrices[$n],
		@$bbands[1][$n],
		@$bbands[0][$n],
		@$bbands[2][$n],
	]) . "\n";
}

実行結果ははい、こんな感じ↓。

日付,株価,,25日SMA,+1σ,-1σ
2016-01-04,18450.98,,,
2016-01-05,18374,,,
2016-01-06,18191.32,,,
(中略)
2016-02-03,17191.25,,,
2016-02-04,17044.99,,,
2016-02-05,16819.59,,,
2016-02-08,17004.3,17296.788,17863.05,16730.525
2016-02-09,16085.44,17202.166,17765.29,16639.042
2016-02-10,15713.39,17095.742,17678.419,16513.065
(後略)