Проблема передачи данных из индикатора в эксперт - страница 3

 
Vladimir Karputov:

Каша в голове у Вас. Всё копируется и передаётся корректно. Никто никуда ничего не "передвигает". Происходит операция КОПИРОВАНИЯ значений индикатора с соответствующих баров.

Сейчас дам код, который выводит три значения из массива:

Теперь можно отслеживать ПЕРЕДАННЫЕ значения с трёх баров:


 Спасибо за код! Вот я его и посмотрел. Классно видно, что происходит!

При появлении нового бара, появляется новый "нулевой" элемент массива, при этом "старый"  "нулевой" элемент не сдвигается! А пропадает! И на его место встает копия "нового" элемента!, т.е получается, что st_RSI_Fast_Val[1] содержит не данные предыдущего st_RSI_Fast_Val[0], а копию НОВОГО st_RSI_Fast_Val[0].

 
Oldman_Evgeny:

 Спасибо за код! Вот я его и посмотрел. Классно видно, что происходит!

При появлении нового бара, появляется новый "нулевой" элемент массива, при этом "старый"  "нулевой" элемент не сдвигается! А пропадает! И на его место встает копия "нового" элемента!, т.е получается, что st_RSI_Fast_Val[1] содержит не данные предыдущего st_RSI_Fast_Val[0], а копию НОВОГО st_RSI_Fast_Val[0].

Снова каша. В общем смотрите на мой пример. Помните, что в индикаторе Нулевой бар может перерисовываться. 


 
Vladimir Karputov:
Снова каша. В общем смотрите на мой пример. Помните, что в индикаторе Нулевой бар может перерисовываться. 


Плюнул на всё! Поставил правку получаемого массива в эксперте. Теперь всё показывает и отрабатывает, как положено!

Но что происходит с этими перескоками в массиве, так и не понял.

Думаю, что-то в индикаторе не так.

Ну, не может эксперт менять получаемый массив, но что там в индикаторе происходит, черт его знает, хотя, вроде, всё в нем очевидно ....

Тяжко осваивать ООП в 65 годков! Ну, да, какие наши годы!)))))

Спасибо за помощь! Вы мне реально очень помогли!
 
Vladimir Karputov:

Никто никому не должен. А тем более хранить :)

Я показал пример в посте 12 - все данные правильно получаются из индикатора. 

Вероятно Вы что-то неверно понимаете в работе с массивами. Как только Вы скопировали три значения, Вы фактически стёрли всё, что было до этого в массиве и заменили это новыми значениями. То есть в любой момент времени после копирования трёх значений индикатора массив (в который произведено копирование) содержит данные ТРЁХ ПОСЛЕДНИХ баров: бара #0, бара #1 и бара #2.

Вот Ваш код:

Вы копируете от бара #0 три значения.

Кстати сразу ошибка - раз копируете три значения, то и результат нужно сравнивать с числом "3" - а вдруг скопировался всего один результат или только два???

Кстати, как можно избегать ошибки копирования в данном случае? Делать несколько по попыток через while пока copybuffer не вернёт значение три? 
 
Alexander Fedosov:
Кстати, как можно избегать ошибки копирования в данном случае? Делать несколько по попыток через while пока copybuffer не вернёт значение три? 

Лично я категорически против различных тормозов процесса вроде while, sleep ... Я делаю так: ошибка копирования произошла - значит выход и ждём нового тика. На новом тике снова делаем запрос.