NormalizeDouble関数|実数型(Double型)の比較

執筆者

佐川直弘(株式会社トリロジー取締役)

MetaTrader 4(MT4)のMQL4プログラムでは、実数型(Double型)の値を比較する際に、プログラマが期待した動作をしない場合があります。この記事では、初心者にもわかりやすく、`NormalizeDouble`関数を使って実数型の値を比較する方法を解説します。

実数型の比較とは?

実数型の値を比較する際、浮動小数点の特性により、少数点以下の値が正確に一致しないことがあります。これは、計算の過程で誤差が生じるためです。例えば、1.0と1.0という2つの値が等しくならない場合があります。この問題を解決するためには、`NormalizeDouble`関数を使用して誤差をなくしたうえで、2つの値を比較します。

NormalizeDouble関数の使用

実数型の値を比較する前に、`NormalizeDouble` 関数を使用して値を正規化することで、誤差を取り除きます。

関数仕様
double NormalizeDouble(double value, int digits)
value
正規化する値
digits
小数点以下の桁数(0~8)

以下は、`NormalizeDouble` 関数を使用して実数型の値を比較するサンプルコードです。

サンプルコード
double a1 = 0.001;
double a2 = 0.002;

if (NormalizeDouble(a1, 8) == NormalizeDouble(a2, 8)) {
    Print(“a1 = a2");
} else {
    Print(“a1 != a2");
}

上記のサンプルコードを実行すると、以下のような結果が得られます。

実行結果
a1 != a2

このように、`NormalizeDouble` 関数を使用することで、実数型の値を正確に比較することができます。

使用例

以下に、実際のトレードプログラムで`NormalizeDouble` 関数を使用して実数型の値を比較する例を示します。

利益計算の使用例
double profit_target = 100.123456789;
double current_profit = 100.123456789;

if (NormalizeDouble(profit_target, 6) == NormalizeDouble(current_profit, 6)) {
    Print(“目標利益に達しました。");
} else {
    Print(“目標利益にはまだ達していません。");
}

この例では、目標利益と現在の利益を6桁に正規化して比較しています。これにより、適切な精度で値が比較されます。

まとめ

`NormalizeDouble` 関数を使用することで、実数型の値を正確に比較することができます。これにより、プログラム内での値の比較が正確に行われ、期待通りの動作が実現されます。初心者の方も、まずはこの関数の基本的な使い方を学び、実際のプログラムに応用してみてください。

MQL4

Posted by 佐川直弘