ランダムウォーク続き

前回、ランダムウォークの乱数の作り方で終わってしまいましたが、どうやら良い乱数の作り方としてメルセンヌ・ツイスタ法というのがあるそうです。
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html
詳しいことはおいておいて、簡単に言うと長周期、高次元均等分布ということらしいです。周期は2の19937乗(10進数6000桁)ととてつもなく長いです。
さらに生成速度も速く、メモリ効率もよいということなので、文句なく採用です。
Cのソースコードも公開されているので、簡単に実装することができました。
これで白色ノイズが作れたので、続いてガウスノイズです。これは白色ノイズから作るのですが、中心極限定理、Box Muller 法が知られています。但し、中心極限定理では乱数の数を固定しておかなくてはいけないのでちょっと都合が悪いです。
Box Muller 法では2個の一様乱数から2個の正規乱数を作っていくので乱数の長さに関係ないということで、以下のサイトを参考にして三角関数の計算を省略できる高速版を採用してみました。
http://www.taygeta.com/random/gaussian.html
ランダムウォークも大詰めです。ガウスノイズは平均0、標準偏差1ですが、これを実際の為替の動きに合うように動き幅を決める必要があります。
ここで、実際の為替の日足チャートを参考にし、EUR/USD, GBP/USD, USD/CHF, USD/JPY のメジャー通貨ペアから1日での動き幅の平均と標準偏差を求めてみました。
10年近いデータなので、やはり平均はほとんど0に近く、標準偏差はだいたい0.5%から0.7%くらい(ちなみに0.5%なのは意外にポンドドル)なので、大きめに取って0.7%としてみました。
ガウスノイズに0.007をかけ、それに1を加えたものを前日の終値にかけることでランダムウォーク系列を生成してみました。初期値を1として、3万個のデータを作った一例です。

当然ながら毎回全然違う形状のものができてきます。ただ、今回はプログラムを無限に回すことにより事実上無限に長いランダムウォークを生成することができました。
次回はこのデータを元にいくつかのシステムを適用してパフォーマンスを調べてみることにします。
にほんブログ村 為替ブログへ上位ランキングのブログ記事はこちら



コメントは受け付けていません