単一通貨ペアの場合
ヒストリカルデータを用いて市場データのシミュレーションを行うことをヒストリカルシミュレーションという。通常は現在の市場データにヒストリカルデータの確率分布を当てはめてシミュレーションを行う方法であり、金融機関のリスク管理では定番の手法になっている。もちろん、そのような適用はおいおい考えていきたいが、ここでは単純に過去の市場価格の動きを再現するシミュレーション手法を考える。為替レートのデータで入手できるのは日足データぐらいなのでその間をうまく埋めるシミュレーション方法を考えたいということである。
これについては、ピン止めランダムウォークのところでも述べたように、ヒストリカルデータの高値、安値、引値を通過するランダムウォークを3つのBrownian Bridgeをつなぐことで表現することができる。
実際にプログラムで実装したものを以下にのページに追加したので、取引の練習等に活用してほしい。
ただ、このような形でシミュレーションできるのは単一通貨ペアのみであり、様々な通貨ペアの市場価格を同時にシミュレーションするということはできないことに注意しなければならない。どうせならすべての通貨ペアの市場価格をシミュレーションするゲームを作りたいという欲望は当然に生じる。以下では、これを考察しよう。
複数通貨ペアの場合
複数の通貨ペアを扱う場合、為替レートの変化には相関があるため、それっぽい挙動を表現するには相関を考慮してシミュレーションを行う必要がある。短期的な為替レートの変化は正規分布で大体近似できるので、ヒストリカルコリレーションは正規分布の相関係数として取り扱ってよいと考えられる。ヒストリカルデータ(例えば、直近100日分など)から推定した相関係数を用いて正規乱数を生成してシミュレーションを行えばよい。これについては前回の投稿で示したように、コレスキー分解を用いてシミュレーションを行うことができる。
同様に、ピン止めランダムウォークを用いたシミュレーションでは高値と安値を付けるタイミングを決定するために一様乱数を用いたシミュレーションを行っている。本質的には為替レートの変動を決定するシミュレーションなので観測される正規分布の相関を反映するように一様乱数のシミュレーションを行う必要がある。これについても前回の投稿で示したように、コピュラを用いたシミュレーションを適用することで相関を反映した高値、安値のタイミングのシミュレーションを行うことができる。
これで大体のシミュレーションはできると考えられるが、問題としてクロスレートの高値、安値の問題が残る。例えば、USD/JPY,EUR/JPY,EUR/USDを同時にシミュレーションする場合、それぞれの通貨ペアで高値、安値を付けるタイミングをシミュレーションできるが、裁定の関係があるためどれか一つは自由なシミュレーションを行うことができない。現状あまり良い解決策を思いつかないが、方針としては以下のどれかであると考えられる。
- 裁定関係の維持をあきらめて、3つの通貨ペアをバラバラにシミュレーションする。裁定は維持されないといっても相関は反映されるので、それほどおかしいシミュレーションパスにはならないと期待できる。
- 1つの通貨ペアについて自由度(高値や安値をヒストリカルデータと整合的にすること)をあきらめ、裁定関係からシミュレーションする。例えば、USD/JPY,EUR/USDを独立にシミュレーションして、EUR/JPYは整合性をあきらめる。相関は反映されるので、実際の高値、安値からそれほど乖離した値にはならないと期待できる。
- 高値、安値のタイミングに応じて、うまく独立な通貨ペアを使い分ける。例えば、高値を付けるタイミングがEUR/USD<EUR/JPYの場合、EUR/USDが高値を付けるまではUSD/JPY,EUR/USD、付けた後はUSD/JPY,EUR/JPYというように切り替える。
試行錯誤してみるが、基本的には1.でよい気がしている。。。3.は完全に整合性を取りに行くが、実装が難しそうである。