ランダムウォークに関して【コード引っ張て来て4回試行してみた比較チャート!?】
こんにちわ。
この記事は単なる忘備録なので、
ランダムウォークに関してのお金関係(相場のランダムウォーク理論)についてはそれなりにまとめるに至った場合、 ひたすらお金の話をするブログ に完成形として載せたいと思っております。
→簡単に言えばこっち日記ねw
ということで、思い付きでやってみた結果をだけ見たいんだというう人向けだと思って欲しいですw
行ってみたランダムウォーク
どんなコードを走らせてみたかと言うと、
pythonで
下記コード
%matplotlib inline import numpy as np import pandas as pd pn = np.random.choice([-1,1], size=10000) p0 = 110 randomwalk = np.cumsum(pn)+p0 pd.Series(randomwalk).plot()
を行っている感じです。
Jupyter Notebook使用
他サイトさんのコードをほぼそのまま使わせてもらったわけですが
(ありがとうございます)
参考にさせてもらったサイト
一応ここからは、pythonの再度のお勉強がてらコードを簡単に解説して、ランダムウォークの画像検証に行きたいと思います。間違ってたらごめんよ。
ランダムウォークのコードの簡易解説
まず、モジュールを頭のimport二つで読み込んでいます。as以降に関してはnumpyをnpという名前でインポートしていることを意味し、以後npという名前で使用できます。
pythonのモジュール読み込みのルールですね
上記二つのimportしたモジュールについての詳細は書きませんが、numpyは学術的な計算を簡単にさせることができるモジュールであり、pandasに関しては分析をするうえで必要なモジュールと思ってください。
(私の認識がその程度)
統計なんかのコード見ててもこの二つが入ってること多いですよね。(ほぼ記載されていると思われる(詳しくないけど)ガチな統計になるとRとか使ってるみたいだからどうなんでしょうね。。。まだ未知ですごめんなさい。
pn = np.random.choice([-1,1], size=10000) p0 = 110
上記1行目では、pnという-1か1をランダムでsize=10000という指示で10000個作っています。
要は、-1 -1 1 1 1 1 -1 -1 -1 ‥‥を一万回試行しているものです。
そして、p0が起点です。
最近のドル円に近い110円にしてますw(どうでもいい)
randomwalk = np.cumsum(pn)+p0 pd.Series(randomwalk).plot()
そして、np.cumsum(pn)でpnの累積和を出して、それに起点のp0を足していきます。
計算はこれで内部的に完了。
これをプロットしてあげるために、
pd.Series(randomwalk).plot()
を記載すれば、上記のランダムウォークがチャートのようにプロットされる。
というわけです。
2分の1の確率で-1か1が出るのに!?
起点が110で、2分の1の確率で-1か1が出るなら、
110の付近に収束しそうな感じがするかもしれません。
しかし、時間経過とともにそうならないという結果がでます。
これは、自然界で多く見られます。
ブラウン運動などもよく知られたランダムウォークですしそれにともなった拡散現象もそうです。
さらに為替や株などもランダムウォークによるという考えが【ランダムウォーク理論】ですが、
興味ある方勉強してくださいwそして教えてください
ランダムウォークプログラムを画像で見る
上記のコードを実行して、プロットされている画像を4枚出します。
条件は全く同じで試行しても、描くチャートはこんなに違うんだ~!!(小並感
っていうなんとも面白い感じがしますw
私たちは、沢山の並行世界の中の一つに生きているに違いない!!ww
とか思うくらい、てんでバラバラの動きしますねww
3枚目が10000回の試行後に110円付近にいてある意味レアかと。。。
今回は単純に-1or1といった形でしてますが、これを指数にしたりすることで、より為替っぽい値動きにしてみたり、これはやってませんが過去のデータ取ってきて値幅の分布なんかを使った変動率と出現頻度からランダムに上下に値を振った累積和とかしてみても面白いのかもしれませんね!!!
ということで簡単な忘備録でした。