為替相場の値動きに本当にウィナー過程を当てはめていいんだろうか。
簡単に調べられそうだったので、ドル円相場で少し調べてみた。
結果から言うと、正規分布っぽくなくねって結論が出てしまった。
※ウィナー過程…確率過程においてが平均0分散sの正規分布に従うような確率過程
為替データの取得
pandas_datareader
というライブラリを使えば、Web上の色々な情報を取ってくることができるらしい。
便利。
ドル円(USD/JPY)相場をとってくるにはパラメータを"DEXJPUS"とするようだ。
pandas-datareaderで株価や人口のデータを取得 | nkmk log
from pandas_datareader import data start = datetime(2010,1,1) end = datetime(2017,1,1) usdjpy = data.DataReader("DEXJPUS","fred",start,end)
分析
分析では、2010年1月1日から2017年1月1日までの1日間隔の値動きを使った。
欠損値は除外した上で、1日の差分が正規分布に従うかどうかについて調べた。
正規性の検定にはシャピロウィルク検定を用いた。
pythonで正規性の検定【コロモゴロフスミルノフ検定(KS検定)】 - 技術メモ
結果
下の図は、青い線がヒストグラムのKDE*1を表し、黒い線が正規分布にフィッティングしたものを表す。
p値は
7.15e-24
となって、正規分布じゃなくねって結論が出た。
見た目では、正規分布に比べると中心と裾にかけて広くなっていくような分布っぽい。
1分足とか1時間足で使えるデータが簡単に見つからなかったのでやってないが、それらでも試してみたい。
コード
from pandas_datareader import data, wb from datetime import datetime from math import isnan from scipy import stats import matplotlib.pyplot as plt import numpy as np import seaborn as sns sns.set_style("whitegrid") start = datetime(2010,1,1) end = datetime(2017,1,1) usdjpy = data.DataReader("DEXJPUS","fred",start,end) subs = zip(usdjpy["DEXJPUS"][:-1],usdjpy["DEXJPUS"][1:]) sublist = [] for i,j in subs: if isnan(i) or isnan(j): continue sublist.append(j - i) print(stats.shapiro(sublist)[1]) sns.distplot(sublist,fit=stats.norm) plt.title("dist of 2010-2017 USD/JPY price movement") plt.show()