Скачать MetaTrader 5

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

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

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

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

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


 

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

Sergey
389
Sergey  

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

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

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

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

Rashid Umarov
Админ
12665
Rashid Umarov  

tmp1204:

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

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

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

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

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

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


Sergey
389
Sergey  

Спасибо за поддержку. Использование "сложных" динамических массивов в индикаторе без привязки к 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
Rashid Umarov
Админ
12665
Rashid Umarov  
tmp1204:

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

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

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

1) Влияет

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

Sergey
389
Sergey  
"Если указано 20, значит 20" - или не более 20?
Slava
Модератор
7008
Slava  
tmp1204:
"Если указано 20, значит 20" - или не более 20?
20.
Sergey
389
Sergey  

Из хелпа: 

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

Параметры

index

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

.....

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

 

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