Количество индикаторных буферов

 

Возможно, я что-то путаю, но раньше в MT4 было ограничение на колическво индикаторных буферов - до 8. 

Сейчас попробовала добавить 9-ый, все работает.

Подскажите, пожалуйста, кто в курсе, как давно сняли ограничение 8, и какое ограничение сейчас?

 

искал в прошлом году, тоже не нашел

создал в мастере индикатор и изменил

#property indicator_buffers 1150
#property indicator_plots   1150

при компиляции индикатора дает ошибку:

invalid property value, positive integer up to 512 expected tst.mq4 11 29

invalid property value, positive integer up to 512 expected tst.mq4 12 29

значит 512


UPD: теперь поиском про 512 буферов все нашлось  https://docs.mql4.com/ru/customind/indicatorbuffers:


Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Вопросы от начинающих MQL4 MT4 MetaTrader 4

Slava, 2016.11.12 15:17

Информация про 8 буферов устарела

В новом MQL4 можно установить до 512 буферов.

Чтобы разобраться, смотрите исходники индикаторов в папке MQL4\Indicators\Examples. И читайте документацию


 
Igor Makanu:

искал в прошлом году, тоже не нашел

создал в мастере индикатор и изменил

при компиляции индикатора дает ошибку:

значит 512


UPD: теперь поиском про 512 буферов все нашлось  https://docs.mql4.com/ru/customind/indicatorbuffers:



Спасибо. 

Меня смущает, что в документации по ссылке только про расчетные буферы (их и раньше вроде было можно больше 8 использовать)

А вот, для рисования линий до сих пор в документации написано от 0 до 7

https://docs.mql4.com/ru/customind/setindexlabel

Хотя на практике вроде все рисует и больше 8
SetIndexLabel - Пользовательские индикаторы - Справочник MQL4
SetIndexLabel - Пользовательские индикаторы - Справочник MQL4
  • docs.mql4.com
SetIndexLabel - Пользовательские индикаторы - Справочник MQL4
 

протестировать нужно, по моему не сложно вывести штук сто буферов в подокно с шагом в _Point, чтобы не считать крайние буфера закрасить другим цветом

и в окне данных тоже посмотреть что пишет терминал 

 
Да, нужно будет проверить тщательнее
 

512

//+------------------------------------------------------------------+
#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
#property indicator_buffers 512
#property indicator_chart_window
input int MA_Count = 100;
class MyMA
{
private:
   const int         _period;
   double            Buffer[];
public:
                     MyMA(const int cnt)
      :              _period(cnt + 1)
   {
      SetIndexBuffer(cnt, Buffer, INDICATOR_DATA);
      color c = (color)((rand() << 16) | (rand() + rand()));
      SetIndexStyle(cnt, DRAW_LINE, STYLE_SOLID, 1, c);
      SetIndexLabel(cnt, "MA_" + (string)(cnt + 1));
   }
   void              OnCalculate(const int limit)
   {
      for(int i = limit; i >= 0; i--)
      {
         Buffer[i] = iMA(NULL, 0, _period, 0, 0, 0, i);
      }
   }
}*MA[];
//+------------------------------------------------------------------+
int OnInit()
{
   srand(GetTickCount());
   IndicatorBuffers(MA_Count);
   ArrayResize(MA, MA_Count);
   for(int i = ArraySize(MA) - 1; i >= 0; i--)
   {
      MA[i] = new MyMA(i);
   }
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   for(int i = ArraySize(MA) - 1; i >= 0; i--)
   {
      delete MA[i];
   }
}
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   int limit = prev_calculated == 0 ? rates_total - 1 : rates_total - prev_calculated;
   for(int i = ArraySize(MA) - 1; i >= 0; i--)
   {
      MA[i].OnCalculate(limit);
   }
   return(rates_total);
}
//+------------------------------------------------------------------+


 

Красота какая ) Спасибо!

Похоже, что разработчики MQL просто не обновляют документацию.

 
Только если буферы будут разные - линии/гистограммы/стрелки/расчетные, то возможны баги.
Нужно будет подбирать правильную последовательность массивов, иначе, на чарте, могут не отображаться некоторые из них.
 
Taras Slobodyanik:
Только если буферы будут разные - линии/гистограммы/стрелки/расчетные, то возможны баги.
Нужно будет подбирать правильную последовательность массивов, иначе, на чарте, могут не отображаться некоторые из них.Ноесли просто

Понятно, спасибо.

А если просто линии - штук 20 и 2-4 буфера со стрелками, то проблем не будет ведь?

И что значит "правильная последовательность массивов"?

 
Elena Baranova:

И что значит "правильная последовательность массивов"?

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

 
Ihor Herasko:

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

Спасибо, учту.