Как упростить и ускорить доступ к данным гистограммы?

 

Есть пользовательский индикатор в виде гистограммы. В документации MQL описана функция iCustom() для взятия значиния из выбранного буфера, используемого в этом индикаторе. В индикаторе 10 входных параметров. И каждый вызов функции системе приходится обрабатывать все эти параметры, а это уже накладно. А мне нужно к тому же каждый тик запускать проход по этому массиву значений. К тому же индикаторов несколько.

Вопрос: есть ли способ обратиться напрямую к массиву с значениями гистограммы, типа как myIndicatorBuffer_0[5]?

 
vipermagi:

Есть пользовательский индикатор в виде гистограммы. В документации MQL описана функция iCustom() для взятия значиния из выбранного буфера, используемого в этом индикаторе. В индикаторе 10 входных параметров. И каждый вызов функции системе приходится обрабатывать все эти параметры, а это уже накладно. А мне нужно к тому же каждый тик запускать проход по этому массиву значений. К тому же индикаторов несколько.

Вопрос: есть ли способ обратиться напрямую к массиву с значениями гистограммы, типа как myIndicatorBuffer_0[5]?

Читайте внимательно справку по iCustom().
Вы создаёте хэндл. Далее копируете нужное количество данных в массив, и уже из него получаете значения.
 
vipermagi:

Есть пользовательский индикатор в виде гистограммы. В документации MQL описана функция iCustom() для взятия значиния из выбранного буфера, используемого в этом индикаторе. В индикаторе 10 входных параметров. И каждый вызов функции системе приходится обрабатывать все эти параметры, а это уже накладно. А мне нужно к тому же каждый тик запускать проход по этому массиву значений. К тому же индикаторов несколько.

Не видя кода трудно что-то сказать. И скорее всего дело даже не в том что у индикатора 10 входных параметров. Возможно здесь надо смотреть в сторону оптимизации кода индикатора..

vipermagi:

Вопрос: есть ли способ обратиться напрямую к массиву с значениями гистограммы, типа как myIndicatorBuffer_0[5]?

если массив объявлен в другой программе, то нет.

 
Artyom Trishkin:
Вы создаёте хэндл. Далее копируете нужное количество данных в массив, и уже из него получаете значения.

Вы о пятерке речь ведёте?

 
Sergey Kolemanov:

Вы о пятерке речь ведёте?

Да
 
Artyom Trishkin:
Да

Просто тема находится в ветке MQL4. 

 
Artyom Trishkin:
Да

Только не начинай говорить о старости терминала и не начинай навязывать переход через Альпы не примите за рекламу, я имел ввиду горы:)))))))))))

 
Artyom Trishkin:
Читайте внимательно справку по iCustom().
Вы создаёте хэндл. Далее копируете нужное количество данных в массив, и уже из него получаете значения.

Вот и почитайте сами справку к iCustom() для MQL4. Ни каких хэндлов нет. В параметрах функции есть shift, то есть номер элемента в массиве, из которого достаётся единственное значение double. Хэндл в каких-то других функциях есть. Опять таки, идёт копирование значений, это раз. Во-вторых: я читаю и вижу, что это функции для копирования только данных графика цены, а про копирования из буферов индикаторов я там не вижу.


А мне тупо нужен указатель на буфер индикатора. Как-то так.


PS: раздел, в котором я создал данную тему называется MQL4 и MetaTrader 4.

 
А что мешает создать массив и в него записать нужное количество, один раз, а потом переписывать только значения нулевого бара. При появлении нового бара копировать массив сам в себя со сдвигом на одну ячейку и значения нулевого бара продолжать писать в тот-же нулевой индекс массива.
 
Alexey Viktorov:
А что мешает создать массив и в него записать нужное количество, один раз, а потом переписывать только значения нулевого бара. При появлении нового бара копировать массив сам в себя со сдвигом на одну ячейку и значения нулевого бара продолжать писать в тот-же нулевой индекс массива.

Ключевая фраза "копировать". Зачем копировать, когда можно не копировать? Зачем лишние вычисления? Вот я обращаюсь к Volume[] или Time[] ни чего не копируя.


С точки зрения языка могла бы быть функция, возвращающая указатель на массив, а я бы к нему приделывал скобочки с цыферькой внутри и дело бы пошло.


А так у меня есть библиотечка mql4-lib и у ней есть Vector.

 
vipermagi:

Ключевая фраза "копировать". Зачем копировать, когда можно не копировать? Зачем лишние вычисления? Вот я обращаюсь к Volume[] или Time[] ни чего не копируя.


С точки зрения языка могла бы быть функция, возвращающая указатель на массив, а я бы к нему приделывал скобочки с цыферькой внутри и дело бы пошло.

  1. Функция копирования массива на много менее затратна чем iCustom и никаких лишних вычислений.
  2. Я не зря просил Артёма не советовать переход... Я сам посоветую ПЕРЕХОДИТЕ на MQL5 и будет вам счастье.
Причина обращения: