Что означает значение -9.223464270575145e+18 возвращаемое индикатором?

 

Есть у меня функция:

double getIndicatorValue(int handle, int bufferIndex, int indexToCopy) {
//---
  double givenValue[1];
  CopyBuffer(handle, bufferIndex, indexToCopy, 1, givenValue);
  Print(__FUNCTION__, " :: givenValue = ", ND(givenValue[0]));
  return ND(givenValue[0]);
}

В данном случае, возвращается значение фрактала. Вот часть журнала:

2018.09.29 11:23:33.656 simplifiedWaveAnalysis (GBPUSD,D1)      getIndicatorValue :: givenValue = 1.30587
2018.09.29 11:23:33.656 simplifiedWaveAnalysis (GBPUSD,D1)      getIndicatorValue :: givenValue = 1.30587
2018.09.29 11:23:33.664 simplifiedWaveAnalysis (GBPUSD,D1)      getIndicatorValue :: givenValue = -9.223464270575145e+18
2018.09.29 11:23:33.664 simplifiedWaveAnalysis (GBPUSD,D1)      getIndicatorValue :: givenValue = -9.223464270575145e+18
2018.09.29 11:23:33.664 simplifiedWaveAnalysis (GBPUSD,D1)      getIndicatorValue :: givenValue = 1.32173
2018.09.29 11:23:33.672 simplifiedWaveAnalysis (GBPUSD,D1)      getIndicatorValue :: givenValue = -9.223464270575145e+18
2018.09.29 11:23:33.672 simplifiedWaveAnalysis (GBPUSD,D1)      getIndicatorValue :: givenValue = 1.30948
2018.09.29 11:23:33.672 simplifiedWaveAnalysis (GBPUSD,D1)      getIndicatorValue :: givenValue = 71.68585
2018.09.29 11:23:33.672 simplifiedWaveAnalysis (GBPUSD,D1)      getIndicatorValue :: givenValue = 74.97362

Что это за число? Какое-то значение есть? Я имею ввиду. Например, имеются именованные константы. Например, значение EMPTY_VALUE известно и частно применяется мной (EMPTY_VALUE = 1.797693134862316e+308).

А что означает значение -9.223464270575145e+18 ? Ведь, оно возвращается там, где нет значения фрактала в данном случае. Логичнее было бы EMPTY_VALUE использовать, а здесь совсем другое. Вот мне очень интересно услышать вразумительный ответ что это за значение.

Вопрос задаю потому что нужно определится как отсеивать пустые значение т.е. где нет фрактала над баром. Если бы пустые значения были бы EMPTY_VALUE код был бы примерно такой:

if (curFractalsValue != -9.223464270575145e+18)
  // Что-нить делаем..

А здесь что нет именованой константы для значения -9.223464270575145e+18 и нужно писать как-то так?

Суть в том, что если открыть индикатор Fractals (исходный код) видно, что пустые значения индикатора заполняются значением, как раз-таки, EMPTY_VALUE:

  {
   int i,limit;
//---
   if(rates_total<5)
      return(0);
//---
   if(prev_calculated<7)
     {
      limit=2;
      //--- clean up arrays
      ArrayInitialize(ExtUpperBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtLowerBuffer,EMPTY_VALUE);
     }
   else limit=rates_total-5;

   for(i=limit;i<rates_total-3 && !IsStopped();i++)
     {
      //---- Upper Fractal
      if(high[i]>high[i+1] && high[i]>high[i+2] && high[i]>=high[i-1] && high[i]>=high[i-2])
         ExtUpperBuffer[i]=high[i];
      else ExtUpperBuffer[i]=EMPTY_VALUE;

      //---- Lower Fractal
      if(low[i]<low[i+1] && low[i]<low[i+2] && low[i]<=low[i-1] && low[i]<=low[i-2])
         ExtLowerBuffer[i]=low[i];
      else ExtLowerBuffer[i]=EMPTY_VALUE;
     }
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }
 

есть еще такие константы

https://www.mql5.com/ru/docs/constants/namedconstants/typeconstants

Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Константы числовых типов
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Константы числовых типов
  • www.mql5.com
Каждый простой числовой тип предназначен для определенного круга задач и позволяет оптимизировать работу mql5-программы при правильном применении. Для лучшей читаемости кода и...
 
Taras Slobodyanik:

есть еще такие константы

https://www.mql5.com/ru/docs/constants/namedconstants/typeconstants

Ни одно не соответствует тому, которое я привёл. Есть похожее, но там без запятой и нужно отсечь половину знаков справа.
 
Viktar Dzemikhau:
Ни одно не соответствует тому, которое я привёл. Есть похожее, но там без запятой и нужно отсечь половину знаков справа.

https://ru.wikipedia.org/wiki/Экспоненциальная_запись

 
Taras Slobodyanik:

https://ru.wikipedia.org/wiki/Экспоненциальная_запись

Так если умолчательное значение индикатора EMPTY_VALUE, каким боком оно становится другим на выходе? Ведь оно по логике может быть либо EMPTY_VALUE, либо значением цены торгового инструмента..
 

Значит что-то, где-то, инициализируется как LONG_MIN.

пс. проверьте на чистом коде, без дополнительных функций типа ND()

ппс. у меня, стандартный Фрактал, показывает пустые значения как DBL_MAX.

 

Во-первых, стандартные индикаторы не всегда совпадают с теми, что даны в исходном коде. Например, фракталы в исходном коде считаются по закрытым барам, а стандартные фракталы - нет. Поэтому стандартный индикатор запросто может заполнять значения не EMPTY_VALUE , а чем угодно.

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

Ну а если ничего не получится, сравнивайте значение с нулем. Фрактал не может быть отрицательным.

 
Sergey Savinkin:

Во-первых, стандартные индикаторы не всегда совпадают с теми, что даны в исходном коде. Например, фракталы в исходном коде считаются по закрытым барам, а стандартные фракталы - нет. Поэтому стандартный индикатор запросто может заполнять значения не EMPTY_VALUE , а чем угодно.

Странно. Разработчики специально это сделали, что бы запутать или не думали об этом вообще.. Я не обращал внимание на это т.к. не работал с фракталми раньше.


Sergey Savinkin:

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

Похоже, но не то.. Я уже убедился.


Sergey Savinkin:

Ну а если ничего не получится, сравнивайте значение с нулем. Фрактал не может быть отрицательным.

Логично. Но там другая ситуация. Да и хотелось сделать недвуяко и красиво. Я переоптимизировал функцию возвращающую значение индикатора (любого). Оказалось, что если нормализовывать любое значение, которое получено CopyBuffer, то с EMPTY_VALUE ситуация возникает именно такая,.. На выходе мы видим значение -9.223464270575145e+18. Я решил сделать там тернарный оператор. Что бы не раздувать код и вопрос снимается.