Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Ведешь свой блог? Размести в нем ссылку на MQL5.community и заработай!
Artyom Kuraev
664
Artyom Kuraev 2015.12.28 11:09 

Добрый день!

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

Пытаюсь задать через

#property indicator_buffers 4 // число буферов для расчета индикатора
#property indicator_plots   1 // графические серии

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


И вопрос вдогонку, который давно меня мучает: как можно организовать встраивание индикатора в советник не через iCustom так, чтобы все расчеты были внутри советника, и при этом чтобы глубина истории показаний индикатора была не ограничена, а появление нового бара не сопровождалось циклом по buf[i+1]=buf[i]?

Alexey Viktorov
5181
Alexey Viktorov 2015.12.28 11:54  
Посмотри документацию на mql5 Тип данных, хранящихся в индикаторном массиве. В документации mql4 этого не написано, но работает, за исключением INDICATOR_COLOR_INDEX.
Artyom Kuraev
664
Artyom Kuraev 2015.12.28 12:04  
AlexeyVik:
  В документации mql4 этого не написано, но работает, за исключением INDICATOR_COLOR_INDEX.

Стандартная функция SetIndexBuffer используется в индикаторах, и приведенный код в качестве примера - тоже от индикатора. Хочешь сказать, что в экспертах функция SetIndexBuffer тоже работает?


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

Василий Пушкарев
128
Василий Пушкарев 2015.12.28 13:38  
delfik71091:

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

Вы имеете ввиду вкладку "Цвета", чтобы они там не отбражались?
Artyom Kuraev
664
Artyom Kuraev 2015.12.28 14:58  
pu6ka:
Вы имеете ввиду вкладку "Цвета", чтобы они там не отбражались?
Да, именно так. Потому что эти буферы должны хранить информацию, необходимую для внутреннего расчета, но также нужно, чтобы не было возможности увидеть эти значения при скомпилированном индюке.
Василий Пушкарев
128
Василий Пушкарев 2015.12.28 15:55  
delfik71091:
Да, именно так. Потому что эти буферы должны хранить информацию, необходимую для внутреннего расчета, но также нужно, чтобы не было возможности увидеть эти значения при скомпилированном индюке.
Посмотрите функцию IndicatorBuffers(). Скрыть со вкладки она даст. Но думаю, "прозвонить" буфера в скомпилированном состоянии все равно можно будет. Чтобы совсем скрыть, похоже, нужно задать динамические массивы и не связывая их с помощью SetIndexBuffer(), самому с помощью rates_total и prev_calculated отслеживать и динамически увеличивать размер.
Mislaid
557
Mislaid 2015.12.28 21:58  
delfik71091:

Добрый день!

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

Пытаюсь задать через

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


И вопрос вдогонку, который давно меня мучает: как можно организовать встраивание индикатора в советник не через iCustom так, чтобы все расчеты были внутри советника, и при этом чтобы глубина истории показаний индикатора была не ограничена, а появление нового бара не сопровождалось циклом по buf[i+1]=buf[i]?

#property indicator_buffers 4 // число отображаемых буферов индикатора

Число буферов, используемых для вычисления индикатора, может быть изменено функцией IndicatorBuffers(). Прочитайте сначала справку к этой функции.

Когда будете читать справку к функции SetIndexBuffer() критично отнеситесь к следующему фрагменту:

Параметры

index

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

Следует читать так:

Параметры

index

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

Насчет вопроса вдогонку. Ничего сложного нет. Нужно научиться пользоваться функциями для двухмерных массивов ArraySort(), ArrayBsearch(). И. ArrayResize() использовать не по-жлобски. Resize - так масштабно.

Но, я сам давно так не делаю. Индикаторы пишут  в файлы. Советники читают.

Artyom Kuraev
664
Artyom Kuraev 2015.12.29 18:04  
Mislaid:

Число буферов, используемых для вычисления индикатора, может быть изменено функцией IndicatorBuffers(). Прочитайте сначала справку к этой функции.

Спасибо за информацию! С первым вопросом разобрался, оказалось все доступно и легко! Единственным вопросом осталось отличие indicator_buffers от indicator_plots - мне кажется, или indicator_plots в mql4 не функционирует так, как это описано в справке mql5?

А вот со вторым еще буду ковыряться (чтобы в принципе понять необходимость таких действий).

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