Ajuda na codificação - página 362

 
triip:
Caras, eu preciso de um pouco de ajuda para codificar a relação RSI e SMA.

Como você vê na imagem, há sinais (setas para cima e para baixo), mas alguns deles são sinais falsos. Portanto, decidi eliminar os sinais falsos com RSI14 e SMA20 nele.

A lógica por trás disso é muito fácil, a seta para cima deve aparecer se RSI14 for ABOVE SMA20. A seta para baixo deve aparecer se o RSI for SMA20 ABAIXO.

Marquei mal algumas linhas para cima, porque o RSI é muito alto, mas essa parte eu mesmo posso codificar.

Eu encontrei muitos códigos de cruzamento RSI<MA, mas a maioria deles vai longo/curto se o cruzamento aparecer. Mas eu preciso de um termo onde RSI seja ABOVE ou BELOW e depois fazer algo.

Por enquanto, tenho que usar o IRSI e o array para isso, mas não consigo juntar esse código eu mesmo.

triip

Você verificou o postado aqui : https://www.mql5.com/en/forum/general

 
mladen:
TriipDid você confere o que foi postado aqui : https://www.mql5.com/en/forum/general

Sim, mas tudo o que encontrei foi um sinal de travessia. Eu preciso de condições se o RSI estiver acima/abaixo do SMA.

Entendo que primeiro tenho que declarar o que significa ABOVE e o que significa BELOW, depois disso posso usá-los na sentença IF.

 
mladen:
triip


Você verificou o que foi postado aqui : https://www.mql5.com/en/forum/174476



Sim, mas tudo o que encontrei foi um sinal de travessia. Eu preciso de condições se o RSI estiver acima/abaixo do SMA.


Entendo que primeiro tenho que declarar o que significa ABOVE e o que significa BELOW, depois disso posso usá-los na sentença IF.

 
triip:
Sim, mas tudo o que encontrei foi um sinal de travessia. Eu preciso de condições se o RSI estiver acima/abaixo do SMA. Entendo que primeiro tenho que declarar o que significa ABOVE e o que significa BELOW, depois disso posso usá-los na sentença IF.

triip

Não faço idéia do que o rsi estava usando para obter esses sinais em sua foto, então ... é tudo o que posso dizer. Sem o código não pode ajudar mais

 
mladen:
triip Não faço idéia de que rsi você estava usando para obter esses sinais em sua foto, então ... é tudo o que posso dizer. Sem o código não pode ajudar mais...

Desculpe não ter mencionado que os sinais de seta não estão vindo do RSI. é outro código que eu uso. Mas vi que o RSI com SMA vai ajudar a evitar sinais errados. É por isso que gosto de editar o código do sinal para que ele também seja capaz de identificar as condições do RSI.

O que eu preciso é:

Os sinais de setas entram, mas todos eles não são sinais verdadeiros. Portanto, antes que a flecha chegue, tem que haver outra, se verificar o que controla as condições de RSI.

se (meu código atual && RSI está acima/abaixo do SMA)

{ mostrar seta

}

Eu preciso dessa parte vermelha.

 
triip:
Desculpe não ter mencionado que os sinais de seta não vêm do RSI. é outro código que eu uso. Mas vi que o RSI com SMA vai ajudar a evitar sinais errados. É por isso que gosto de editar o código do sinal para que ele também seja capaz de identificar as condições do RSI.

O que eu preciso é:

Os sinais das setas entram, mas todos eles não são sinais verdadeiros. Portanto, se a seta vier, então tem que haver outra se for verificado o que controla as condições do RSI.

se (meu código atual && RSI está acima/abaixo do SMA)

{ mostrar seta

}

Eu preciso dessa parte vermelha.

triip

Você tem que fazer o seguinte :

1. Salvar os valores de RSI em um buffer

2. Use iMAOnArray() para calcular o SMA daquele valor de RSI

3. Compare o valor de RSI salvo e o valor de iMAOnArray() calculado e essa é a sua condição

 
mladen:
triip

Você tem que fazer o seguinte :

1. Salvar os valores de RSI em um buffer

2. Use iMAOnArray() para calcular o SMA daquele valor de RSI

3. Compare o valor de RSI salvo e o valor de iMAOnArray() calculado e essa é a sua condição

Então 1 e 2 algo parecido com isso?

1.

#property indicator_buffers 2

extern int rsi_p = 14;

extern int MA_Period=20;

extern int MA_Shift=0;

extern int MA_Method=0;

extern int NumberOfBarsToCalculate = 10000;

double Buffer0[];

double Buffer1[];

double Ma[];

double RSi[];

int init()

{

IndicatorBuffers(4);

SetIndexBuffer(0,Buffer0);

SetIndexBuffer(1,Buffer1);

SetIndexBuffer(2,Ma);

SetIndexBuffer(3,RSi);

return(0);

}

[/CODE]

2.

[CODE]int start() {

int shift;

double rsi = 0;

for(shift=NumberOfBarsToCalculate-1;shift>=0;shift--){

RSi[shift] = iRSI(NULL,0,rsi_p,PRICE_CLOSE,shift);

}

for(shift=NumberOfBarsToCalculate-1;shift>=0;shift--){

Ma[shift] = iMAOnArray(RSi,0,MA_Period,MA_Shift,MA_Method,shift);

Buffer0[shift] = RSi[shift];

Buffer1[shift] = Ma[shift];

}

return(0);

}

 
triip:
Então 1 e 2 algo parecido com isso?

1.

#property indicator_buffers 2

extern int rsi_p = 14;

extern int MA_Period=20;

extern int MA_Shift=0;

extern int MA_Method=0;

extern int NumberOfBarsToCalculate = 10000;

double Buffer0[];

double Buffer1[];

double Ma[];

double RSi[];

int init()

{

IndicatorBuffers(4);

SetIndexBuffer(0,Buffer0);

SetIndexBuffer(1,Buffer1);

SetIndexBuffer(2,Ma);

SetIndexBuffer(3,RSi);

return(0);

}

[/CODE]

2.

[CODE]int start() {

int shift;

double rsi = 0;

for(shift=NumberOfBarsToCalculate-1;shift>=0;shift--){

RSi[shift] = iRSI(NULL,0,rsi_p,PRICE_CLOSE,shift);

}

for(shift=NumberOfBarsToCalculate-1;shift>=0;shift--){

Ma[shift] = iMAOnArray(RSi,0,MA_Period,MA_Shift,MA_Method,shift);

Buffer0[shift] = RSi[shift];

Buffer1[shift] = Ma[shift];

}

return(0);

}

Sim, você pode fazer isso também

E quando você precisar, basta comparar o buffer RSi e MA e você sempre será capaz de ver a posição relativa deles

 
mladen:
Sim, você pode fazer isso também E quando você precisar, basta comparar RSi e MA buffer e você sempre será capaz de ver a posição relativa deles

Fantástico, grande obrigado mladen

 
mladen:
codificador aprendizAqui está um indicador que tem tal procedimento de ordenação (é ordenação de matriz bidimensional) : spearman_rank_correlation_nmc.mq4

mladen

Algum exemplo de c/c++ fazendo essa mesma coisa?