Скачать MetaTrader 5

Индикаторные буферы. мт4

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Alexey Oreshkin
4462
Alexey Oreshkin  
На момент запуска индикатора я не знаю сколько мне нужно будет буферов для рисования. Их количество будет зависеть от введённых настроек. Каким то образом данный вопрос решается динамически ? или нужно описывать все возможные 8 буферов и использовать только то количество которое нужно.
Artyom Trishkin
Модератор
77640
Artyom Trishkin  
Alexey Oreshkin:
На момент запуска индикатора я не знаю сколько мне нужно будет буферов для рисования. Их количество будет зависеть от введённых настроек. Каким то образом данный вопрос решается динамически ? или нужно описывать все возможные 8 буферов и использовать только то количество которое нужно.
В неиспользуемые на данный момент буферы вписывайте EMPTY_VALUE, ну или какое там у вас задано "пустое" значение в индикаторе ... Но быть они должны все.
Alexey Oreshkin
4462
Alexey Oreshkin  
Artyom Trishkin:
В неиспользуемые на данный момент буферы вписывайте EMPTY_VALUE, ну или какое там у вас задано "пустое" значение в индикаторе ... Но быть они должны все.
Так то понятно. Думал можно по красивому сделать. Хорошо. Значит оставлю как есть. Спасибо за ответ.
Artyom Trishkin
Модератор
77640
Artyom Trishkin  
Alexey Oreshkin:
Так то понятно. Думал можно по красивому сделать. Хорошо. Значит оставлю как есть. Спасибо за ответ.
Не за что ...
Igor Korepin
3154
Igor Korepin  
Alexey Oreshkin:
На момент запуска индикатора я не знаю сколько мне нужно будет буферов для рисования. Их количество будет зависеть от введённых настроек. Каким то образом данный вопрос решается динамически ? или нужно описывать все возможные 8 буферов и использовать только то количество которое нужно.

Если индикаторный буфер не будет использоваться, то его можно и не объявлять. Теперь в МТ4 нет ограничения на 8 индикаторных буферов, можно и больше задействовать. Даже рисовать можно больше восьми.

for(i=0;i<9;i++) if(Show[i])
     {
      switch(i)
        {
         case 0: {SetIndexBuffer(0,Buffer0); SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,Width,c0);} break;
         case 1: {SetIndexBuffer(1,Buffer1); SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,Width,c1);} break;
         case 2: {SetIndexBuffer(2,Buffer2); SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,Width,c2);} break;
         case 3: {SetIndexBuffer(3,Buffer3); SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,Width,c3);} break;
         case 4: {SetIndexBuffer(4,Buffer4); SetIndexStyle(4,DRAW_LINE,STYLE_SOLID,Width,c4);} break;
         case 5: {SetIndexBuffer(5,Buffer5); SetIndexStyle(5,DRAW_LINE,STYLE_SOLID,Width,c5);} break;
         case 6: {SetIndexBuffer(6,Buffer6); SetIndexStyle(6,DRAW_LINE,STYLE_SOLID,Width,c6);} break;
         case 7: {SetIndexBuffer(7,Buffer7); SetIndexStyle(7,DRAW_LINE,STYLE_SOLID,Width,c7);} break;
         case 8: {SetIndexBuffer(8,Buffer8); SetIndexStyle(8,DRAW_LINE,STYLE_SOLID,Width,c8);}
        }
      SetIndexLabel(i,Label[i]);
     } else SetIndexLabel(i,"");
Alexey Oreshkin
4462
Alexey Oreshkin  
Igor Korepin:

Если индикаторный буфер не будет использоваться, то его можно и не объявлять. Теперь в МТ4 нет ограничения на 8 индикаторных буферов, можно и больше задействовать. Даже рисовать можно больше восьми.

Больше 8 можно использовать для расчётов. Там их аж до 512. А для рисования каким образом больше 8 ? Если взять хелп, то мы видим следующее: (для примера взял SetIndexLabel): Порядковый номер линии. Должен быть от 0 до 7.

 

А по поводу объявить буферы, но не присваивать им стили рисования и остальные атрибуты...попробую, по логике идея здравая. 

Igor Korepin
3154
Igor Korepin  
Alexey Oreshkin:

А для рисования каким образом больше 8 ? Если взять хелп, то мы видим следующее: (для примера взял SetIndexLabel): Порядковый номер линии. Должен быть от 0 до 7.


Справка не актуальна местами или устарела. Мой индикатор может рисовать 9 линий.
Alexey Oreshkin
4462
Alexey Oreshkin  
Igor Korepin:
Справка не актуальна местами или устарела. Мой индикатор может рисовать 9 линий.

Круто! проверил и вот результат: 

13 буферов.
Разработчикам жирный минус в карму и плохое настроение пока не исправят справку ! 

 


Но динамически добавлять буферы, хотя бы только во время инициализации не получается. Если я к примеру в заголовке напишу #property indicator_buffers 10, то не важно что я делаю дальше, в окне данных всё равно будет 10 буферов. 

Igor Korepin
3154
Igor Korepin  
Alexey Oreshkin:

Но динамически добавлять буферы, хотя бы только во время инициализации не получается. Если я к примеру в заголовке напишу #property indicator_buffers 10, то не важно что я делаю дальше, в окне данных всё равно будет 10 буферов. 

Да, максимальное количество буферов для рисования линий указывается в заголовке. Превысить его уже нельзя. Меньше можно. Чтобы убрать из окна данных лишнее просто указываем пустое значение в функции SetIndexLabel(i,NULL);
Victor Nikolaev
Модератор
14666
Victor Nikolaev  
Igor Korepin:
Да, максимальное количество буферов для рисования линий указывается в заголовке. Превысить его уже нельзя. Меньше можно. Чтобы убрать из окна данных лишнее просто указываем пустое значение в функции SetIndexLabel(i,NULL);
Кроме тех буферов что рисуют, можно создавать буфера для промежуточных расчетов. И общее количество буферов может превышать количество указанное в заголовке
Alexander Voronkov
19310
Alexander Voronkov  
Alexey Oreshkin:

Разработчикам жирный минус в карму и плохое настроение пока не исправят справку ! 

Прежде чем нести чепуху будьте внимательней - для справки  IndicatorBuffers

IndicatorBuffers - Документация на MQL4
  • docs.mql4.com
IndicatorBuffers - Документация на MQL4
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий