【MQL5】MathSrand関数について

MQL5リファレンス
スポンサーリンク

MathSrand関数の働き・役割

MathSrand関数は、擬似ランダム整数の系列を生成するための開始点(シード)を設定する関数です。シードを設定することで、乱数生成器の初期化を行い、生成される乱数の系列を制御します。

乱数のシードとは?

乱数シードとは、乱数生成器の初期値のことです。シード値を設定することで、生成される乱数の系列が決定されます。異なるシード値を使用すると、異なる乱数の系列が生成され、同じシード値を使用すると、毎回同じ順序で乱数が生成されます。

例えば、シード値を12345に固定すると、以下のコードでは毎回同じ乱数が生成されます。

void OnStart()
{
    MathSrand(12345); // シード値を固定
    int nshape1 = MathRand() % 7;
    int nshape2 = MathRand() % 7;
    int nshape3 = MathRand() % 7;
    Print("生成された乱数1: ", nshape1);
    Print("生成された乱数2: ", nshape2);
    Print("生成された乱数3: ", nshape3);
}

この例では、シード値が固定されているため、乱数生成器が毎回同じ順序で乱数を生成します。このため、nshape1、nshape2、nshape3はプログラムを実行するたびに同じ値になります。

一方、TimeLocal関数を使用して現在のローカル時間シード値として設定すると、時間が常に変動するため、毎回異なる乱数が生成されます。

void OnStart()
{
    MathSrand(TimeLocal()); // 現在のローカル時間をシード値に使用
    int nshape1 = MathRand() % 7;
    int nshape2 = MathRand() % 7;
    int nshape3 = MathRand() % 7;
    Print("生成された乱数1: ", nshape1);
    Print("生成された乱数2: ", nshape2);
    Print("生成された乱数3: ", nshape3);
}

この例では、毎回異なるシード値が設定されるため、生成される乱数も毎回異なります。

MathSrand関数を使用してシード値を設定することで、乱数の系列を制御し、同じ乱数列を再現したり、異なる乱数列を生成したりすることができます。

MathSrand関数の引数について

MathSrand関数は、1つの引数を取ります。関数名と引数の構成は以下の通りです。

void MathSrand(int seed);

引数

MathSrand関数の戻り値について

MathSrand関数戻り値を持ちません。この関数は、乱数生成器を初期化するために使用されます。

MathSrand関数を使う際の注意点

MathSrand関数を使用する際には、シード値の設定に注意が必要です。特定のシード値を使用することで、常に同じ乱数列を生成することができます。例えば、デバッグやテスト時に同じ条件で乱数を生成したい場合には、同じシード値を使用します。

一方、毎回異なる乱数列を生成したい場合には、現在の時間やシステムのティックカウントなどをシード値として使用します。例えば、GetTickCount関数はオペレーティングシステムの開始からの経過時間をミリ秒(1/1000秒)単位で返すため、これをシード値として使用することで毎回異なる乱数列を生成することができます。

MathSrand関数を使ったサンプルコード

以下に、MathSrand関数を使用して乱数列を初期化するサンプルコードを示します。

void OnStart()
{
    // 乱数シードを現在の時刻で初期化
    MathSrand(GetTickCount());

    // 0から6までの乱数を生成
    int nshape = MathRand() % 7;

    // 生成された乱数をエキスパートログに出力
    Print("生成された乱数: ", nshape);
}

MathSrand関数のサンプルコードに使われた関数や文法要素の簡単な解説

MathSrand関数は、乱数シード値を設定します。シードを設定することで、乱数の系列を制御することができます。乱数シードとは、乱数生成器の初期値のことで、これを基に乱数が生成されます。異なるシードを使用すると異なる乱数の系列が生成され、同じシードを使用すると同じ系列の乱数が生成されます。

GetTickCount関数は、オペレーティングシステムの開始からの経過時間をミリ秒単位で返します。これをシード値として使用することで、毎回異なる乱数が生成されます。

MathRand関数は、擬似乱数列を生成するために使用されます。

Print関数は、メッセージをエキスパートログに出力します。ここでは、生成された乱数を出力しています。

以上が、MathSrand関数についての詳細な解説です。MathSrand関数を使用することで、MQL5プログラムにランダム性を導入し、さまざまな応用が可能になります。

タイトルとURLをコピーしました