Обсуждение статьи "Цветные буферы в мультисимвольных мультипериодных индикаторах"

 

Опубликована статья Цветные буферы в мультисимвольных мультипериодных индикаторах:

В статье пересмотрим структуру индикаторного буфера в мультисимвольных мультипериодных индикаторах и организуем вывод на график цветных буферов этих индикаторов.

Одноцветный индикаторный буфер является обычным double-массивом, который заполняется данными при просчёте индикатора. Данные из этого массива мы можем получить и отобразить на графике при помощи функции CopyBuffer() при условии, что приёмным массивом будет служить double-массив, назначенный как рисуемый индикаторный буфер (SetIndexBuffer()). При копировании данных из буфера расчётной части индикатора в буфер рисуемой части индикатора, данные отображаются на графике одним цветом, установленным для массива-буфера рисуемой части индикатора. С цветными же буферами дело обстоит немного иначе. У цветного буфера помимо массива данных есть ещё один массив — массив индексов цвета.

Исходя из вышеизложенного, понимаем, что

  1. Рисуемый индикаторный буфер может использовать для отрисовки один и более массивов в зависимости от стиля рисования.
  2. Для любого цветного массива используется ещё один дополнительный массив — массив индексов цвета рисуемого буфера, индекс которого на 1 больше индекса последнего массива, назначенного для рисуемого буфера.

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


Автор: Artyom Trishkin

 

Артем привет! А как добавить свой индикатор? У меня не получается! Я чего-то не то делаю наверно?! Если бы был пример... шаг за шагом по коду и понятно! А то он сразу!... ошибка создания индикатора... код возврата OnInit равен -1... В общим помоги, пожалуйста!

  MqlParam mql_params[];
   ArrayResize(mql_params, 2);

   mql_params[0].type          = TYPE_STRING;
   mql_params[0].string_value  = "My_Indicators\\INDI_MSMT\\Test";
//---
   mql_params[1].type          = TYPE_INT;
   mql_params[1].integer_value = 10;

   handle_ind2 = indicators.AddNewCustom(NULL, PERIOD_CURRENT, "My_Indicators\\INDI_MSMT\\Test.ex5", "DON_MFI_SIS", 1, mql_params);

//handle_ind1 = IndicatorCreate(NULL, PERIOD_CURRENT, IND_CUSTOM, 1, mql_params);

 
Igor Bakhrushen #:

Артем привет! А как добавить свой индикатор? У меня не получается! Я чего-то не то делаю наверно?! Если бы был пример... шаг за шагом по коду и понятно! А то он сразу!... ошибка создания индикатора... код возврата OnInit равен -1... В общим помоги, пожалуйста!


По картинке сложно понять, что Вы там делаете не то. Приложите, пожалуйста, код, который не работает, вместе с используемым пользовательским индикатором.
 
Artyom Trishkin #:
По картинке сложно понять, что Вы там делаете не то. Приложите, пожалуйста, код, который не работает, вместе с используемым пользовательским индикатором.

Ваша библиотека ни как не менялась просто скопировал... тест просто сделал для тестирования на одном буфере, не совсем понимаю как все это будет работать когда у тебя их 20! Ну в общем шаг за шагом!... спасибо!

Файлы:
INDI_MSMT_1.mqh  638 kb
Test.mq5  8 kb
DON_MFI_SIS.mq5  10 kb
 
Igor Bakhrushen #:

Ваша библиотека ни как не менялась просто скопировал... тест просто сделал для тестирования на одном буфере, не совсем понимаю как все это будет работать когда у тебя их 20! Ну в общем шаг за шагом!... спасибо!

Поглядел Ваши коды. А где рабочий пользовательский индикатор? Есть просто болванка с одним не цветным буфером. Скорее всего, Вам нужна эта статья: https://www.mql5.com/ru/articles/13578. В ней есть всё для работы с одноцветными пользовательскими индикаторами.

Готовим мультисимвольные мультипериодные индикаторы
Готовим мультисимвольные мультипериодные индикаторы
  • www.mql5.com
В статье рассмотрим принципы создания мультисимвольных мультипериодных индикаторов и получение от них данных в советниках и индикаторах. Рассмотрим основные нюансы использования мульти-индикаторов в советниках и индикаторах, и их отрисовку через буферы пользовательского индикатора.
 
Artyom Trishkin #:

Поглядел Ваши коды. А где рабочий пользовательский индикатор? Есть просто болванка с одним не цветным буфером. Скорее всего, Вам нужна эта статья: https://www.mql5.com/ru/articles/13578. В ней есть всё для работы с одноцветными пользовательскими индикаторами.

Артем привет! Спасибо, что глянул! С не цветными буферами заработало, но как то неуверенно... почему-то долго грузится... может воскресенье? История нужна? Терминал когда перезагружаешь сразу рисуется? На фото в рамке три буфера, имеют одинаковое значение, так не должно быть. Смещение на один бар, тоже в рамке. С цветными совсем беда...  Совсем нечего не грузится! Можешь посмотреть? Спасибо!


 
Пардон с буферами я напутал! я случайно тип изменил... а далее не привёл к нужному!Вот и прибавляем 0! Получаем то же самое!  часто выдает CIndMSTF::Calculate::Test_Indi_MSMT: CopyBuffer(0) failed. Error 4806 данные не может найти! причем это случается с разными буферами!

 
Igor Bakhrushen #:
Пардон с буферами я напутал! я случайно тип изменил... а далее не привёл к нужному!Вот и прибавляем 0! Получаем то же самое!  часто выдает CIndMSTF::Calculate::Test_Indi_MSMT: CopyBuffer(0) failed. Error 4806 данные не может найти! причем это случается с разными буферами!

Если данные не получены, то индикатор просто выходит из OnCalculate() с возвратом нулевого значения, что равносильно указанию, что он ещё не просчитан, и на следующем тике он опять будет пытаться получить данные. При этом первое обращение к требуемым, но не полученным данным, запускает процесс подкачки этих данных.

 
Artyom Trishkin #:

Если данные не получены, то индикатор просто выходит из OnCalculate() с возвратом нулевого значения, что равносильно указанию, что он ещё не просчитан, и на следующем тике он опять будет пытаться получить данные. При этом первое обращение к требуемым, но не полученным данным, запускает процесс подкачки этих данных.

Почему этой проблемы нет когда терминал перезагружаешь? Все моментом рисуется! Возникает при переходе  на другой тф... и иногда появляется вот это "array out of range in 'INDI_MSMT_!.mqh' (680,51)" всегда хватает размера, а иногда нет... для меня это загадка!


 
Igor Bakhrushen #:
INDI_MSMT_

У меня нет такого файла. Не знаю как тут помочь...

 
Artyom Trishkin #:

У меня нет такого файла. Не знаю как тут помочь...

Файлы:

  

Вчера прикреплял  'INDI_MSMT_!.mqh' самый первый...