基礎から学ぶシステムトレード
シストレブログ人気ランキング  

シストレ徹底攻略シストレマスターへの道ワールド・トレーディング・エッジ基礎から学ぶシステムトレードシストレニュースシストレツールシストレナビTOPへ

 

2010年06月07日(月)

ランダムウォークとランダムトレード(3) [ランダムウォーク]



前回、乱数列を発生させるCプログラムを紹介しました。

MQL4のプログラムでも、ほぼ同じ方法で乱数列を発生させることができます。

お互い対応した関数があるので、単にrand()をMathRand()に、srand()をMathSrand()に置き換えるだけです。例えば、このようなプログラムになります。

int start()
{
MathSrand(TimeLocal());

for(int i=0; i<10; i++) Print(MathRand());
return(0);
}

ここで、TimeLocal()はCプログラムでのtime()と同じ役割なのですが、ちょっと注意する点があります。

このプログラムをスクリプトやEAとして実際に実行する場合はこれで問題ありません。

但し、EAをストラテジーテスターでバックテストとして実行する場合、ちょっと問題があります。

バックテストの場合、TimeLocal()の値がPCの時間ではなく、サーバーの時間に置き換わってしまうのです。なので、週末などサーバーのデータの更新が止まっているときは、サーバー時間が止まっているので、同じ乱数列が生成されてしまうという問題があります。

それを防ぐために、GetTickCount()という関数を利用することができます。GetTickCount()は、メタトレーダーを起動してからの経過時間を返すので、サーバーの止まっている週末でも逐次違う値を返します。プログラムは次のように書けます。
int start()
{
MathSrand(GetTickCount());

for(int i=0; i<10; i++) Print(MathRand());
return(0);
}

ところで、乱数の範囲を制限したい場合はどうすればよいでしょうか?例えば、サイコロの目のように1から6までの乱数を発生させたい場合などです。

実は、MathRand()は、0から 32767(2の15乗マイナス1)までの整数の乱数を返します。

なので、MathRand()%6 として、6で割った余りを求めると、0から5までの乱数になります。あとは、それに1を加えると、1から6までの乱数となります。
int start()
{
MathSrand(GetTickCount());

for(int i=0; i<10; i++)
{
int num = MathRand()%6+1;
Print(num);
}
return(0);
}

これが一番簡単な方法です。他にも
int num = 6*MathRand()/32768.0 + 1

と計算する方法もあります。これは、MathRand()/32768.0とすることで、0から1未満の実数の乱数を生成します。そして、それを6倍して1足すことで整数部が1から6までの実数乱数となります。最後にint 型の変数に代入することで、小数部が切り捨てられ、1から6までの整数乱数となるわけです。

MathRand()が理想的な乱数を発生させていれば、どちらで求めても問題はありません。が、乱数を生成するアルゴリズムによっては発生する乱数の確率に偏りが生じる場合もあります。そのため、前者より後者の方法の方が偏りが少ない乱数になると言われています。

但し、この違いも試行回数が十分に大きくないとわからないものですから、ここでは前者の簡単な方法の方で説明を続けていくことにします。


>>“基礎から学ぶシステムトレード”全記事バックナンバーはこちらから




Posted at 14時21分


ページのトップへ ページのトップへ

Sponsor AD

2010/6

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      

プロフィール

豊嶋久道

2003年よりFX取引を始め、システムトレードの道へ。最近ではFXオプション取引も含めたトレーディングシステムの研究を行っている。システムトレードを基礎から正しく理解するための情報を発信する予定。

PHOTO

相場はランダムウォーク?

相場はランダムウォーク?

カテゴリーリスト

最近の記事

検索


当サイトコメントについて

当コメントは情報提供のみを目的として作成されたものであり、投資に関してはご自身でご判断くださいますようお願い致します。また、当資料は著作物であり著作権法により保護されております。無断で全文または一部を転載することはできません。

RSS1.0

[Login]


powered by a-blog
Copyright (C) 2008 PhiConcept,Inc. All rights reserved.