Funkcje konwersji:   NormalizeDouble()

Funkcja double NormalizeDouble() zaokrągla liczbę zmiennoprzecinkową do określonej dokładności. Więcej informacji można znaleźć w specyfikacji MQL4.


Przykład 1

#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).


Przykład 2

#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().