Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Скачай MetaTrader 5 для iPad и торгуй в любом месте!
protr
358
protr 2015.11.02 08:06 

Подскажите пожалуйста

Нормализирую 

Вношу в массив 

MASS_PLUS[i_p_value]=NormalizeDouble(GlobalVariableGet("AAAAA")+zero+(q*i_p_value)*Point,5); 

 

А на выходе принт и алерт округляет до 4 знаков...

так же и с  глобальной переменной 

      double Current_price=0.0;
      if(Digits()==5 || Digits()==3){if(Digits()== 5) Current_price = NormalizeDouble((Ask + Bid)/2,5); if(Digits()== 3) Current_price = NormalizeDouble((Ask + Bid)/2,3);}
      if(Digits()==4 || Digits()==2){if(Digits()== 4) Current_price = NormalizeDouble((Ask + Bid)/2,4); if(Digits()== 2) Current_price = NormalizeDouble((Ask + Bid)/2,2);}
      datetime a_time=GlobalVariableSet("AAAAA",Current_price);
Vasyl Nosal
18466
Vasyl Nosal 2015.11.02 08:43  
DoubleToString(X,5)
protr
358
protr 2015.11.02 08:53  
Vasyl Nosal:
DoubleToString(X,5)
Спасибо, а как быть с заполнением массива? Нужно и его заполнять в 5 знаках. Спасибо
Ihor Herasko
8896
Ihor Herasko 2015.11.02 09:11  
protr:
Спасибо, а как быть с заполнением массива? Нужно и его заполнять в 5 знаках. Спасибо

Массив заполняется с максимально возможной для double точностью - 16 знаков после запятой. Другое дело, что, нормализуя значение до 5 значащих цифр после запятой, остальные 11 знаков превращаются в нули. При выводе значения числа в журнал или на экран оно все равно преобразуется к такому виду, который Вы сами выбираете. Укажете выводить 5 знаков - увидите только 5 знаков. Укажете 10 знаков - увидите 10 знаков.

Кстати, когда речь идет о ценовых данных, для универсальности лучше использовать _Digits, чем прямое указание количества значащих цифр. Ведь 5 - это справедливо для таких пар, как EURUSD, GBPUSD, USDCHF и т. п. А вот для USDJPY и GBPJPY это уже много, достаточно 3.

Dina Paches
7502
Dina Paches 2015.11.02 17:12  
Игорь Герасько:

Массив заполняется с максимально возможной для double точностью - 16 знаков после запятой. Другое дело, что, нормализуя значение до 5 значащих цифр после запятой, остальные 11 знаков превращаются в нули. При выводе значения числа в журнал или на экран оно все равно преобразуется к такому виду, который Вы сами выбираете. Укажете выводить 5 знаков - увидите только 5 знаков. Укажете 10 знаков - увидите 10 знаков.

Кстати, когда речь идет о ценовых данных, для универсальности лучше использовать _Digits, чем прямое указание количества значащих цифр. Ведь 5 - это справедливо для таких пар, как EURUSD, GBPUSD, USDCHF и т. п. А вот для USDJPY и GBPJPY это уже много, достаточно 3.

Чуть уточню, поскольку видимо писали быстро и у вас опечатка, похоже.

Не _Digits, а Digits().

P./S.: Справка по нормализации в MQL4 и MQL5


Alexander Puzanov
29237
Alexander Puzanov 2015.11.02 17:51  
Dina Paches:

Чуть уточню, поскольку видимо писали быстро и у вас опечатка, похоже.

Не _Digits, а Digits().

Нету опечатки - _Digits. А также _Point, _LastError, _Period, _Symbol и др - это удобно, попробуйте
Dina Paches
7502
Dina Paches 2015.11.02 18:12  
Alexander Puzanov:
Нету опечатки - _Digits. А также _Point, _LastError, _Period, _Symbol и др - это удобно, попробуйте
Чем это удобнее? Ведь и в Примечании к Справке по нормализации (ссылки есть в моём посте выше) пишут о Digits(). Да и помню, что видела разъяснение со стороны разработчика языков MQL5 и MQL4 на форуме о том, что подчёркивания в именах переменных (_Digits, _Point, _Period, _Symbol), чтобы показать их deprecated статус.
Ihor Herasko
8896
Ihor Herasko 2015.11.02 18:52  
Dina Paches:
Чем это удобнее? Ведь и в Примечании к Справке по нормализации (ссылки есть в моём посте выше) пишут о Digits(). Да и помню, что видела разъяснение со стороны разработчика языков MQL5 и MQL4 на форуме о том, что подчёркивания в именах переменных (_Digits, _Point, _Period, _Symbol), чтобы показать их deprecated статус.
Тут просто нет разницы. "Удобнее" - это, действительно, не тот аргумент. Можно использовать как вызов функции, так и обращение к переменной. Тут уже каждый делает так, как считает нужным. Правильного или неправильного пути в этой ситуации нет, оба равноценны.
Alexander Puzanov
29237
Alexander Puzanov 2015.11.02 18:57  
Игорь Герасько:
Тут просто нет разницы. "Удобнее" - это, действительно, не тот аргумент. Можно использовать как вызов функции, так и обращение к переменной. Тут уже каждый делает так, как считает нужным. Правильного или неправильного пути в этой ситуации нет, оба равноценны.

