Задача найти среднее значение двух буферов.

 

Не даёт покоя, на первый взгляд, простая задача. Как найти среднее значение из двух буферов за период скажем 5 в цикле?

Имеем Буфер1 и Буфер2. Когда один буфер рисуются, то противоположный имеют значение  EMPTY_VALUE.

Есть ли короткое решение с минимальными затратами на ресурсы?

Может у кого есть оригинальные идеи?


 

Напр. так

в цикле

   if(A[j]==EMPTY_VALUE)   S[j]=S[j+1]+B[j]; 
   if(B[j]==EMPTY_VALUE)   S[j]=S[j+1]+A[j]; 
   


 Получаешь сумму в скользящем окне, а дальше делай с ней, что хошь -- дели, умножай, извлекай  ;)))

 
Uladzimir Izerski:

Не даёт покоя, на первый взгляд, простая задача. Как найти среднее значение из двух буферов за период скажем 5 в цикле?

Имеем Буфер1 и Буфер2. Когда один буфер рисуются, то противоположный имеют значение  EMPTY_VALUE.

Есть ли короткое решение с минимальными затратами на ресурсы?

Может у кого есть оригинальные идеи?

Так как EMPTY_VALUE это число и не маленькое число :), то используйте вместо EMPTY_VALUE значение "0.0". В таком случае при суммировании значений "0.0" не повлияет на среднее.

 
Vladimir Karputov:

Так как EMPTY_VALUE это число и не маленькое число :), то используйте вместо EMPTY_VALUE значение "0.0". В таком случае при суммировании значений "0.0" не повлияет на среднее.

NULL в этом случае тоже подойдет?

не могу никак сообразить почему EMPTY_VALUE возвращает максимальное число? для чего? (уже дошло, любое другое может быть значением индикатора)

кстати DBL_MAX жмем F1 и попадаем в справке на TranslateKey

 
Fast528:

NULL в этом случае тоже подойдет?

Если судить по документации

Константа

Описание

Значение

CHARTS_MAX

Максимально возможное количество одновременно открытых графиков в терминале

100

clrNONE

Отсутствие цвета

-1

EMPTY_VALUE

Пустое значение в индикаторном буфере

DBL_MAX

INVALID_HANDLE

Некорректный хэндл

-1

IS_DEBUG_MODE

Признак работы mq5-программы в режиме отладки

в режиме отладки не равно нулю, в противном случае 0

IS_PROFILE_MODE

Признак работы mq5-программы в режиме профилирования

в режиме профилирования не равно нулю, в противном случае 0

NULL

Ноль любого типа

0

WHOLE_ARRAY

Означает количество элементов, оставшееся до конца массива, то есть, будет обработан весь массив

-1

WRONG_VALUE

Константа может неявно приводиться к типу любого перечисления.

-1

то подойдёт.

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

 
Когда имеешь дело с двумя буферами  то EMPTY_VALUE и 0 могут иметь разное значение. 
 
Uladzimir Izerski:
Когда имеешь дело с двумя индикаторами  то EMPTY_VALUE и 0 могут иметь разное значение. 

у цветного буфера 0 рабочее значение

 
Uladzimir Izerski:
Когда имеешь дело с двумя индикаторами  то EMPTY_VALUE и 0 могут иметь разное значение. 

Это и так два разных числа. 

EMPTY_VALUE -> DBL_MAX -> 1.7976931348623158e+308

А ноль он и в Африке ноль.

 
Fast528:

у цветного буфера 0 рабочее значение

Да рабочее. Может быть положительным, отрицательным и 0 тоже. Исправил на буфера. Недосыпание))

 
Vladimir Karputov:

Это и так два разных числа. 

EMPTY_VALUE -> DBL_MAX -> 1.7976931348623158e+308

А ноль он и в Африке ноль.

Правильно. Поэтому 0 не подходит.

 

Кто может подсказать как проще найти ровную прямую у индикатора в течение 1-3 дня на H1 к примеру найти уровень индикатора когда он не менялся к примеру 5 баров?



Причина обращения: