Как сохранить ссылку или указатель на массив, полученный в OnCalculate() ? Что сейчас предлагают разработчики ? - страница 2

 
George Merts:

Не, гляди

Понимаю, о чем речь. Это касается же не только индикаторов, что нет указателей на массивы.

Просто не раздражает пока делать копи-пасту, поэтому не заморачиваюсь с этим.

 
fxsaber:
 

Просто не раздражает пока делать копи-пасту, поэтому не заморачиваюсь с этим.

Меня удручает не написание кода - все это делается одной библиотечной функцией, и дальше - одна строка - и все отлично копируется.

Но вот лишнее копирование всех ценовых данных при каждом тике (а тики иногда идут очень даже часто) - это не есть хорошо.

Сейчас попробовал создавать глобальный индикаторный массив - и подставлять его в функцию OnCalculate() - не выходит. Хотя названия одни и те же, во-первых, выходит варнинг, что одна переменная скрывает другую, а во время работы - пока мы находимся в функции OnCalculate() - виден правильный ценовой массив, а как только уходим в функцию, в которой происходит обращение к этому глобальному массиву - сразу видно, что этот массив совсем другой, в нем никаких данных нет...

Грустно. Продолжаю изыскания...

 
Не делаю копирований, т.к. совсем не удручает тянуть хвосты через копи-пасту. Ну, может, не очень красиво выглядит, но уж точно работает без лишних тормозов.
 
fxsaber:
Не делаю копирований, т.к. совсем не удручает тянуть хвосты через копи-пасту. Ну, может, не очень красиво выглядит, но уж точно работает без лишних тормозов.

Да, я сам так поступаю, когда индикатор в одном файле помещается. С простыми индикаторами - работает "на ура".

А с библиотечными классами как быть ? Я сейчас копирую в отдельный буффер. И уже указатель на него - передаю дальше в библиотечные классы.

Сейчас поискал - нашел решение проблем через вызов функции ДЛЛ. Но во-первых, в пакете 32-разрядная ДЛЛ, а нужна 64-разрядная (то есть, ее еще компилировать надо, а у меня MSVC не стоит), а во-вторых - мне ужасно не нравится вариант, в котором надо использовать какие-то ДЛЛки...

 
George Merts:

А с библиотечными классами как быть ?

Не увидел проблемы. Тянуть хвосты ничего не мешает в любые библиотеки.
 
fxsaber:
Не увидел проблемы. Тянуть хвосты ничего не мешает в любые библиотеки.

Твою позицию я понимаю, и для коротких индикаторов - проблемы, действительно, нет.  

Но вот для больших кусков кода, на мой взгляд, "тянуть хвосты" - это явная проблема. Код теряет краткость, лаконичность и прозрачность. И нарушается принцип инкапсуляции, скажем, если на каком-то уровне функции "не положено знать" о ценовых данных - в нее и не следует передавать ценовые таймсерии. А если "тянуть хвосты" - то приходится, потому, что в ней может использоваться другая функция, которой уже эта информация нужна.

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

 
Сделайте тогда, как в MT4 - High[Pos], Open[Pos] и т.д.