ПОМОГИТЕ - страница 3

 
i - это первый бар с какого начинается расчет индикатора
 

Я же говорю, давайте по порядку.

Откуда вы беретё, что на РАЗНЫХ ТАЙМФРЕМАХ, будет ОДИНАКОВОЕ КОЛИЧЕСТВО БАРОВ

   int dil=enumToTF(TimeFrame_2)/enumToTF(TimeFrame_1);

   ArraySetAsSeries(Time_1,true);
   int fwga=CopyTime(_Symbol,TimeFrame_1,0,rates_total,Time_1);

   ArraySetAsSeries(Time_2,true);
   int fga=CopyTime(_Symbol,TimeFrame_2,0,rates_total,Time_2);

   ArraySetAsSeries(High_2,true);
   int lfga=CopyHigh(_Symbol,TimeFrame_2,0,rates_total,High_2);

   ArraySetAsSeries(Low_2,true);
   int gfga=CopyLow(_Symbol,TimeFrame_2,0,rates_total,Low_2);

   ArraySetAsSeries(High_1,true);
   int la=CopyHigh(_Symbol,TimeFrame_1,0,rates_total,High_1);

   ArraySetAsSeries(Low_1,true);
   int ga=CopyLow(_Symbol,TimeFrame_1,0,rates_total,Low_1);

   ArraySetAsSeries(Close_1,true);
   int rga=CopyClose(_Symbol,TimeFrame_1,0,rates_total,Close_1);

 Начнём с начала. Что делает индикатор?

 
не не это я уже переделал
Файлы:
 

сделал по другому так мне понятней

и легче

 

сам код расчета индикатора на MQL4 работает отлично и сигналы есть

может что то с буферами неправильно я сделал?

 
Mikhail Rudyk:

сам код расчета индикатора на MQL4 работает отлично и сигналы есть

может что то с буферами неправильно я сделал?

MQL4 - старый и нестрогий язык, который многое Вам прощает. В MQL5 всё более строго.
 
Спрашиваю последний раз: что должен делать индикатор? Опишите шаг первый. Если не ответите, я выхожу из дискуссии.
 

ну как еще вам обяснить (я не понимаю что вы имеете ввиду)

TimeFrame_2=60;
TimeFrame_1=5;
for(int i=1;i<CountBar/dil;i++) проходим по часовым барам i=1  начало с первого часового бара
      {
         double max=iHigh(Symbol(),TimeFrame_2,i); максимум часового бара
         double min=iLow(Symbol(),TimeFrame_2,i); минимум часового бара
         datetime timeStartDiap=iTime(Symbol(),TimeFrame_2,i-1); время открытия часового бара i-1 (нулевого)
         int startBar=iBarShiftMQL4(Symbol(),TimeFrame_1,timeStartDiap,false); номер 5 минутного бара соответстующего времени открытия часового бара
         datetime timeEndDiap=iTime(Symbol(),TimeFrame_2,i-2); время открытия часового бара i-2 (здесь функция выведет -1 если i-2 будет <0)
         int endBar=iBarShiftMQL4(Symbol(),TimeFrame_1,timeEndDiap,false); номер 5 минутного бара соответстующего времени открытия часового бара i-2
         if(i==1){endBar=0;} если стартовый бар будет i=1 то конечный бар на 5мин будет 0
         for(int s=startBar;s>=endBar;s--) здесь проходимся по 5 минутных барах
            {
               if(iClose(Symbol(),TimeFrame_1,s)<min)если закрытие  5мин меньше лоу часовой то запускаем функцию
                  {
                     PoiskProboyaUP(iHigh(Symbol(),TimeFrame_1,s),s-1,endBar,i);
                     break;
                  }
               if(iClose(Symbol(),TimeFrame_1,s)>max) если закрытие  5мин больше хая часовой то запускаем функцию
                  {
                     PoiskProboyaDW(iLow(Symbol(),TimeFrame_1,s),s-1,endBar,i);
                     break;
                  }
            }
      }

так понятно?

иначе я незнаю как обяснить чтоб вы поняли))

извините за предоставленные неудобста

 

  1. Откуда цифра TimeFrame_2=60? Ведь PERIOD_H1=16385.
  2. Зачем выполняется деление? (переменная dil)

 

Прежде чем искать пробои:

      for(int s=startBar;s>=endBar;s--)
        {
         if(iClose(Symbol(),TimeFrame_1,s)<min)
           {
            PoiskProboyaUP(iHigh(Symbol(),TimeFrame_1,s),s-1,endBar,i);
            break;
           }
         if(iClose(Symbol(),TimeFrame_1,s)>max)
           {
            PoiskProboyaDW(iLow(Symbol(),TimeFrame_1,s),s-1,endBar,i);
            break;
           }
        }

по индикаторным буферам нужно пройтись и что-то записать - так как индикаторные буферы это динамические массивы. Иначе будет выход за пределы массива - в поисках пробоев идёт обращение к индексу индикаторного буфера, которого ещё нет.

Причина обращения: