Ajuda na codificação - página 170

 

Yup... não sei o quanto estou distraído. Graças ao seu conselho de tempo certo, os números de TB_TotalCount e VACount se tornam corretos e absolutamente razoáveis. Mas meus objetivos de encontrar VA High/Low ainda em apuros, meu PC se choca novamente com essa parte da codificação. Tentando novamente entender o porquê agora.

Muito obrigado, Mladen! Seu conselho me dá um sorriso parcial depois de toda a noite branca

 

Olá, Mladen,

Só para informar que finalmente resolvi o resto do meu problema. Tentando melhorá-lo mais.

Embora você me tenha dado tão pouca ajuda como pôde neste caso, mas descubro que às vezes esse é o melhor método de ensinar quem está aprendendo de pé.

Muito obrigado do fundo do meu coração, Mladen!

Felizes dias agradáveis para você,

fareastol

 
zilliq:
Olá, Mladen,

Eu consigo usar o impulso relativo e absoluto

Muito obrigado por sua ajuda, agora preciso suavizar a dinâmica para o rsx

Zilliq

Ps: Se isso pode ajudar alguém:

//Relative Momentum on close

ind1= fechar-fechar[1]

// Momento absoluto

ind2=abs(ind1)

ind3=wilderAverage[rs](ind1)

ind4=wilderAverage[rs](ind2)

ind3=(50*(ind3+ind4))/ind4

retornar ind3 como "RSI",0, 30, 70, 100

Zilliq

Dê uma olhada neste post : https://www.mql5.com/en/forum/178733/page36

Você tem um exemplo de como isso (o alisamento) pode ser feito lá

 

Obrigado Mladen, vou ver que

Tenha um bom dia e milhares de agradecimentos por toda sua ajuda e trabalho

Zilliq

 

Bem, se eu entendi bem em seu indicador rsi mais suave 2, você apenas muda a média mais selvagem pela função ismooth

E você "émooth" o impulso relativo e absoluto

Eu faço o mesmo com a média do casco, mas o resultado não é o mesmo que você vê na minha foto

Você tem uma idéia do porquê, ou eu me engano?

Obrigado, Mladen.

E o código RSI14 e RSIsmoother 45

//Relativo Momentum no fechamento

ind1= fechar-fechar[1]

// Momento absoluto

ind2=abs(ind1)

// Momento relativo liso com média de casco

v =(2*média ponderada[round(rs/2)](ind1))-média ponderada[rs](ind1)

ind3 = média ponderada[Round(Sqrt(rs))](v)

// Momento absoluto suave com média de casco

v2 =(2*média ponderada[round(rs/2)](ind2))-média ponderada[rs](ind2)

ind4 = média ponderada[Round(Sqrt(rs))](v2)

ind5=(50*(ind3+ind4))/ind4

retornar ind5 como "RSI smooth

Eu substituo a média selvagem por um T3 Tillson em ambos (impulso relativo e absoluto), com o mesmo problema

Arquivos anexados:
 

É simplesmente o resultado da utilização de diferentes métodos de suavização. Diferentes suavizações darão diferentes resultados

Se você quiser resultados comparáveis aos do rsi afixados na rosca rsi você tem que usar esse tipo de alisamento usado nesse indicador

 

Obrigado Mladen por sua resposta

É estranho que um impulso relativo e absoluto suave dê um tal resultado com alguns exageros com a média do casco e o T3

Você pode explicar com uma fórmula matemática (se possível) como funciona a função ismooth do MT4 para obter um RSI comparável ao RSI, por favor, e eu o codificarei depois

Muito obrigado e tenha um bom dia

Zilliq

Seu código MT4 e minha interpretação:

//relative momentum

double mom = iMA(NULL,0,1,0,MODE_SMA,Price,i)-iMA(NULL,0,1,0,MODE_SMA,Price,i+1);

// impulso absoluto

moa duplo = MathAbs(mãe);

// Momento relativo liso com a "função ismooth

tmom duplo = iSmooth(mãe,Comprimento,VelocidadeLisa,i,0);

//baixa dinâmica absoluta com a "função ismooth

duplo tmoa = iSmooth(moa,Length,SmoothSpeed,i,1);

se (tmoa != 0)

//And the ratio 50*(RM+AM)(AM)

rsi = MathMax(MathMin((tmom/tmoa+1.0)*50.0,100.00),0.00);

caso contrário rsi = 50;

 

Zilliq

Você tem o código fonte dele nesse indicador. Basta convertê-lo em tempo pré-determinado.

 

Não é muito fácil para mim interpretar a função ismooth (o MT4 é tão complicado comparado com o PRT)

Eu tento traduzir o código MT4 em código matemático para codificá-lo depois no PRT

Por favor, você pode confirmar minha interpretação das diferentes linhas abaixo de cada linha antes de codificá-la no PRT

Muito obrigado, Mladen.

Zilliq

duplo iSmooth(preço duplo, comprimento int, velocidade dupla, int r, int instanceNo=0)

{

if (ArrayRange(workSmooth,0)!=Bars) ArrayResize(workSmooth,Bars); instanceNo *= 5; r = Bars-r-1;

if(r<=2) { workSmooth[r] = preço; workSmooth[r] = preço; workSmooth[r] = preço; return(price); }

//

//

//

//

//

_______________________________________________________________________

duplo beta = 0,45*(comprimento-1,0)/(0,45*(comprimento-1,0)+2,0);

beta = 0.45*(comprimento-1.0)/(0.45*(comprimento-1.0)+2.0)

_______________________________________________________________________

duplo alfa = MathPow(beta,speed);

alfa = beta^speed

_______________________________________________________________________

workSmooth[r] = preço+alfa*(workSmooth[r-1]-preço);

Filt0 = preço+alfa*(Filt0[1]-preço);

_______________________________________________________________________

workSmooth[r] = (preço - workSmooth[r])*(1-alpha)+alpha*workSmooth[r-1];

Filt1 = (preço - Filt0 )*(1-alfa)+alfa*Filt1[1]

_______________________________________________________________________

workSmooth[r] = workSmooth[r] + workSmooth[r];

Filt2 = Filt0 + Filt1

_______________________________________________________________________

workSmooth[r] = (workSmooth[r] - workSmooth[r-1])*MathPow(1.0-alpha,2) + MathPow(alpha,2)*workSmooth[r-1];

Filt3=Filt2-Filt4[1]*(1-alpha)*(1-alpha)+alpha*alpha*Filt3[1]

_______________________________________________________________________

workSmooth[r] = workSmooth[r] + workSmooth[r-1];

Filt4=Filt3+Filt4[1]

_______________________________________________________________________

retorno(workSmooth[r]);

return Filt4

 
zilliq:
Não é muito fácil para mim interpretar a função ismooth (o MT4 é tão complicado comparado com o PRT)

Eu tento traduzir o código MT4 em código matemático para codificá-lo depois no PRT

Por favor, você pode confirmar minha interpretação das diferentes linhas abaixo de cada linha antes de codificá-la no PRT

Muito obrigado, Mladen.

Zilliq

duplo iSmooth(preço duplo, comprimento int, velocidade dupla, int r, int instanceNo=0)

{

if (ArrayRange(workSmooth,0)!=Bars) ArrayResize(workSmooth,Bars); instanceNo *= 5; r = Bars-r-1;

if(r<=2) { workSmooth[r] = preço; workSmooth[r] = preço; workSmooth[r] = preço; return(price); }

//

//

//

//

//

_______________________________________________________________________

duplo beta = 0,45*(comprimento-1,0)/(0,45*(comprimento-1,0)+2,0);

beta = 0.45*(comprimento-1.0)/(0.45*(comprimento-1.0)+2.0)

_______________________________________________________________________

duplo alfa = MathPow(beta,speed);

alfa = beta^speed

_______________________________________________________________________

workSmooth[r] = preço+alfa*(workSmooth[r-1]-preço);

Filt0 = preço+alfa*(Filt0[1]-preço);

_______________________________________________________________________

workSmooth[r] = (preço - workSmooth[r])*(1-alpha)+alpha*workSmooth[r-1];

Filt1 = (preço - Filt0 )*(1-alfa)+alfa*Filt1[1]

_______________________________________________________________________

workSmooth[r] = workSmooth[r] + workSmooth[r];

Filt2 = Filt0 + Filt1

_______________________________________________________________________

workSmooth[r] = (workSmooth[r] - workSmooth[r-1])*MathPow(1.0-alpha,2) + MathPow(alpha,2)*workSmooth[r-1];

Filt3=Filt2-Filt4[1]*(1-alpha)*(1-alpha)+alpha*alpha*Filt3[1]

_______________________________________________________________________

workSmooth[r] = workSmooth[r] + workSmooth[r-1];

Filt4=Filt3+Filt4[1]

_______________________________________________________________________

retorno(workSmooth[r]);

retornar Filt4

Até onde eu vejo que deveria ser assim, mas tendo em mente que eu nunca trabalhei com tempo pré