Узнать значение индикатора на Close[n] в прошлом?

 

Добрый день!

Например есть индикатор RSI и хотел бы проанализировать какие значения у него было в момент закрытия 
последних 10 свечей (т.е. Close[1] ...........Close[n]).

Не могу понять как узначть значение RSI например в момент Close[5]

Подскажите, куда копать?

 
Str1987:

Добрый день!

Например есть индикатор RSI и хотел бы проанализировать какие значения у него было в момент закрытия 
последних 10 свечей (т.е. Close[1] ...........Close[n]).

Не могу понять как узначть значение RSI например в момент Close[5]

Подскажите, куда копать?

В цикле пробежать, и заполнить массив с ценами, после цикла прочесть массив в любом месте программы.

 
Str1987:

Добрый день!

Например есть индикатор RSI и хотел бы проанализировать какие значения у него было в момент закрытия 
последних 10 свечей (т.е. Close[1] ...........Close[n]).

Не могу понять как узначть значение RSI например в момент Close[5]

Подскажите, куда копать?

Для МТ4:

iRSI(NULL,PERIOD_CURRENT,period_rsi,applied_price_rsi,5);
 
Vitaly Muzichenko:

В цикле пробежать, и заполнить массив с ценами, после цикла прочесть массив в любом месте программы.

Вот функция  кода что здесь не так?

Только здесь MA

bool NBarsClosesHigher()

{

   int Quant_Bars = 11;

   int count = 0;

   

   for (int i = 1;i <= Quant_Bars; i++)

   {

      if (Close[0] >= Ma)

      {

         count ++; 

      } 

   }

   if (count >= 8)

      {

         return(TRUE);

      } else return(FALSE);

}

 
Artyom Trishkin:

Для МТ4:

bool NBarsClosesHigher()
{
   int Quant_Bars = 11;
   int count = 0;
   
   for (int i = 1;i <= Quant_Bars; i++)
   {
      if (Close[i] >= iRSI(NULL,PERIOD_CURRENT,period_rsi,applied_price_rsi,[i]));
      {
         count ++; 
      } 
   }
   if (count >= 8)
      {
         return(TRUE);
      } else return(FALSE);

}

т.е. вот так?

 
Str1987:
bool NBarsClosesHigher()
{
   int Quant_Bars = 11;
   int count = 0;
   
   for (int i = 1;i <= Quant_Bars; i++)
   {
      if (Close[i] >= iRSI(NULL,PERIOD_CURRENT,period_rsi,applied_price_rsi,[i]));
      {
         count ++; 
      } 
   }
   if (count >= 8)
      {
         return(TRUE);
      } else return(FALSE);

}

т.е. вот так?

Нет, просто одной строчкой что я показал. Только брать от неё значение:

double rsi_5=iRSI(NULL,PERIOD_CURRENT,period_rsi,applied_price_rsi,5);

В переменной rsi_5 будет храниться значение RSI на текущем символе, на текущем периоде и баре №5. Или вы что-то иное хотели узнать?

 
Str1987:    iRSI(NULL,PERIOD_CURRENT,period_rsi,applied_price_rsi,[i]));

уберите квадратные скобки от i

 
Artyom Trishkin:

Нет, просто одной строчкой что я показал. Только брать от неё значение:

В переменной rsi_5 будет храниться значение RSI на текущем символе, на текущем периоде и баре №5. Или вы что-то иное хотели узнать?

Есть функция не могу понять в чем ошибка.

bool NBarsClosesHigher()

{

   int Quant_Bars = 10;

   int count = 0;

   double PricesClosesTenBars [];

   double PriceMiddleTenBars []; 

   for (int i = 1;i <= Quant_Bars; i++)

   {

      PricesClosesTenBars[i - 1] = Close[i];

      PriceMiddleTenBars[i - 1] = iCustom(NULL,0,"TMA_Fair ",TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate,3,i);

   }

   for (int i = 0;i <= 9; i++)

   {

    if (PricesClosesTenBars[i] >= PriceMiddleTenBars[i])

      {

         count ++;

      }

   }

   if (count >= 8)

      {

         return(TRUE);

      } else return(FALSE);

}

Суть ее в том, что бы взять 10 свечей и сравнить значения Close[i] каждой по отношению к значению средней из TMA FAIR индикатора. (iCustom(NULL,0,"TMA_Fair ",TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate,3,i);)


После функия ставится в условии на проверку открытия ордера по TRUE/FALSE, но пишет что ошибка в терминале не могу разобарться никак, в чем проблема. 


Файлы:
1111.PNG  33 kb
 
Str1987:

Есть функция не могу понять в чем ошибка.

У массивов:

   double PricesClosesTenBars [];

   double PriceMiddleTenBars []; 

нет размера, т. е. он нулевой. Любое обращение к этим массивам приведет к выходу за его пределы.

Нужно выделить память для этих массивов. Либо в стеке (указать размер при объявлении), либо в оперативной памяти (использовать ArrayResize()).

 
И вместо Close использовать Open. Разницы никакой, только бар следующий. 
 
Добырй день! Спасибо за саппорт...

Опять застрял, может у кого идеи есть, Ниже фу-ция постоянно возврщает false.
Почему так не пойму никак

bool NBarsClosesLower()
{
   int Quant_Bars = 10;
   int count = 0;
   
   double PricesClosesTenBars [10];
   double PriceMiddleTenBars [10];
   
   for (int i = 1;i <= Quant_Bars; i++)
   {
      PricesClosesTenBars[i - 1] = Close[i];
      PriceMiddleTenBars[i - 1] = iCustom(NULL,0,"TMA_Fair ",TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate,3,i);
   }
   for (int i = 0;i <= 9; i++)
   {
    if (PricesClosesTenBars[i] <= PriceMiddleTenBars[i])
      {
         count ++;
      }
   }
   if (count >= 8)
      {
         return(TRUE);
      } else return(FALSE);
   Print("Кол-во свечей НИЖЕ средней ", count);
}