Download MetaTrader 5

Dúvidas com relação ao RSI

Para adicionar comentários, por favor Conecte-se ou registrar
Rodrigo Malacarne
Moderador
10781
Rodrigo Malacarne  
Comentários que não se relacionam com "Radar do fórum internacional", foram movidos para este tópico.
Ewerton Pinheiro
197
Ewerton Pinheiro  

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...

Rogerio Figurelli
Moderador
46509
Rogerio Figurelli  
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
   );
Rodrigo Malacarne
Moderador
10781
Rodrigo Malacarne  
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...

Ewerton Pinheiro
197
Ewerton Pinheiro  
Ok, valeu.
Ewerton Pinheiro
197
Ewerton Pinheiro  

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.

Rogerio Figurelli
Moderador
46509
Rogerio Figurelli  

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.

Rogerio Figurelli
Moderador
46509
Rogerio Figurelli  
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.
Ewerton Pinheiro
197
Ewerton Pinheiro  

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);
Rogerio Figurelli
Moderador
46509
Rogerio Figurelli  
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.
Ewerton Pinheiro
197
Ewerton Pinheiro  

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



Para adicionar comentários, por favor Conecte-se ou registrar