[MQL]ランダムな値を発生させるMathRand()の使い方

MathRand()はランダムな値を発生させるMQLの関数です。

この記事では、MathRand()の使い方をサンプルコードで具体的に説明します。

MathRand()関数

MathRand()関数は0から32767の間の整数をランダムに発生させる関数です。

この関数は、例えばEAのエントリーに少しランダム性を持たせたい場合や、プログラムの動作チェックのためにランダムな値を入力値に使いたい場合などに使用します。

使い方は、事前にシードとなる値をMathSrand()で設定し、その後MathRand()を呼び出すという流れになります。

それでは具体的な使い方を以下に説明します。

MathRand()の使いかた

MathRand()の使い方を説明します。

1.シードを設定する

MathRand()関数を最初に呼ぶ前に、MathSrand()で乱数のシードを設定します。MathSrand()はインジケータの初期化時に一度呼べばOKです。

int OnInit()
{
  MathSrand(GetTickCount());
  return(INIT_SUCCEEDED);
}

MathSrand()の引数に使っているGetTickCount()は、システム起動からの経過時間(ミリ秒)を返す関数です。システム起動中はほぼ異なる値を返すため、シード設定の引数に向いています。

2.ランダムな値を発生させる

MathRand()関数は0から32767の整数をランダムに返します。

int num = MathRand();  // 0 から 32767

上記のコードで、変数numに0から32767のいずれかの値がランダムに代入されます。

また、MathRand()関数の代わりにrand()関数を使うこともできます。

発生させる値の上限を指定するには

発生させる乱数の上限を指定することができます。例えば0から4の乱数を発生させる場合は以下のように記述します。

int num = MathRand() % 5;  // 0 から 4

上記コードでは、変数numには0,1,2,3,4のいずれかの値が代入されます。

(※コード内の「%」は割った時の余りを求める演算子です。この場合ではMathRand()で発生させた値(0から32767)を5で割った時の余りですので、0,1,2,3,4のいずれかの値が得られます。

発生させる値の範囲を指定するには

任意の数を加えることで、乱数の範囲を変更することもできます。例えば100から104の範囲なら下記のように記述します。

int num = MathRand() % 5 + 100;  // 100 から 104

上記コードでは、変数numには100,101,102,103,104のいずれかの値が代入されます。

MathRand()で発生させた値を5で割った時の余り(0,1,2,3,4)に100を加えているので、100,101,102,103,104のいずれかの値が得られるという理屈です。

まとめ

ランダムな値を発生させるMathRand()関数の使い方を説明しました。

普段はあまり使うことはありませんが、何かを検証する時にランダムな値でテストしたい場合には簡単に使える便利な関数です。

下の記事はMathRand()を使ってランダムにトレードしたらどうなるか検証したものです。興味があればどうぞ。

コメント

この記事へのコメント(0 件)