NormalizeDouble

 

Использование NormalizeDouble в функции CompareDoubles из stdlib еще как-то можно пояснить. Вот:

bool CompareDoubles(double number1,double number2)
  {
   if(NormalizeDouble(number1-number2,8)==0) return(true);
   else return(false);
  }

Но я заметил, что некоторые используют NormalizeDouble на право и на лево. Например в эксперте CrossMACD_DeLuxe все операции сравнения дробных чисел проводятся через NormalizeDouble? Зачем? Эксперт тут: https://www.mql5.com/ru/articles/mt4

Может в mql4 есть какие-то тонкости в данном случае?

 
MuruFigi >>:

Использование NormalizeDouble в функции CompareDoubles из stdlib еще как-то можно пояснить. Вот:

Но я заметил, что некоторые используют NormalizeDouble на право и на лево. Например в эксперте CrossMACD_DeLuxe все операции сравнения дробных чисел проводятся через NormalizeDouble? Зачем? Эксперт тут: https://www.mql5.com/ru/articles/mt4

Может в mql4 есть какие-то тонкости в данном случае?

Предварительная нормализация выполняется не для всех операций сравнения. Для сравнения на предмет "больше" или "меньше" в ней нет никакой необходимости.

 
Сравнивайте даблы через CompareDoubles
 
Reshetov >>:

Предварительная нормализация выполняется не для всех операций сравнения. Для сравнения на предмет "больше" или "меньше" в ней нет никакой необходимости.

Есть необходимость.

Если, например, мы сравниваем новый уровень СЛ со старым перед модификацией ордера. Неужели ни разу не попадалась ERR_NO_RESULT?

Правда, сейчас я сраниваю без нормалайза - с Point/2. Так проще код и понятнее что происходит.

 
komposter писал(а) >>

Есть необходимость.

Если, например, мы сравниваем новый уровень СЛ со старым перед модификацией ордера. Неужели ни разу не попадалась ERR_NO_RESULT?

Правда, сейчас я сраниваю без нормалайза - с Point/2. Так проще код и понятнее что происходит.

Поясните плиз. А как при сравнении двух чисел может быть ERR_NO_RESULT?

 

в MQL все может быть, так что - принтом господа,

принтом)))

 

Korey,

Ваши шутки уже как-то приелись. Давайте догоримся, что если у Вас есть что сказать негативного - Вы это подкрепляете фактами (не рассуждениями!). Хорошо?

 
Rosh писал(а) >>

Korey,

Ваши шутки уже как-то приелись. Давайте догоримся, что если у Вас есть что сказать негативного - Вы это подкрепляете фактами (не рассуждениями!). Хорошо?

1. насчет принта это не шутка а Renat неоднократно советовал.
2. хорошо,

их тех шуток МТ-4 что уже приелись
вот имеется индикатор iSar() и его публичный аналог Parabolic SAR, которые находятся в инсталялляционном пакетe МТ-4
- из в сборки в сборку передается один и тот же баг
данные индикатора не могут быть использованы без NormalizeDouble()
- никаких пояснений документация МТ-4 не содержит.
- тот несчастный кто пытается использовать Параболик в своей программе должен самостоятельно понять,
что в случае iSAR неоходимо обязательно применить NormalizeDouble(),

 
Korey >>:

1. насчет принта это не шутка а Renat неоднократно советовал.
2. хорошо,

их тех шуток МТ-4 что уже приелись
вот имеется индикатор iSar() и его публичный аналог Parabolic SAR, которые находятся в инсталялляционном пакет МТ-4
- из в сборки в сборку передается один и то же баг
данные индикатора не могут быть использованы без NormalizeDouble()
- никаких пояснений документация МТ-4 не содержит.
- тот несчастный кто пытается использовать Параболик в своей программе должен самостоятельно понять,
что в случае iSAR неоходимо обязательно применять NormalizeDouble(),

В чем конкретно баг(ошибка)? В алгоритмерасчета или в получаемых значениях? Вот простой скрипт, который выводит в лог значения встроенного индикатора и пользовательского на последних десяти барах с точностью до 8 знаков после запятой.

//+------------------------------------------------------------------+
//|                                                     CheckSAR.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                   https://forum.mql4.com/cn/17189 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "https://forum.mql4.com/cn/17189"
extern int bars=10;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
  double customSAR_value, iSAR_value;
  double step=0.02;
  double max=0.2;
//----
   for(int i=0;i<bars;i++)
     {
      iSAR_value     =iSAR(Symbol(),0,step,max,i);
      customSAR_value=iCustom(Symbol(),0,"Parabolic",step,max,0,i);
      Print(i,": custom =",DoubleToStr(customSAR_value,8),"    iSAR=",DoubleToStr(iSAR_value,8));
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+

Вот результат выполнения.


16:21:18 Compiling 'CheckSAR'
16:22:09 CheckSAR EURUSD,H4: loaded successfully
16:22:09 CheckSAR EURUSD,H4 inputs: bars=10;
16:22:09 Parabolic EURUSD,H4: loaded successfully
16:22:09 Parabolic EURUSD,H4: initialized
16:22:09 CheckSAR EURUSD,H4: 0: custom =1.27551000 iSAR=1.27551000
16:22:09 CheckSAR EURUSD,H4: 1: custom =1.27590000 iSAR=1.27590000
16:22:09 CheckSAR EURUSD,H4: 2: custom =1.25728332 iSAR=1.25728332
16:22:09 CheckSAR EURUSD,H4: 3: custom =1.25609502 iSAR=1.25609502
16:22:09 CheckSAR EURUSD,H4: 4: custom =1.25483088 iSAR=1.25483088
16:22:09 CheckSAR EURUSD,H4: 5: custom =1.25348604 iSAR=1.25348604
16:22:09 CheckSAR EURUSD,H4: 6: custom =1.25205536 iSAR=1.25205536
16:22:09 CheckSAR EURUSD,H4: 7: custom =1.25136600 iSAR=1.25136600
16:22:09 CheckSAR EURUSD,H4: 8: custom =1.25120000 iSAR=1.25120000
16:22:09 CheckSAR EURUSD,H4: 9: custom =1.26000000 iSAR=1.26000000
16:22:09 CheckSAR EURUSD,H4: uninit reason 0
16:22:09 Parabolic EURUSD,H4: uninit reason 1
16:22:09 Parabolic EURUSD,H4: removed
16:22:09 CheckSAR EURUSD,H4: removed

Значения совпадают. Где Вы видите ошибку в расчетах? (баг). Покажите, пожалуйста, также аргументирванно как я, то есть, с предоставлением кода и результатов. Или может Вы путаете понятия и называете багом нечто другое?
 

to Rosh

значит в 220-й сборке исправили? значит данные iSar () сравниваются уже без нормализации?
Ну, СПАСИБО
а доказательства - было много вопросов форума почему iSar не работает,
ответ всегда был один - "нормализируй данные индикатора"
советники использующие iSAR() которые в CodeBase лежат, все с NormaliseDouble() не иначе

Это баг потому что одно дело котировку нормализировать, и совсем другое - нормализировать данные чтобы арифметикой обработать)))

 
Последний раз на моей памяти параболик поправляли в 2005-м году.
Причина обращения: