- www.mql5.com
а что выдаст https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/csymbolinfo/csymbolinfonormalizeprice
Правильно работает, увидеть не можем, надо по результатам сравнения проверять.
if(NormalizeDouble(0.9920099999999999, 5)==0.99201){ Alert("Правильно!"); } else{ Alert("Неправильно"); }
Правильно работает, увидеть не можем, надо по результатам сравнения проверять.
Увидеть можем, например, так:
Alert(StringConcatenate(NormalizeDouble(0.9920099999999999, 5)));
К стати, результат выполнения Alert(NormalizeDouble(0.9920099999999999, 5)); такой же.
Проблема заключается в том, что я эту цену я использую в имени объекта. Когда NormalizeDouble не срабатывает, длинна имени превышает 63 символа и ObjectCreate его обрезает. После чего, не работает ObjectSetInteger, так как имя объекта отличается от имени, передаваемого в ObjectCreate.
Простой пример, еще один способ увидеть:
string name = StringConcatenate("1111111111111111111111111111111111111111111111", NormalizeDouble(0.9920099999999999, 5)); ObjectCreate(0, name, OBJ_ARROW, 0, Time[1], Open[1]); if(ObjectFind(name) != -1) Alert("Объект найден"); else Alert("Объект не найден");
Результат: Объект не найден. Не буду мусорить скринами, если не верите, можете запустить и проверить.
Если заменить первую строку следующим образом, объект найдется:
string name = StringConcatenate("1111111111111111111111111111111111111111111111", 0.99211);
Нолики заменил для того, что бы набралось 5 символов после запятой (точки).
К стати, если в числе 0.9920099999999999 заменить хотя бы один нолик на любую другую цифру, NormalizeDouble заработает
Ну и что же вы видите?
NormalizeDouble(0.9920099999999999, 5) равно 0.99201.
А в алерте невесть что неведомой длины. Что тут можно увидеть?
Увидеть можем, например, так:
StringConcatenate <- WTF
DoubleToString и никак иначе.
string n_str = DoubleToString(n,5);
Print (n_str);
USDJPY,M30: 0.99201
что числа типа double писались правильно в строковом представлении нужно использовать функцию
string DoubleToString( double value, // число int digits=8 // кол-во знаков после запятой );
обратное представление
double StringToDouble( string value // строка );
DoubleToString и никак иначе.
Я, не посмотрев в справочник, ошибочно думал что digits должен быть до 8, а не до 16, поэтому использовал StringConcatenate
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте. Не получается нормализовать цену открытия бара.
NormalizeDouble(0.9920099999999999, 5) возвращает 0.9920099999999999