Помогите пожалуйста

 
Не могу понять почему при наложении индикатора на график он ничего не показывает.
Файлы:
Lex_Bands.mq4  4 kb
 
Xander1603:
Не могу понять почему при наложении индикатора на график он ничего не показывает.

ошибку выдаёт - 2019.10.31 12:32:37.237 Lex_Bands USDCHF,H1: array out of range in 'Lex_Bands.mq4' (79,43)

Снимокмт4

что тут - наверное не правильно                  dOtklSumMax[j]=dOtklSumMax[j-1]+dOtklSumMax[j];

 
Aleksandr Klapatyuk:

ошибку выдаёт - 2019.10.31 12:32:37.237 Lex_Bands USDCHF,H1: array out of range in 'Lex_Bands.mq4' (79,43)


Вот вопрос почему? И кстати у меня он вообще не выдал никаких ошибок
 
Aleksandr Klapatyuk:

ошибку выдаёт - 2019.10.31 12:32:37.237 Lex_Bands USDCHF,H1: array out of range in 'Lex_Bands.mq4' (79,43)

что тут - наверное не правильно                  dOtklSumMax[j]=dOtklSumMax[j-1]+dOtklSumMax[j];

А если там не правильно, тогда как посчитать правильно сумму? Смысл в том, что должен получиться канал, верхняя его граница высчитывается как среднеквадратичное отклонение, которое считается не на каждом баре, а выбираются несколько максимумов из 5 баров, и из этих максимумов считается среднее квадратичное отклонение. Вот конкретно в этой строчке находим сумму этих отклонений
 
Xander1603:
А если там не правильно, тогда как посчитать правильно сумму?


Посмотрите размер массивов и посмотрите количество точек в цикле перебора.  И вставьте код нормально через форму, скачивать не охото.
 
Xander1603:
Вот вопрос почему?

удаляю где ошибки 

пока вот так получилось

Снимокмт41

а что он вообще должен показывать?

 
Aleksandr Klapatyuk:

удаляю где ошибки 

пока вот так получилось

а что он вообще должен показывать?

Вот то что получилось на картинке, это просто скользящая средняя типа sma, цена (low+high)/2 и периодом 20

А должен канал показать, где верхняя его граница высчитывается как эта средняя + среднеквадратичное отклонение, которое считается не на каждом баре, а выбирается максимум из 5 баров, на интервале в 20 баров, т.е. будет 4 максимума. и из этих максимумов считается среднее квадратичное отклонение. Вот конкретно в этой строчке находим сумму этих отклонений

Помогите пожалуйста
Помогите пожалуйста
  • 2019.10.31
  • www.mql5.com
Не могу понять почему при наложении индикатора на график он ничего не показывает...
 

вот теперь нет ошибок - можно с этого места продолжать 

//+------------------------------------------------------------------+
//|                                                    Lex_Bands.mq4 |
//|                                                              Lex |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Lex"
#property strict
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots   3
//--- plot Middle_Line
#property indicator_label1  "Middle_Line"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrLightSeaGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
//--- plot Up_Line
#property indicator_label2  "Up_Line"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrLightSeaGreen
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2
//--- plot Down_Line
#property indicator_label3  "Down_Line"
#property indicator_type3   DRAW_LINE
#property indicator_color3  clrLightSeaGreen
#property indicator_style3  STYLE_SOLID
#property indicator_width3  2
//--- indicator parameters
input int    InpBandsPeriod=20;       // MA Period
input int    OtklPeriod=20;           // Period Otkloneniya
input int    OtklShag=5;              // Shag Otkloneniya
input int    MA_Type=0;               // MA Type 0 - SMA, 1 - EMA, 2 - SMMA, 3 - LWMA
input int    Applied_Price=4;         // 0 - PRICE_CLOSE, 1 - PRICE_OPEN, 2 - PRICE_HIGH, 3 - PRICE_LOW, 4 - PRICE_MEDIAN, 5 - PRICE_TYPICAL, 6 - PRICE_WEIGHTED

//--- indicator buffers
double         Middle_LineBuffer[];
double         Up_LineBuffer[];
double         Down_LineBuffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   IndicatorBuffers(7);
   SetIndexBuffer(0,Middle_LineBuffer);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(1,Up_LineBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(2,Down_LineBuffer);
   SetIndexStyle(2,DRAW_LINE);
   
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    int counted_bars = IndicatorCounted();
   if(counted_bars < 0)  return(-1);
   if(counted_bars > 0)   counted_bars--;
   int limit = Bars - counted_bars;
   if(counted_bars==0) limit--;
   double         dOtklSumMax[];
   double         SrOtklMax[];
   double         dOtklSumMin[];
   double         SrOtklMin[];
   for(int i=1;i<=limit;i++)
      {
   for(int j=i;j<=i+OtklPeriod;j=j+OtklShag)
      {
        double  max=High[iHighest(NULL,0,MODE_HIGH,OtklShag,i)];
        double  min=Low[iLowest(NULL,0,MODE_HIGH,OtklShag,i)];
        double  Otklmax=max-iMA(NULL,0,InpBandsPeriod,0,MA_Type,Applied_Price,i);
        double  Otklmin=iMA(NULL,0,InpBandsPeriod,0,MA_Type,Applied_Price,i)-min;
        double  dOtklmax=Otklmax*Otklmax;
        double  dOtklmin=Otklmax*Otklmax;
                            
      }
        Middle_LineBuffer[i]=iMA(NULL,0,InpBandsPeriod,0,MA_Type,Applied_Price,i);
      }
    return(0);  
  }
//+------------------------------------------------------------------+
 
Aleksandr Klapatyuk:

вот теперь нет ошибок - можно с этого места продолжать 

Эта часть и у меня без ошибок получалась, а вот когда пытался довести до победного, ничего он не показал)))
 
Aleksandr Klapatyuk:

вот теперь нет ошибок - можно с этого места продолжать 

Ошибка кроется видимо, во всяком случае одна из, в суммировании вот этих квадратов отклонений для расчете среднеквадратичного отклонения. Но я не могу вдуплить как это правильно просуммировать. 
 
Xander1603:
Ошибка кроется видимо, во всяком случае одна из, в суммировании вот этих квадратов отклонений для расчете среднеквадратичного отклонения. Но я не могу вдуплить как это правильно просуммировать. 


Ошибка кроется в выходе за пределы массива, о чем и говорит компилятор.