Помогите разобраться с таймсерией

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Serzh_2018
38
Serzh_2018  

Возможно ли в цикле идти от большего индекса к меньшему?

В этом коде цикл идет от меньшего индекса к большему:

 if(prev_calculated<4) Step_0=1;                                               // Если расчетов еще небыло Step_0=1
 else Step_0=rates_total-3;                                                    // Если расчеты уже были Step_0=rates_total-3
  
 for(i0=Step_0;i0<rates_total-2;i0++)                                          // Цикл для расчетов
   {
    if (high[i0+1]<=high[i0] && high[i0]>=high[i0-1])                          // Условие для вычисления максимума
     { 
      Max_0[i0]=high[i0];                                                      // Присвоение значения массиву Max_0
      TotalMax_0=ArraySize(Max_0);                                             // Всего баров в массиве Max_0
     }
    
    else                                                                       // Если нет
       {
        Max_0[i0]=0;                                                           // Присвоение 0 значения массиву
        TotalMax_0=ArraySize(Max_0);                                           // Всего баров в массиве Max_0
       }

Можно ли аналогично сделать наоборот чтобы цикл ишел от большего индекса к меньшему?

Vitaly Muzichenko
13953
Vitaly Muzichenko  
Serzh_2018:

Возможно ли в цикле идти от большего индекса к меньшему?

В этом коде цикл идет от меньшего индекса к большему:

Можно ли аналогично сделать наоборот чтобы цикл ишел от большего индекса к меньшему?

Можно много чего, и скорее всего что можно всё.

Опишите что должно получиться в итоге, и для чего это нужно.

Serzh_2018
38
Serzh_2018  

Все очень просто. Нужно сравнить три подряд идущих бара и если максимум среднего больше максимумов с левой и с правой стороны, поставить значек в виде точки. Только расчет вести от большего индекса к меньшему.

1

Тоже самое делается и для минимумов, только ищется не максимум, а минимум:

2

Vitaly Muzichenko
13953
Vitaly Muzichenko  
Serzh_2018:

Все очень просто. Нужно сравнить три подряд идущих бара и если максимум среднего больше максимумов с левой и с правой стороны, поставить значек в виде точки. Только расчет вести от большего индекса к меньшему.

Тоже самое делается и для минимумов, только ищется не максимум, а минимум:

Я не осилю такое - в индикаторах слаб. Подождём кто в этом деле силён.

Evgeny Raspaev
986
Evgeny Raspaev  
Serzh_2018:

Возможно ли в цикле идти от большего индекса к меньшему?

В этом коде цикл идет от меньшего индекса к большему:

Можно ли аналогично сделать наоборот чтобы цикл ишел от большего индекса к меньшему?

переверните цикл в обратную сторону

for(i0=rates_total-2;i0>Step_0;i0--)     
{

                                     
Serzh_2018
38
Serzh_2018  
После переворота по историческим данным производится расчет, а по новым нет.
Vladimir Karputov
Модератор
183492
Vladimir Karputov  
Помощь нужна?
Serzh_2018
38
Serzh_2018  
Да, очень!
Vladimir Karputov
Модератор
183492
Vladimir Karputov  
Serzh_2018:
Да, очень!

Хорошо. Итак действе первое: нужно понимать, как идёт нумерация в массивах индикатора по-умолчанию.

Для этого такой короткий код (кстати полезно запустить его в режиме отладки и на строке "Comment" сделать прерывание)

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#property indicator_chart_window
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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 bar_0=0;
   int bar_rates_total_minus_1=rates_total-1;
   Comment("prev_calculated=",prev_calculated,"\n",
           "time[",bar_0,"]=",time[bar_0],"\n",
           "time[",bar_rates_total_minus_1,"]=",time[bar_rates_total_minus_1]);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Данный код выводит три переменные: "prev_calculated", время бара#0 и время бара#rates_total-1.

Файлы:
Test.mq5 4 kb
TheXpert
18279
TheXpert  
Serzh_2018:

Возможно ли в цикле идти от большего индекса к меньшему?

ArraySetAsSeries
Serzh_2018
38
Serzh_2018  
Во всех с 0 и далее. В таймсериях с право налево, во всех остальных наоборот, в том числе и индикаторных. Но можно поменять направление с помощью функции ArraySetAsSeries.
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий