• カテゴリー別アーカイブ ランダムウォーク
  • GARCHモデル

    久々にランダムウォークの記事です。
    以前、ジオメトリック(幾何)ランダムウォークの記事を書きましたが、そのおさらいです。
    幾何ランダムウォークとは、1サンプル前との価格の対数の差が正規分布になっていると仮定するモデルです。
    e(n) = log(y(n)) – log(y(n-1))
    e(n)が正規分布となるわけですが、ここでは為替を対象に考えると、平均0、ドル円などのメジャー通貨ペアでは1年間のボラティリティが8%程度なので、1日あたりのボラティリティは、8/√260≒0.5%となります。(為替は土日以外ほとんど動いているので年間営業日数を260日としています)
    つまり、v(n) を1日あたりのボラティリティ、w(n)を平均0、分散1の正規乱数系列とすると、
    e(n) = v(n) w(n)
    と書けます。ランダムウォークの場合、v(n) = 0.005 など一定値として考えます。
    e(n)が求まれば、ランダムウォークは
    y(n) = y(n-1)exp(e(n)) ≒ y(n-1)(1+e(n))
    のように書けます。
    ところで、ボラティリティ v(n) は実際には一定ではなく、相場とともに変化します。一般に、ボラティリティは相場が大きく動くと大きくなり、一種のトレンドのように大きくなったり、小さくなったりを繰り返します。こういうボラティリティの動きを数式として表したものをGARCHモデルと呼ぶそうです。
    詳しいことは省略しますが、GARCHの原型であるARCHモデルを開発したEngleさんは2003年のノーベル経済学賞を受賞したということです。
    GARCHの一番簡単な形は
    v(n)2 = c + b v(n-1)2 + a e(n-1)2
    となります。ボラティリティv(n)が過去のボラティリティv(n-1)と、過去の変動率e(n-1)の影響を受けるということです。a,b,c はそれぞれ定数でc>0, b,a≧0となります。
    本来なら、実際の相場から a, b, c を推定するわけですが、ここでは適当に決めてみます。a=0.000001, b=0.80, c=0.15 としたときのv(n)の変動の一例です。乱数使っていますから毎回違います。

    ボラティリティのチャートというのはあまり見たことがないのですが、こんな感じでしょうかね。
    ただ、ボラティリティが0.5%から1%に変化しても、これから作った価格の時系列データを見たところで違いはほとんどわかりません。GARCHモデルは、あくまでボラティリティの変動を実際に近づけただけで、やはり上がるか下がるかはランダムということには違いはないのです。
    ボラティリティはオプション価格に影響してきますから、オプション価格を予測するのには使えるのかもしれません。
    にほんブログ村 為替ブログへ上位ランキングのブログ記事はこちら



  • ジオメトリック・ランダムウォーク

    本来の算術ランダムウォークはガウスノイズを順次加えていって作るものなのですが、前回のランダムウォークでは、価格がマイナスになってはいけないということと、変動幅は絶対値ではなく、割合で表すのが自然ということで、単に変動の割合をガウスノイズにしていました。
    前回3万個のデータ(と言っても日足なら100年分)だと何となく相場データっぽくなっていたのですが、試しに50万個のデータまで増やしてみると、ほとんどの場合で0に収束してしまうことに気づきました。
    これは価格が小さくなればなるほど変動幅も小さくなるので、0に近づいていくとそこから上がれなくなるからなのですが、このやり方だと必ずダウントレンドになってしまいます。
    そこで再びランダムウォークについて調べなおしたところ(前回見逃していただけ)、相場のモデルとして適当なものに、Geometric Random Walk というものがありました。これも直訳すると幾何ランダムウォークっていうのでしょうが、よくわからないので、ここではジオメトリック・ランダムウォークと言っておきます。以下のサイトを参考にしました。
    http://www.duke.edu/~rnau/411georw.htm
    これは、価格のLOGを取ったものの差分がガウスノイズになるように作るものです。後でexpを取るので、結局は前日の価格にexp(ガウスノイズ)をかければいいだけです。
    この方法にすると、価格が0に収束することはなくなりました。が、1から始めても、非常に大きな値になることもしばしば現れるようになりました。実際に標準偏差を0.07%としたときの300万個のランダムウォーク(なんと1万年分)を作ってみました。

    この図は縦軸をLOGスケールにしていますが、実際には大きなところで20000近い価格になっています。株価ならこのような動きもありそうですが、為替でも1万年もかかれば何万倍も違ってくることもあるのかもしれません。
    それより興味深かったことはバブルのような動きがランダムウォークで作れるということです。下の図を見てください。

    これは上のと同じ条件で30万個のランダムウォークを作り、縦軸をリニアスケールで表したものです。バブルのときの相場に似ていませんか?
    これまでバブルみたいな動きはランダムウォークとは違うものだと思っていましたが、これを見るとバブルもランダムウォークの一部なのかもしれません。
    次回はシステムについて考えてみたいと思います。
    にほんブログ村 為替ブログへ上位ランキングのブログ記事はこちら



  • ランダムウォーク続き

    前回、ランダムウォークの乱数の作り方で終わってしまいましたが、どうやら良い乱数の作り方としてメルセンヌ・ツイスタ法というのがあるそうです。
    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万個のデータを作った一例です。

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



  • ランダムウォークも奥が深い

    相場はランダムウォークか? とよく話題に出てきますが、ランダムウォークって本当はどういうものでしょう? 本当のランダムウォークってどうやって作るのでしょう?
    どうにも気になるので、「ランダムウォーク」っていうカテゴリーを新設して、しばらく調べていきます。
    とりあえず、以下のサイトを参考にしました。
    http://www.riskglossary.com/link/random_walk.htm
    まずは、単純ランダムウォーク(Simple Random Walk)ですが、0から始まって、コインの表が出たら+1、裏が出たら-1を加えていく過程です。+1か-1かは白色ノイズとして乱数で決めます。+1、-1の代わりに+k、-kと1以外の値にした場合も同じく単純ランダムウォークと考えられます。
    しかし、実際の相場では必ず同じ値幅だけ動くということはあり得ないので、もう少し現実に近づけるために、動く幅をランダムにしてやります。但し、ここを白色ノイズのようにすべての動き幅を一定の確率にしてしまうとまた不自然になってしまうので、動き幅をガウスノイズ(確率が正規分布に従う)にしたものが金融の世界でランダムウォークと考えられているようです。上のサイトでは単純ランダムウォークと区別するために Arithmetic Random Walk と書いてありました。直訳すると算術ランダムウォークとなりますが、この言葉で検索してもあまりヒットしません。
    ところでガウスノイズは、白色ノイズから作るのですが、この作り方もいくつかあるそうです。しかし、まずは乱数というのを正確に作らなくてはいけません。
    乱数っていうのもこれまであまり深く考えたことはなく、プログラミング言語の標準ライブラリに入っているものをそのまま使っていたのですが、どうやらそれはよい乱数ではないようです。
    えーっ、よい乱数、悪い乱数って何?ということで以下のサイトが見つかりました。
    http://www001.upp.so-net.ne.jp/isaku/rand.html
    通常プログラムのライブラリなどで使われる乱数生成法は線形合同法と言って簡単な計算でできるのですが、その分ビットに規則性があったりして、使い方によっては全く乱数にならない場合もあるようです。しかも、この方法では2の32乗や2の48乗といった周期があります。10進数で10桁から15桁の周期です。それだけ長ければ十分かもしれませんが、それより優れた乱数生成法があるそうです。メルセンヌ・ツイスタというそうですが、これについては次回報告したいと思います。
    にほんブログ村 為替ブログへ上位ランキングのブログ記事はこちら



  • 新規研究プロジェクト

    今日のオプション取引ですが、ポンスイもようやく下がり始め、すべてのポジが安全圏に入ってきたので、
    特に調整の必要はありません。新規ポジとしては、EUR/USD のボラが上がったので、1.31 call 売りを建ててみました。
    最近システムトレーディング関係でネタがなかったのですが、ちょっと思いつきで次のようなテーマについて考えてみたいと思います。
    「ランダムウォークで勝てるシステムはあるか?」
    本当に相場がランダムウォークでも長期に運用して勝てるシステムがあれば、それは究極のシステムでしょう。
    でも、相場が完全にランダムウォークだったら、無限時間運用時に勝つことはまず無理でしょう。
    では、絶対に負けるシステムはできるのでしょうか?
    それもできるはずはありません。それができれば逆に売買すれば勝てるシステムになってしまうからです。
    とりあえず、次回はランダムウォークについて調べてみましょう。
    にほんブログ村 為替ブログへ上位ランキングのブログ記事はこちら