Согласен. Мне это удобно. Если нужны др аргументы:

1. Digits() - функция, _Digits и Digits - переменные. В мой моск тяжёлое детство впаяло правило #1: экономить ресурсы - если есть возможность не запускать функцию для вычисления, а воспользоваться готовой переменной - выбор очевиден

2. Насчёт depricated - функции Digits() нет в справке (встроенной, онлайн не смотрел), ссылки на неё открывают переменные _Digits и Digits. Дак кто же тут пережиток ??

3. Насчёт ошибок и предупреждений - вооооообще не использую функции Digits(), Point(), Period() нигде и низашто - только _Digits, _Point, _Period. В вызовах индикаторов и работе с таймсериями вообще не использую NULL - только _Symbol. Ни разу не видел предупреждений компилятора по какому-нибудь из этих поводов ни в MQL4 ни в MQL5. И я таки уверен, что в следующих версиях MQL репрессированы будут функции, а не предопределённые переменные

Dina Paches
7502
Dina Paches 2015.11.02 21:12  
Alexander Puzanov:

Согласен. Мне это удобно. Если нужны др аргументы:

1. Digits() - функция, _Digits и Digits - переменные. В мой моск тяжёлое детство впаяло правило #1: экономить ресурсы - если есть возможность не запускать функцию для вычисления, а воспользоваться готовой переменной - выбор очевиден

2. Насчёт depricated - функции Digits() нет в справке (встроенной, онлайн не смотрел), ссылки на неё открывают переменные _Digits и Digits. Дак кто же тут пережиток ??

3. Насчёт ошибок и предупреждений - вооооообще не использую функции Digits(), Point(), Period() нигде и низашто - только _Digits, _Point, _Period. В вызовах индикаторов и работе с таймсериями вообще не использую NULL - только _Symbol. Ни разу не видел предупреждений компилятора по какому-нибудь из этих поводов ни в MQL4 ни в MQL5. И я таки уверен, что в следующих версиях MQL репрессированы будут функции, а не предопределённые переменные

Мне более близка и понятна точка зрения Игоря, озвученная им выше:

... "Удобнее" - это, действительно, не тот аргумент. Можно использовать как вызов функции, так и обращение к переменной. Тут уже каждый делает так, как считает нужным...

По поводу же ваших аргументов... Плин, промолчала бы, махнув рукой, если бы не ваш второй пункт.

Поэтому, наверное, всё же напишу и свою точку зрения, исходя из перечисленных вами аргументов:

1. Сама стараюсь писать коды, экономно использующие ресурсы.

Касаемо же очевидности выбора в данном случае - не соглашусь с вами. Поскольку тут для вас очевидно одно, для меня же является в данном случае другое.

2. О функции Digits() - она есть и во встроенной в MetaEditor Документации, так и в Документации on-line здесь на сайте. Как для MQL5, так и для MQL4.

В т.ч., чтобы убедиться в этом, вам достаточно было пройти по ссылке в посте выше, где приводила ссылки на нормализацию и где в Примечании той страницы Документации пишется о применении именно этой функции Digits(). И затем, при необходимости, посмотреть встроенную Справку.

Как и во встроенной в MetaEditor Документации, функции Digits(), Point(), Symbol(), Period() находятся в разделе Проверка состояния (для MQL4, для MQL5). 

3. Ошибки и предупреждения (в работе и при компиляции) и мной не были замечены ни при применении Digits(), ни при _Digits.

Но не располагаю информацией, позволяющей мне быть уверенной в репрессиях, или предполагать о них, по отношению к обсуждаемым функциям Проверки состояния (а домыслами не люблю заниматься).

Наоборот, в этом году на один из вопросов одного из членов Сообщества на форуме, начинавшийся так:

В МТ4 переменные Point, Digits... В МТ5 эти же переменные начинаются с подчеркивания...

есть такой ответ от Renat Fatkhullin:

Подчеркивания, чтобы показать их deprecated статус. Нельзя использовать такие простые переменные, объявленные на глобальном уровне, но выглядящие как обычные локальные переменные.

Для чистоты языка и кода нужно переходить на Symbol(), Period(). Тут как раз продуманность и избавление от наследия старого.

Из этого ответа на вопрос от пользователя об этих переменных, можно сделать вывод, что применять рекомендовано всё же функции из раздела Проверка состояния Справки (Xxxxx()) вместо Предопределённых переменных с названным статусом.

Однако, в том числе и из этого ответа пользователю, плюс по совокупности других факторов, сделала для себя вывод, что и репрессии к предопределённым переменным ( _Digits, _Point, _Period, _Symbol) так же вряд ли стоит ожидать.

Алексей Тарабанов
7247
Алексей Тарабанов 2015.11.02 21:45  
Dina Paches:

Поцеловал. 

/ /123456
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий