ボラティリティ
ちゃんと本を読むまでボラティリティ のことを単純に標準偏差だと思っていたが、どうやら定義がいくつかあるようだ。詳しくはないのでWikipediaから引用する。
細かいところはWikiをみてください。
とりあえずの理解としては株価のバラツキ具合だと思うことにする。株価のバラツキが大きいということは投資した場合に株価の値上がりで儲ける可能性も高いが、逆に失う可能性も高い。つまりはリスクが大きいということになる。ボラティリティは銘柄の特徴を捉えるのに重要な指標の一つのようだ。
ヒストリカル・ボラティリティ
ここではヒストリカル・ボラティリティの定義を確認する。ヒストリカル・ボラティリティは価格の対数差収益率の標準偏差で定義される。
時点の株価を とした時の 時点での対数差収益率を とする。
$$
r_t = \log P_t - \log P_{t-1} = \log \frac{P_t}{P_{t-1}}
$$
そのため、ヒストリカル・ボラティリティは 個の収益率データ が得られているとき
$$
s = \sqrt{\frac{1}{n-1}\sum_{i=1}^n (r_i - \bar{r})^2 }
$$
で推定される。
対数差収益率をプロットする
各銘柄の変動のしやすさを視覚的に見るために対数差収益率をプロットしてみよう。
今回も前回同様銘柄は
の4つで行く。
import matplotlib.pyplot as plt import quandl import numpy as np # データをquandlから取得 df_quick = quandl.get('TSE/4318') # Quick df_hitachi = quandl.get('TSE/6501') # 日立製作所 df_takeda = quandl.get('TSE/4502') #武田薬品工業 df_Nikkei = quandl.get('NIKKEI/INDEX') # 日経平均株価 # matplotlibの描画をかっこよく plt.style.use('ggplot') fig1 = plt.figure(figsize=(18, 10)) ax1_quick = fig1.add_subplot(221) ax1_hitachi = fig1.add_subplot(222) ax1_takeda = fig1.add_subplot(223) ax1_Nikkei = fig1.add_subplot(224) ax1_quick.plot(np.diff(np.log(df_quick.loc["2013-07-16":, ['Close']]), axis=0)*100, label='Quick', color='b') ax1_hitachi.plot(np.diff(np.log(df_hitachi.loc["2013-07-16":, ['Close']]), axis=0)*100,label='HITACHI', color='r') ax1_takeda.plot(np.diff(np.log(df_takeda.loc["2013-07-16":, ['Close']]), axis=0)*100 , label='Takeda', color='g') ax1_Nikkei.plot(np.diff(np.log(df_Nikkei.loc["2013-07-16":, ['Close Price']])*100 , axis=0), label='Nikkei', color='purple') ax1_quick.set_title('Quick') ax1_quick.set_ylim=(-20,20) ax1_hitachi.set_title('HITACHI') ax1_hitachi.set_ylim(-20,20) ax1_takeda.set_title('TAKEDA') ax1_takeda.set_ylim(-20, 20) ax1_Nikkei.set_title('NIKKEI') ax1_Nikkei.set_ylim(-20, 20) plt.show()
y軸の幅はQuickの変動幅が一番大きかったのを何回か実行する中で確認したので
それに合わせた。y軸の値は パーセント(%)
これを見るとボラティリティは Quick > 日立 > 武田薬品 ≒ 日経平均株価 となっている事が視覚的にわかる。
Quickは %と大きく変動しているが、日経平均や武田薬品は % の幅に収まっている。
つまり、この4つの中だとQuickが最もボラタイル(ボラティリティが大きい)である事がわかる。
データの要約
視覚的に見ることはできた。続いては、平均や分散のような統計量を求めて見ることにする。
収益率の平均
各銘柄の収益率の平均を求めてみよう。
次のようにすれば計算できる。
quick_mean = np.mean(np.diff(np.log(df_quick.loc["2013-07-16":, ['Close']]), axis=0)*100) hitachi_mean = np.mean(np.diff(np.log(df_hitachi.loc["2013-07-16":, ['Close']]), axis=0)*100) takeda_mean = np.mean(np.diff(np.log(df_takeda.loc["2013-07-16":, ['Close']]), axis=0)*100) Nikkei_mean = np.mean(np.diff(np.log(df_Nikkei.loc["2013-07-16":, ['Close Price']]), axis=0)*100) print("Quick : " + str(quick_mean)) print("HITACHI : " + str(hitachi_mean)) print("TAKEDA : " + str(takeda_mean)) print("Nikkei : " + str(Nikkei_mean))
結果は
銘柄名 | QUICK | 日立 | 武田薬品 | 日経平均 |
---|---|---|---|---|
平均(%) | 0.163 | 0.027 | 0.029 | 0.043 |
いづれの銘柄の平均値も正の値をとるが、どれも0に近く、小さな値になっている。
※計算結果(平均)
Quick : 0.162560953612
HITACHI : 0.0269943597075
TAKEDA : 0.0285518660969
Nikkei : 0.0426793473652
ボラティリティを計算する
続いては、各銘柄のボラティリティ(標準偏差)を求める。
次のようにすれば計算できる。
quick_std = np.std(np.diff(np.log(df_quick.loc["2013-07-16":, ['Close']]), axis=0)*100) hitachi_std = np.std(np.diff(np.log(df_hitachi.loc["2013-07-16":, ['Close']]), axis=0)*100) takeda_std = np.std(np.diff(np.log(df_takeda.loc["2013-07-16":, ['Close']]), axis=0)*100) Nikkei_std = np.std(np.diff(np.log(df_Nikkei.loc["2013-07-16":, ['Close Price']]), axis=0)*100) print("Quick : " + str(quick_std)) print("HITACHI : " + str(hitachi_std)) print("TAKEDA : " + str(takeda_std)) print("Nikkei : " + str(Nikkei_std))
結果は
銘柄名 | QUICK | 日立 | 武田薬品 | 日経平均 |
---|---|---|---|---|
ボラティリティ(%) | 2.713 | 1.896 | 1.342 | 1.316 |
先ほどの図の印象と数字が一致している事がわかります。Quickのボラティリティは2.713% であり、武田薬品が 1.342% であることから大きさとしてはQuickは武田薬品の約2倍であり、より価格変動が大きい銘柄である事がわかる。
※計算結果(ボラティリティ)
Quick : 2.7130695301
HITACHI : 1.8958143491
TAKEDA : 1.34199583079
Nikkei : 1.31599308226
豆○ば〜
QUICKって、これを書く際に参考にしている「現場ですぐ使える時系列データ分析ーデータサイエンティストのための基礎知識ー」の著者が所属している会社なんだよ〜