Как найти цену при которой индикатор RSI будет равен некоему значению?

 

Задача следующего характера: нужно найти цену при которой индикатор RSI будет равен некоему исуомому значению.

Например, индикатор RSI(7) равен 52,1761 при цене1,2041 нужно найти при какой цене он будет равен 37.3518.

Делаю следующее:

int start()
{
int i;
for(i=0;i<Bars;i++)ExtBuffer4[i]=Close[i];
for(i=0;i<Bars;i++)
{
ExtBuffer4[0]=ExtBuffer4[0]-Point;
if(iRSIOnArray(ExtBuffer4,0,7,0)<20)return(0);
Alert(iRSIOnArray(ExtBuffer4,0,7,0));
}
return(0);
}

показывает все время одну цену.Складывается такое ощущение что iRSIonArray при первом вызове делает пересчет а потом не хочет.

Кто может помочь решить задачу отзовитесь. Можно на мыло Artem777@obninsk. com

 
artem:

Задача следующего характера: нужно найти цену при которой индикатор RSI будет равен некоему исуомому значению.

Попробуйте подставлять цену в кастумный индикатор - Relative Strength Index.
 
Вот рабочий код.
//+------------------------------------------------------------------+
//|       searchRSIvalue.mq4 |
//|       nigilist |
//|      nigilist_t@mail.ru |
//+------------------------------------------------------------------+
#property copyright "nigilist"
#property link "nigilist_t@mail.ru"

#property show_inputs
//внешние переменные<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
extern int RSIt = 21; //-период Relative Strength Index
extern int RSIv = 43; //-искомое значение Relative Strength Index
extern double RSIvslippage = 1; //-допустимое отклонение
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<START<<<START<<<START<<<START<<<START<<<START<<<START<<<START<<<<<<<<
int start()
{
int i;
double RSI;
for (i=0; i < Bars; i++)
{
RSI = iRSI(NULL, 0, RSIt, PRICE_CLOSE, i);
if (RSI < RSIv + RSIvslippage && RSI > RSIv - RSIvslippage)
{
Print ("RSI(",RSIt,") = ", RSIv, " на ", i, " баре");
i = Bars + 10; //флаг прекращения поиска
}
}
return(0);
}
//<<<FINISH<<<FINISH<<<FINISH<<<FINISH<<<FINISH<<<FINISH<<<FINISH<<<<<<<<<<
 
nigilist:
Вот рабочий код.
//+------------------------------------------------------------------+
//|                                                    searchRSIvalue.mq4 |
//|                                                              nigilist |
//|                                                    nigilist_t@mail.ru |
//+------------------------------------------------------------------+
#property copyright "nigilist"
#property link      "nigilist_t@mail.ru"
 
#property show_inputs
//внешние переменные<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
extern int RSIt = 21;           //-период Relative Strength Index
extern int RSIv = 43;           //-искомое значение Relative Strength Index
extern double RSIvslippage = 1; //-допустимое отклонение
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<START<<<START<<<START<<<START<<<START<<<START<<<START<<<START<<<<<<<<
int start()
  {
   int i;
   double RSI;
   for (i=0; i < Bars; i++)
    {
     RSI = iRSI(NULL, 0, RSIt, PRICE_CLOSE, i);
     if (RSI <  RSIv + RSIvslippage && RSI >  RSIv - RSIvslippage)
      {
       Print ("RSI(",RSIt,") = ", RSIv, " на ", i, " баре"); 
       i = Bars + 10;  //флаг прекращения поиска
      }
    }
   return(0);
  }
//<<<FINISH<<<FINISH<<<FINISH<<<FINISH<<<FINISH<<<FINISH<<<FINISH<<<<<<<<<<


 
artem писал (а): Спасибо за то что отозвался. У меня не компилируется, ты у себя пробовал?
nigilist:
Вот рабочий код.
//+------------------------------------------------------------------+
//|                                                    searchRSIvalue.mq4 |
//|                                                              nigilist |
//|                                                    nigilist_t@mail.ru |
//+------------------------------------------------------------------+
#property copyright "nigilist"
#property link      "nigilist_t@mail.ru"
 
#property show_inputs
//внешние переменные<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
extern int RSIt = 21;           //-период Relative Strength Index
extern int RSIv = 43;           //-искомое значение Relative Strength Index
extern double RSIvslippage = 1; //-допустимое отклонение
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<START<<<START<<<START<<<START<<<START<<<START<<<START<<<START<<<<<<<<
int start()
  {
   int i;
   double RSI;
   for (i=0; i < Bars; i++)
    {
     RSI = iRSI(NULL, 0, RSIt, PRICE_CLOSE, i);
     if (RSI <  RSIv + RSIvslippage && RSI >  RSIv - RSIvslippage)
      {
       Print ("RSI(",RSIt,") = ", RSIv, " на ", i, " баре"); 
       i = Bars + 10;  //флаг прекращения поиска
      }
    }
   return(0);
  }
//<<<FINISH<<<FINISH<<<FINISH<<<FINISH<<<FINISH<<<FINISH<<<FINISH<<<<<<<<<<



 

artem, код nigilistа не выполнит твою задачу. он по истории ищет бар на котором РСИ==значению

по твоему коду - ты не задаешь ArraySetAsSeries для массива ExtBuffer4

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