Função RSI

 

Boa tarde pessoal, criei uma função de teste para o RSI, mas não estou tendo retorno, poderiam me ajudar a entender porque?

bool sinal_RSI_UP_Cross(int period=20,
                        double Nivel_maximo = 70)
  {
   bool retorno = false;

   double IfrArray[];
   int IfrHandle;

   IfrHandle = iRSI(_Symbol,_Period,period,PRICE_CLOSE);
   ArraySetAsSeries(IfrArray,true);
   CopyBuffer(IfrHandle,0,0,3,IfrArray);   

   if((IfrArray[0] > Nivel_maximo) && (IfrArray[2] < Nivel_maximo))
     {
      retorno = true;
     }
   else
     {
      retorno = false;
     }
   return(retorno);
  }
 
NFONSECA:

Boa tarde pessoal, criei uma função de teste para o RSI, mas não estou tendo retorno, poderiam me ajudar a entender porque?

Opa,

o fato de você estar gerando um novo manipulador a cada chamada da função pode ser o motivo do erro. Tente o seguinte:

double IfrArray[];
int IfrHandle;
double Nivel_maximo=70;
int	period=20;
void OnInit()
{

IfrHandle = iRSI(_Symbol,_Period,period,PRICE_CLOSE);
ArraySetAsSeries(IfrArray,true);

}
void OnTick()
{

if(sinal_RSI_UP_Cross( double Nivel_maximo )
 Print("Sinal Up ", DoubleToString(IfrArray[0],_Digits);

}
bool sinal_RSI_UP_Cross (double _Nivel_maximo)
  {
   bool retorno = false;
   CopyBuffer(IfrHandle,0,0,3,IfrArray);   
   if((IfrArray[0] > _Nivel_maximo) && (IfrArray[2] < _Nivel_maximo))
     {
      retorno = true;
     }
   return(retorno);
  }
Razão: