Массивы данных в индикаторе

 

Всем доброго времени.  В индикаторе есть "#property indicator_buffers 1     #property indicator_plots   1".

Можно ли  в качестве расчетных буферов использовать массивы структур (классов), содержащие внутри себя  дополнительные массивы данных? Похоже у меня из-за этого возникли заморочки.

Заранее благодарю. 


 

Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
  • www.mql5.com
Основы языка / Препроцессор / Свойства программ (#property) - Документация по MQL5
 
В принципе, можно. Но лучше Вам выложить код, чтобы можно было сказать точнее по данному случаю.

 

Код слишком "запутанный" и возможно пока очень не рациональный. Постараюсь более подробно изложить ситуацию.

В индикатор подаются исходные данные (несколько валютных пар) , их количество не постоянное. Сразу возникает вопрос возможно ли иметь переменное число обрисовываемых буферов (массивов) (согласно "#property indicator_plots" не возможно) ? При вычисление результатов используются динамические массивы классов, содержащие динамические массивы структур. Вопрос: что делать с "#property indicator_buffers", и для чего вообще нужен тип "INDICATOR_CALCULATIONS"? Для чего нужно указывать сколько буферов (массивов) используются именно в промежуточных вычислениях?

Заранее благодарю. 

p.s. Опыт написания нескольких десятков индикаторов на мт4 и мт5, имеется.

 

tmp1204:

и для чего вообще нужен тип "INDICATOR_CALCULATIONS"?

Этот тип нужен для организации автоматического выделения памяти под служебные буфера, которые не требуется отображать на графике. Вы можете использовать вместо него простые индикаторы, чтобы оценить насколько это полезно. Смотрите также статью Как написать индикатор в MQL5
 

Тогда почему при написании эксперта не указываем количество используемых массивов? Почему в эксперте не нужно в индикаторе нужно "бронировать" память, как тогда быть с динамическими массивами?

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
tmp1204:

Тогда почему при написании эксперта не указываем количество используемых массивов?

Потому что советники не являются индикаторами. У каждого типа mql5-программ свое основное предназначение. Читайте Документацию, пожалуйста.


 

Спасибо за поддержку. Использование "сложных" динамических массивов в индикаторе без привязки к SetIndexBuffer INDICATOR_DATA срабатывает вполне корректно. Но иногда приходится использовать INDICATOR_DATA.

Вопрос. На INDICATOR_DATы устанавливаю неопределенное количество (в зависимости оп входных параметров) массивов. В #property indicator_buffers 20 и #property #property indicator_plots 10 задаю значения с "запасом". Влияет ли как-то этот "запас" на ресурсные требования, или может есть какие варианты не "жесткого" определения  #property indicator_buffers?

Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
  • www.mql5.com
Основы языка / Препроцессор / Свойства программ (#property) - Документация по MQL5
 
tmp1204:

Вопрос. На INDICATOR_DATы устанавливаю неопределенное количество (в зависимости оп входных параметров) массивов. В #property indicator_buffers 20 и #property #property indicator_plots 10 задаю значения с "запасом".

1) Влияет ли как-то этот "запас" на ресурсные требования, или

2) может есть какие варианты не "жесткого" определения  #property indicator_buffers?

1) Влияет

2) Определения только жёсткие. Если указано 20, значит 20. Выяснить программным путем количество прописанных буферов нельзя, как и изменить динамически.

 
"Если указано 20, значит 20" - или не более 20?
 
tmp1204:
"Если указано 20, значит 20" - или не более 20?
20.
 

Из хелпа: 

bool  SetIndexBuffer(
   int                    index,         // индекс буфера
   double                 buffer[],      // массив
   ENUM_INDEXBUFFER_TYPE  data_type      // что будем хранить
   );

Параметры

index

[in]  Номер индикаторного буфера. Нумерация начинается с 0. Номер должен быть меньше значения, объявленного в #property indicator_buffers.

.....

т.е. делаем выводы, что "меньше или равно" а не строго равно (я это использую), и вопрос: чем чреват избыток в #property indicator_buffers?

 

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