Dúvidas com relação ao RSI

 
Comentários que não se relacionam com "Radar do fórum internacional", foram movidos para este tópico.
 

Bom, eu nao sei se aqui seria o lugar ideal, mas se vocês puderem me ajudar, seria muito grato.

Bom, minha dúvida é a seguinte, iniciei recentemente a aprender programar em MQL5,

e estava a testar um EA usando o indicador RSI,

construi a seguinte rotina:

//--- Seção A.8.3: Indicador de RSI
      RSI_handle[i]=(iRSI(SymbolArr[i],PERIOD_CURRENT,per[i],PRICE_WEIGHTED));      
        if(RSI_handle[i]<0)
        {
         Print("Identificador de RSI ",SymbolArr[i]," não foi criado, identificador=",Valor Invalido,"\n Error=",GetLastError());
         ExpertRemove();
        }

bom, até ai tudo bem, mas logo em seguida estava tentando capturar o valor de RSI_handle

para realizar alguns calculos, conforme a rotina abaixo:

      //--- A linha RSI sobre os preços.
      if(CopyBuffer(RSI_handle[N],0,per[N],1,RSI_handlex)<=0)
         continue; // quebrar a iteração atual. 

      ArraySetAsSeries(RSI_handlex,true);

Só que ao comparar o valor que é lançado na seção A83 -RSI_Handle com o valor copiado para o Buffer RSI_handlerx,

os números não batem... alguém poderia me ajudar a identificar onde estou errando na construção

desta rotina?

Obrigado a todos...

 
ewertonm:

Bom, eu nao sei se aqui seria o lugar ideal, mas se vocês puderem me ajudar, seria muito grato.

Ewerton, realmente lá não era o tópico para essas dúvidas, o correto era você criar um novo tópico como esse.

Nesse caso também recomendo que você edite os códigos fontes utilizando a opção de código (SRC) do editor (Ctrl+A+M), provavelmente o Malacarne já fez isso para você.

Fazendo uma análise do código para te ajudar, me parece que tua expectativa de que os números dos manipuladores devem bater é que está errada. 

Note que RSI_handle é realmente um handler, mas RSI_handlex, apesar do nome que você está utilizando, deveria sera apenas um array de destino, onde serão copiados N dados (count), como mostra a documentação de CopyBuffer que recomendo leres novamente.

int  CopyBuffer(
   int       indicator_handle,     // indicator handle
   int       buffer_num,           // indicator buffer number
   int       start_pos,            // start position
   int       count,                // amount to copy
   double    buffer[]              // target array to copy
   );
 
ewertonm:

Bom, eu nao sei se aqui seria o lugar ideal, mas se vocês puderem me ajudar, seria muito grato.

Bom, minha dúvida é a seguinte, iniciei recentemente a aprender programar em MQL5,

e estava a testar um EA usando o indicador RSI,

construi a seguinte rotina:

bom, até ai tudo bem, mas logo em seguida estava tentando capturar o valor de RSI_handle

para realizar alguns calculos, conforme a rotina abaixo:

Só que ao comparar o valor que é lançado na seção A83 -RSI_Handle com o valor copiado para o Buffer RSI_handlerx,

os números não batem... alguém poderia me ajudar a identificar onde estou errando na construção

desta rotina?

Obrigado a todos...

Olá Ewerton, ao postar algum tópico por favor identifique a melhor seção para tua postagem! O conteúdo de teu post não estava relacionado ao tópico Radar do fórum internacional, por isso resolvi criar um tópico novo a partir de seu post original.

Ainda com relação ao post original, sempre que for colar trechos de código, use o botão "SRC" do editor...

 
Ok, valeu.
 

Bom, mas vc´s entenderam o que estou tentando fazer ?

como disse estou ainda em fase de aprendizagem da linguagem, e como não ha muito mateiral

explicativo em portugues, estou quebrando a cabeça aqui.


NA verdade eu to  querendo copiar o valor de RSI que é plotado no grafico para uma variavel de memoria, que

me ajudaria a implementar alguns calculos matematicos, por isto usei a variavel RSI_handerx, onde deveria

ser armazenado o valor de RSI_handler. Mas o valor qd é plotado no grafico é totalmente divergente do que é

capturado pela memoria.

 

Ewerton, note também que o ExpertRemove() é um tratamento radical para a situação de não conseguir um manipulador, pois além de parar o EA você vai remover ele do gráfico.

if(RSI_handle[i]<0) {
   Print("Identificador de RSI ",SymbolArr[i]," não foi criado, identificador=",Valor Invalido,"\n Error=",GetLastError());
   ExpertRemove();
}

Talvez algo menos radical seja colocar um alerta na tela, usando a função Alert(), e testar a existência do manipulador antes do CopyBuffer() e de utilizar de fato os dados do RSI.

 
ewertonm:

Bom, mas vc´s entenderam o que estou tentando fazer ? ...

Mas o valor qd é plotado no grafico é totalmente divergente do que é 

capturado pela memoria.

Agora está mais fácil, já que você explicou que está comparando dados em memória com dados plotados no gráfico.

O ideal seria poder ver mais detalhes do código fonte e também dos dados que você está vendo nessa comparação.
 

sim, mas esta função é para parar o grafico, quando ocorrer um erro nos dados. O que esta me intrigando é que como estou indicando que o valor de RSI_hander para ser copiado para

RSI_handlerx está sendo divergente de quando plota o grafico.

Eu vejo isto qd peço para printar o valor de RSI_handlerx e comparo o valor que foi plotado no gráfico.


  if(CopyBuffer(RSI_handle[N],0,per[N],1,RSI_handlex)<=0)
         continue; // quebrar a iteração atual. 

      ArraySetAsSeries(RSI_handlex,true);
 
ewertonm:

sim, mas esta função é para parar o grafico, quando ocorrer um erro nos dados. O que esta me intrigando é que como estou indicando que o valor de RSI_hander para ser copiado para

RSI_handlerx está sendo divergente de quando plota o grafico.

Eu vejo isto qd peço para printar o valor de RSI_handlerx e comparo o valor que foi plotado no gráfico.


Sim, tudo isso já foi explicado antes, mas o que tens de novo para ajudar na solução? (o ideal seria poder ver mais detalhes do código fonte e também dos dados que você está vendo nessa comparação).

Obs: é uma opção parar o gráfico a cada erro de leitura do manipulador, mas ainda considero um tratamento radical.
 

Bom, vou colar o resultado que estou obtendo com o código, para vc ver se entende o q esta ocorrendo:



Razão: