関数の働き・役割
MathRand関数は、MQL5で使用される乱数生成関数です。この関数は、0から32767の範囲の整数を返します。乱数を使用することで、プログラムにランダム性を持たせ、さまざまなシミュレーションやアルゴリズムで利用することができます。
乱数とは?
乱数とは、規則性や予測不可能性を持つ数値のことです。サイコロの出目や、宝くじの当選番号などが代表的な例です。
コンピュータでは、真の乱数を生成することは難しいため、計算によって乱数のように見える数値(疑似乱数)を生成することが一般的です。
乱数は、シミュレーション、統計分析、暗号化、ゲームなど、様々な分野で活用されています。
関数の引数について
int MathRand();
MathRand関数は引数を取りません。
MathRand関数の戻り値について
MathRand関数は、0から32767の範囲の整数を返します。この乱数は、プログラム内でランダムな要素を導入するために使用されます。
MathRand関数を使う際の注意点
MathRand関数を使用する際には、乱数のシードを設定することが重要です。シードはMathSrand関数を使用して設定します。同じシードを使用すると、同じ順序の乱数が生成されますので、異なるシードを使用することで異なる乱数の系列を生成できます。
また、MathRand関数の代わりにrand関数を使用することもできます。これにより、同様に乱数を生成することができます。
MathRand関数を使ったサンプルコード
以下に、MathRand関数を使用して0から6までのランダムな整数を生成するサンプルコードを示します。
void OnStart()
{
// 乱数シードを現在の時刻で初期化
MathSrand(TimeLocal());
// 0から6までの乱数を生成
int nshape = MathRand() % 7;
// 生成された乱数をエキスパートログに出力
Print("生成された乱数: ", nshape);
}
MathRand関数のサンプルコードに使われた関数や文法要素の簡単な解説
MathSrand関数は、乱数のシードを設定します。シードを設定することで、乱数の系列を制御することができます。乱数のシードとは、乱数生成器の初期値のことで、これを基に乱数が生成されます。異なるシードを使用すると異なる乱数の系列が生成され、同じシードを使用すると同じ系列の乱数が生成されます。
TimeLocal関数は、現在のローカル時間を返します。現在の時間は常に変動するため、これを乱数のシードに使用することで、毎回異なるシードが設定され、結果として毎回異なる乱数が生成されます。
同じシード値を設定すると、生成される乱数の順序は毎回同じになります。例えば、シード値を12345に固定し、MathRand関数を3回呼び出すと、毎回同じ3つの乱数が順番に生成されます。以下のコードでは、MathRand関数により乱数シードを固定しているため、生成される乱数の順序が毎回同じになります。
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は毎回同じ値になります。シード値が固定されているため、乱数生成器が同じ順序で乱数を生成するためです。
Print関数は、メッセージをエキスパートログに出力します。ここでは、生成された乱数を出力しています。
MathRand関数を使用することで、MQL5プログラムにランダム性を導入し、さまざまな応用が可能になります。