Не подходит массив-таймсерия для реализации задачи

 

Я, конечно, могу ошибаться, но у меня возникла чутка не совсем понятная мне ситуация. Есть свой зиг-заг, который имеет 2 буфера. Один из которых буфер есс-но цен экстремумов. Так вот. По-скольку это буфер, то его размер будет равен количеству баров на просчитываемом графике. Но вот здесь и возникает интересный момент.

Ведь если экстремумы зиг-зага располагаются, скажем так, на 1, 5, 8 и.. и др. индексах, то мне нужно всего эти 3 индекса и наш массив цен т.е. буфер цен будет имет это 3 полезные и нужные для работы индекса. А остальные индексы баров т.е. 0, 2, 3, 4, 6 и 7 не нужны, хотя обычно они тоже имется в буфере, с той лишь разницей, что они имеют пустое значение EMPTY_VALUE.

Возник вопрос. А можно это как-то обойти и использовать массив тоже с полезными значениями без пустых? Это я написал для одного примера, но таких примеров бывает больше.

Если бы на яве писал я, то там можно работать с динамическими массивами, теми же, эррэйлистами и тд, а как здесь это сделать, да ещё и в индикаторе я как-то сразу не решил..

 
hoz:

Я, конечно, могу ошибаться, но у меня возникла чутка не совсем понятная мне ситуация. Есть свой зиг-заг, который имеет 2 буфера. Один из которых буфер есс-но цен экстремумов. Так вот. По-скольку это буфер, то его размер будет равен количеству баров на просчитываемом графике. Но вот здесь и возникает интересный момент.

Ведь если экстремумы зиг-зага располагаются, скажем так, на 1, 5, 8 и.. и др. индексах, то мне нужно всего эти 3 индекса и наш массив цен т.е. буфер цен будет имет это 3 полезные и нужные для работы индекса. А остальные индексы баров т.е. 0, 2, 3, 4, 6 и 7 не нужны, хотя обычно они тоже имется в буфере, с той лишь разницей, что они имеют пустое значение EMPTY_VALUE.

Возник вопрос. А можно это как-то обойти и использовать массив тоже с полезными значениями без пустых? Это я написал для одного примера, но таких примеров бывает больше.

Если бы на яве писал я, то там можно работать с динамическими массивами, теми же, эррэйлистами и тд, а как здесь это сделать, да ещё и в индикаторе я как-то сразу не решил..

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

 
Artyom Trishkin:

...и, кстати, это никак не будет способствовать скорости просчётов индикатора.

ну, для зигзага, (если идет постоянная проверка многих вершин) создание своего массива, значительно увеличит скорость.
Или, если нужно перебирать несколько зигзагов/инструментов...

 

Пустых не будет, будет не красиво, т.к. исчезнет синхронизация зиг-зага с графиком цены

Однако все возможно

Вы пишете на яве, значит и MQL тоже подчинится

Вот, почитайте:

https://www.mql5.com/ru/docs/array

Как вариант - нарисовать отрезки по заполненным точкам в индикаторе, и записать в буферы индикатора полученные на всех барах значения с этих отрезков

Документация по MQL5: Операции с массивами
Документация по MQL5: Операции с массивами
  • www.mql5.com
Операции с массивами - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Renat Akhtyamov:

Пустых не будет, будет не красиво, т.к. исчезнет синхронизация зиг-зага с графиком цены

Не исчезнет. Есть нюансы анализа рынка. Скажем так, для кого как. Кому-то эта синхранизация нужна, кому-то нет.. Как по мне, если работать в обычном режиме, потом приходится лопатить все непустые значения задав счётчик экстремума для поиска. Это как-бы не удобно лично мне.


Renat Akhtyamov:

Вы пишете на яве, значит и MQL тоже подчинится

Вот, почитайте:

https://www.mql5.com/ru/docs/array

Как вариант - нарисовать отрезки по заполненным точкам в индикаторе, и записать в буферы индикатора полученные на всех барах значения с этих отрезков

Я так понимаю, создам динамический массив и в процессе, когда добавляю элемент буду инкрементировать на 1 его размер функцией ArrayResize. Просто я думал чутка дальше. Вот в мкл4 и в 5-ке, вроде бы тоже, нет функции удаления элемента массива. Я так понимаю, это делается уменьшением на 1 размера массива? Но такой трюк прокатить только если это крайний элемент, а если не крайний - то не прокатит...

 
hoz:

Я так понимаю, создам динамический массив и в процессе, когда добавляю элемент буду инкрементировать на 1 его размер функцией ArrayResize. Просто я думал чутка дальше. Вот в мкл4 и в 5-ке, вроде бы тоже, нет функции удаления элемента массива. Я так понимаю, это делается уменьшением на 1 размера массива? Но такой трюк прокатить только если это крайний элемент, а если не крайний - то не прокатит...

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

 
hoz:

Я так понимаю, создам динамический массив и в процессе, когда добавляю элемент буду инкрементировать на 1 его размер функцией ArrayResize. Просто я думал чутка дальше. Вот в мкл4 и в 5-ке, вроде бы тоже, нет функции удаления элемента массива. Я так понимаю, это делается уменьшением на 1 размера массива? Но такой трюк прокатить только если это крайний элемент, а если не крайний - то не прокатит...

Еще можно воспользоваться классами CArrayInt, CArrayDouble и т.д. Там уже реализована вставка и удаление элементов.

 
hoz:

Не исчезнет. Есть нюансы анализа рынка. Скажем так, для кого как. Кому-то эта синхранизация нужна, кому-то нет.. Как по мне, если работать в обычном режиме, потом приходится лопатить все непустые значения задав счётчик экстремума для поиска. Это как-бы не удобно лично мне.


Я так понимаю, создам динамический массив и в процессе, когда добавляю элемент буду инкрементировать на 1 его размер функцией ArrayResize. Просто я думал чутка дальше. Вот в мкл4 и в 5-ке, вроде бы тоже, нет функции удаления элемента массива. Я так понимаю, это делается уменьшением на 1 размера массива? Но такой трюк прокатить только если это крайний элемент, а если не крайний - то не прокатит...

уже готовый массив индикатора можно заполнить конкретными значениями

две точки в индикаторе у Вас же есть, правда?

построить линию и переписать с неё значения в буфер индикатора

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