Funkcja double NormalizeDouble() zaokrągla liczbę zmiennoprzecinkową do określonej dokładności. Więcej informacji można znaleźć w specyfikacji MQL4.
#property strict
void OnStart()
{
//--- znormalizować liczbę zmiennoprzecinkową 0.123456 do określonej dokładności
double value = 0.123456; // liczba, która ma być znormalizowana
int precision = 3; // ilość cyfr po znaku dziesiętnym (dokładność)
double result = NormalizeDouble(value, precision); // result = 0.123
Print("1) result = ",result);
Print("2) NormalizeDouble(0.123456,4) = ",NormalizeDouble(0.123456,4)); // wynik = 0.1235
Print("3) NormalizeDouble(0.123456,20) = ",NormalizeDouble(0.123456,20)); // wynik = 0.123456
//--- obliczyć i znormalizować poziom StopLoss
double StopLoss = Ask + 0.1/3;
double StopLossCalculated = NormalizeDouble(StopLoss, _Digits);
Print("4) StopLoss (bez normalizacij) = ",StopLoss);
Print("5) StopLossCalculated (z normalizacją _Digits) = ",StopLossCalculated);
}
W przypadku obliczenia poziomów cenowych, np. StopLoss, TakeProfit lub cen otwarcia oczekujących zleceń, ich wartości powinny być znormalizowane do dokładności określonej w predefiniowanej zmiennej _Digits (rys. 1 przykład 5).
Rys. 1. Przykłady stosowania funkcji NormalizeDouble().
Należy pamiętać, że znormalizowana liczba zmiennoprzecinkowa, wyświetlana w logach terminala MetaTrader 4 za pomocą funkcji Print() , może zawierać więcej znaków po kropce niż można było by się tego spodziewać (rys. 2, przykład 1).
#property strict
void OnStart()
{
//--- wyświetlić liczbę 76.671 za pomocą NormalizeDouble()
Print("1) NormalizeDouble(76.671,8) = ",NormalizeDouble(76.671,8));
//--- wyświetlić liczbę 76.671 za pomocą DoubleToString()
Print("2) DoubleToString(76.671,8) = ",DoubleToString(76.671,8));
}
Rys. 2. Różnice w wyświetlaniu liczb zmiennoprzecinkowych za pomocą funkcji NormalizeDouble() i DoubleToString().