以前の記事「
日経平均株価の上昇トレンド持続性に対する考察」で使用した、乱数シミュレーターの内容についてソースコードを公開しておく。
1 #include<iostream>
2 #include<stdlib.h>
3 using namespace std;
4
5 int main(){
6 int max,min,last;
7 double ov,hv,lv,cv;
8 double rmstune;
9 int nightflag=0;
10 int counter=0;
11
12 // set variables
13 ov=15000.;
14
15 //random seed
16 srand(10000);
17
18 // random walk
19 for(int ii=0;ii<200000;ii++){
20 max=-10000;min=10000;last=0;
21 for(int jj=0;jj<3000;jj++){
22 int n=rand()%3;
23
24 if(n==2) last=last+1;
25 else if(n==1) last=last+0;
26 else if(n==0) last=last-1;
27
28 if(last>max) max=last;
29 else if(last<min) min=last;
30 }
31 hv=ov+max;
32 lv=ov+min;
33 cv=ov+last;
34
35 if(nightflag==0){
36 cout << counter << " " <<max<< " "<< min<<" ";
37 cout <<ov<<" "<<hv<<" "<<lv<<" "<<cv<<" "<<last <<" " <<cv<< endl;;
38 nightflag=1;
39 if(counter<2000) counter++;
40 }else{
41 nightflag=0;
42 }
43 ov=cv;
44 }
45 return 0;
46 }
1.ランダム・ウォークについて 22行目
乱数を振り、3で割った余りを算出
24?26行目
この
余りが2なら+1円、余りが1なら±0円、余りが0なら‐1円、と株価を変動させる。
21行目
これを
3,000回繰り返す。
35?42行目
前日終値と当日始値までの間も、ランダム・ウォークにより、株価変動があったことを表現。
19行目
これを20万回繰り返し、
10万日分の疑似株価を作成。
2.株価の統計解析への利用の可否について50行に満たない、極めて簡単なシミュレーターであるが、いくつかの株価解析には活躍する。
シミュレーターが使用できる解析:
上昇確率・下落確率・連続上昇の確率・連続下落の確率。上昇傾向の確率・下落傾向の確率
一方で、株価の変動幅や上昇率・下落率については、チューニングをしていないため、これらに関わる株価解析には利用できない。
シミュレーターが利用できない解析:
上昇幅・下落幅の分析、期待値。上昇率・下落率の分析、期待値。
3.シミュレーターや解析についてのコメント10万日分の疑似株価の計算だが、計算時間は1分に満たない。計算機の進歩を感じる。
おかげで、「
日経平均株価の上昇トレンド持続性に対する考察」においては、疑似株価の統計誤差を低いレベルに抑えた分析ができた。
今後は、変動幅のチューニングを行い、様々な投資手法のバックテストと、ランダム・ウォークによる疑似株価の比較を行えるように、改造していく。