ボラティリティ(価格変動)について調べる1

価格変動のボラティリティはその価格に比例する、という説は正しいのだろうか?
これをデータマイニングを使い国内マーケットについて検証してみた。

以前取り扱った「トレーディングシステム入門」の書籍に書いてあった、
「価格変動のボラティリティはその価格に比例する」という説を思い出した。

これは時間に依存しないため、時系列のボラティリティを工夫してひとつにまとめることができそうなので、この説が(先物だけでなく)正しいのか調べてみることにする。

この説は、「1つの価格帯をみたときそのボラティリティはほぼ一定である」と別の表現ができる。
(また別の切り口としては「ボラティリティと価格は正の相関がある」ともいえるだろう。)

そこで単位価格あたりのボラティリティ(以後ボラティリティとだけ書く)を

「(高値ー安値)÷始値」の1000倍

と定義し毎日の値を求める。
1000倍することでボラティリティの数値が認識しやすいものとなる。

そして統計をとってボラティリティがどういう分布をしているのを算出する。
これにより、フィールドに統計項目や計算値のあるレコードが1銘柄につき1行作成することができる。

そしてすべての銘柄のレコードを1つのファイルとしてまとめることができる。

ボラティリティが時間に関係なくほぼ一定なのであれば、その分布図はある値を頂点とした釣鐘状の形をとるだろう。

すべての銘柄のボラティリティの分布(傾向)を一括して計算するために、新たにプログラムを作成するが、そのためには統計値の計算式について知っておく必要がある。

必要な統計の値は、平均値、標準偏差、尖度(せんど)、歪度(わいど)、と判断した。
どれも「トレーディングシステム入門」に載っていたものである。

作成したプログラムが算出する値が正確であることを確認するために、OpenOffice の Calc でも計算を行い、その計算結果と照合することにした。

そのためにはCalcでの各数値の計算式を知る必要がある。

インターネットではその情報がみつからなかったが、Calcの上記の統計値のための計算式がExcelと同じであることがわかった。

Excelの標準偏差、尖度、歪度については次のサイトに式が載っている。
一般的なものとは若干異なり、その理由は、標本を母集団すべてとみなすかどうかという前提の違いらしい。

http://software.ssri.co.jp/statweb2/gloss/glossary.html

数値は平均値、標準偏差、尖度・歪度の順に算出できる。

統計値の詳しい説明はみなさんに自分で本や上記サイトを参照してもらうことにして、簡単に言えば
標準偏差は、正規分布といわれる左右対称の釣鐘上の分布をしており、平均値を中心(頂点)として、平均値±標準偏差に68.3%のデータが含まれている。

標準偏差(標本標準偏差)は次の式となる。

equation-stdev.gif

尖度(kurtosis)は分布が正規分布と比べて、尖っている度合いを表したもので、0は正規分布、0未満のときは尖りが緩やかで裾が短い。0より大きいときは尖りが急で裾が長いことを意味する。
Sは標準偏差uである。

equation-kurutosis.gif

歪度(skewness)は分布が正規分布と比べて、分布の頂点(中心)が左か右に寄っていることを表す。分布の頂点が左にずれて裾が右に伸びているときは正の値を、頂点が右にずれて裾が左に伸びているときは負の値をとる。正規分布では0となる。

equation-skew.gif

また「取引のされない日の日数(=高値ー安値が0=ボラティリティが0)」と「データの合計日数」も計算させる。
これにより、取引されている日数が少ない、データ数が少ない(データの欠損が多い)ものが明らかとなり、後でそれらを除外することができる。

ボラティリティの計算のために作成したプログラムは 06_Calc_Vola_Eachstock.exe と名づけた。

06_Calc_Vola_Eachstock.zip

ここからダウンロードできるが、zip形式で圧縮されているので解凍する。

お決まりの文句ですが、このプログラムは私個人用に作ったものであるため、使用する人は自己責任でお使いください。
不具合がある可能性もあり、動作を保障するものではありません。

このプログラムは選択した作成済み銘柄CSVファイルから計算を行い、”コード、トレード日数合計、ボラティリティが0の日数合計、ボラティリティの総平均・標準偏差・歪度・尖度”を1レコードとしてすべての銘柄について記録し1つのファイルとする。
そして”年月日、コード、ボラティリティ、出来高”の時系列データのCSVファイルを銘柄ごとに作成する。
またこの2種類のファイルの1行目には、フィールド名が記述される。

以下にこのプログラムの使い方を説明する。

ボラティリティの計算のプログラム

  1. 06_Calc_Vola_Eachstock.exe のアイコンをダブルクリックして起動する。

    handmadeprogramico.gif

  2. 次のウィンドウが現れるのでDestinationのボタンをクリックする。

    calcvolatility1-2.gif

  3. 作成されるCSVファイルを保存するフォルダ(ディレクトリ)を指定する。OKボタンをクリックする。

    calcvolatility1-3.gif

  4. csv_fileのボタンをクリックする。

    calcvolatility1-4.gif

  5. 作成済みの国内マーケットデータ(コード毎のcsvファイル)を選択する。そして「開く(O)」ボタンをクリックする。

    calcvolatility1-5.gif

  6. Caliculate のボタンをクリックするが、その前に必要によりボタン横にある項目にチェックを入れる。

    Ln Vol はボラティリティの自然対数を算出し、その結果の統計値を出す。
    Ln Price はプライスの自然対数を算出し、ボラティリティを「(Ln高値 - Ln安値)÷Ln始値」の1000倍 として計算する。
    Ignore Vol 0 は(高値=安値)のレコードについては、計算を行わず統計にも含めない。

    calcvolatility1-6.gif

  7. Caliculating from ファイル名 のメッセージが出てVolatilityの計算が実行される。

    calcvolatility1-7.gif

  8. 計算が終了すると、作業にかかった時間が表示される。OKボタンをクリックする。

    calcvolatility1-8.gif

  9. Finished のメッセージが表示される。
    Reload ボタンで再実行(02から作業を行う)できる。
    また、Delete_file ボタンはDestinationで選択したフォルダ内のCSVファイルをすべて削除するときに使用する。

    calcvolatility1-9.gif

  10. これでボラティリティの計算は終了。
    計算結果はCalcResult.csv として作成される。