• カテゴリー別アーカイブ 復刻記事
  • 復刻:ジオメトリック・ランダムウォーク

    前回の続きの復刻記事です。元記事は2006年8月1日のものです。


     

    本来の算術ランダムウォークはガウスノイズを順次加えていって作るものなのですが、前回のランダムウォークでは、価格がマイナスになってはいけないということと、変動幅は絶対値ではなく、割合で表すのが自然ということで、単に変動の割合をガウスノイズにしていました。

    前回3万個のデータ(と言っても日足なら100年分)だと何となく相場データっぽくなっていたのですが、試しに50万個のデータまで増やしてみると、ほとんどの場合で0に収束してしまうことに気づきました。

    これは価格が小さくなればなるほど変動幅も小さくなるので、0に近づいていくとそこから上がれなくなるからなのですが、このやり方だと必ずダウントレンドになってしまいます。

    そこで再びランダムウォークについて調べなおしたところ(前回見逃していただけ)、相場のモデルとして適当なものに、Geometric Random Walk というものがありました。これも直訳すると幾何ランダムウォークっていうのでしょうが、よくわからないので、ここではジオメトリック・ランダムウォークと 言っておきます。以下のサイトを参考にしました。

    http://www.duke.edu/~rnau/411georw.htm

    これは、価格のLOGを取ったものの差分がガウスノイズになるように作るものです。後でexpを取るので、結局は前日の価格にexp(ガウスノイズ)をかければいいだけです。

    この方法にすると、価格が0に収束することはなくなりました。が、1から始めても、非常に大きな値になることもしばしば現れるようになりました。実際にガウスノイズの標準偏差を0.07%としたときの300万個のランダムウォーク(なんと1万年分)を作ってみました。

    rnd_walk3

    この図は縦軸をLOGスケールにしていますが、実際には大きなところで20000近い価格になっています。株価ならこのような動きもありそうですが、為替でも1万年もかかれば何万倍も違ってくることもあるのかもしれません。

    それより興味深かったことはバブルのような動きがランダムウォークで作れるということです。下の図を見てください。

    rnd_walk4

    これは上のと同じ条件で30万個のランダムウォークを作り、縦軸をリニアスケールで表したものです。バブルのときの相場に似ていませんか?

    これまでバブルみたいな動きはランダムウォークとは違うものだと思っていましたが、これを見るとバブルもランダムウォークの一部なのかもしれません。


     

    ここからは現在の私からのコメントです。

    ジオメトリック・ランダムウォークは前日の価格にexp(ガウスノイズ)を掛けるのが正確な方法ですが、ガウスノイズが小さければ(1+ガウスノイズ)を掛ける方法に近似できます。ただし、あくまで近似式なので、わずかですがマイナス方向にバイアスがかかっています。その結果、時間が十分に経過していくと0に近づいていったわけです。

     



  • 復刻:ランダムウォーク続き

    復刻記事の続きです。2006年7月31日の記事をリフォーマットして再掲します。


     

    前回、ランダムウォークの乱数の作り方で終わってしまいましたが、どうやら良い乱数の作り方としてメルセンヌ・ツイスタ法というのがあるそうです。

    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万個のデータを作った一例です。

    rnd_walk2

    当然ながら毎回全然違う形状のものができてきます。ただ、今回はプログラムを無限に回すことにより事実上無限に長いランダムウォークを生成することができました。


    ここからは現在の私からのコメントです。

    当時、乱数に凝ってたみたいですね。今は乱数がいいか悪いかには、そうこだわりはありません。人間変わるもんです。

    それより、復刻して気づいたんですが、ランダムウォークの計算の仕方がちょっと怪しいです。前の記事のような単純ランダムウォークだと、前の終値にガウスノイズを足していくはずですが、次の記事で説明しているジオメトリックランダムウォークと混同しているようです。いい加減ですみません。次の記事で補足します。



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

    皆さん、こんにちは。

    今回も復刻記事です。2006年7月28日の記事です。


     

    相場はランダムウォークか? とよく話題に出てきますが、ランダムウォークって本当はどういうものでしょう? 本当のランダムウォークってどうやって作るのでしょう?

    どうにも気になるので、「ランダムウォーク」っていうカテゴリーを新設して、しばらく調べていきます。とりあえず、以下のサイトを参考にしました。

    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桁の周期 です。

    それだけ長ければ十分かもしれませんが、それより優れた乱数生成法があるそうです。メルセンヌ・ツイスタというそうですが、これについては次回報告 したいと思います。


    ここからは現在の私からのコメントです。

    最近面倒な計算やりたくないので、時間は多少かかっても簡単な方法を選んでしまいます。

    ガウスノイズも正規分布になるってことは、要はランダムウォークの結果です。kの値をもっと小さくしてランダムウォークを繰り返せばガウスノイズと同じような動き幅が得られます。

     



  • 復刻:相場はランダムウォーク?

    皆さん、こんにちは。

    最近ネタがないので、昔のブログ記事の復刻版を載せてみます。

    これは、2006年2月17日の記事の復刻版です。あくまで当時の私の意見なので、現在の私の意見とは異なる部分もあります。ご了承ください。


     

    下のグラフを見てください。これは、何かの株か為替かのチャートでしょうか?いえ、これはランダムウォークです。

    randomwalk

    相場はランダムウォークか? これはテクニカル分析やシステムトレーディングに意味があるのかというのと同じく、トレーディングの根本に関わる問題です。

    相場がランダムだと言うと、めちゃくちゃに動いているかのような印象を持つ人も多いかと思いますが、ランダムウォークとは、ある一定の間隔でプラスマイナスの一定の幅だけ変化するものです。

    上のグラフはエクセルでA1のセルに初期値として100を入れ、A2のセルに

    =A1+POWER(-1,ROUND(RAND(),0))

    と書いて、後はこれをずっと下までコピーして作ったデータをプロットしたものです。

    要は前のセルに半々の確率で+1か-1を足すだけなのですが、もっと簡単な書き方があるのかもしれません。毎回、違った形のチャートが現れるので色々と試してみると面白いでしょう。

    これからわかることは、相場がランダムウォークかどうかというより、ランダムウォークは相場と似ているということだ思います。昔、コンピュータがなかった時代では、見た目で判断するしかないので、相場をランダムウォークと見なしたのかもしれません。

    相場がこのようなランダムウォークと同じに見える人はトレーディングをやめた方がいいと思います。

    相場とランダムウォークは似て非なるものと確信できる人だけが生き残れる世界ではないでしょうか。


    ここからは現在の私からのコメントです。

    エクセルでランダムウォークを作るのに、今の私は

    =A1+RANDBETWEEN(0,1)*2-1

    と書いています。0か1の乱数を2倍して1引くことで-1か1の乱数に変えるわけです。