Ayuda a la codificación - página 170

 

Sí... no sé lo despistado que estoy. Gracias a tus consejos, los números de TB_TotalCount y VACount son correctos y absolutamente razonables. Pero mis objetivos de encontrar el VA High/Low todavía están en problemas, mi PC se estrelló de nuevo con esa parte de la codificación. Tratando de nuevo para entender por qué ahora.

¡Muchas gracias Mladen! Su consejo me da una sonrisa parcial después de toda la noche blanca

 

Hola Mladen,

Sólo para informar que finalmente he resuelto el resto de mi problema. Tratando de mejorarlo más.

Aunque me diste tan poca ayuda como pudiste en este caso pero descubrí que a veces es el mejor método de enseñar a los que están aprendiendo de pie.

Gracias de todo corazón, Mladen.

Que tengas unos buenos días,

fareastol

 
zilliq:
Hola Mladen,

Consigo utilizar el impulso relativo y absoluto

Muchas gracias por tu ayuda, ahora necesito suavizar el momentum para el rsx

Zilliq

Ps: Si puede ayudar a alguien:

//Momento relativo al cierre

ind1= cierre-cierre[1]

//Momento absoluto

ind2=abs(ind1)

ind3=wilderAverage[rs](ind1)

ind4=wilderAverage[rs](ind2)

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

return ind3 as "RSI",0, 30, 70, 100

Zilliq

Echa un vistazo a este post : https://www.mql5.com/en/forum/178733/page36

Tienes un ejemplo de cómo se puede hacer (el suavizado) allí

 

Gracias Mladen, lo veré

Que tengas un buen día y miles de gracias por toda tu ayuda y trabajo

Zilliq

 

Bueno, si he entendido bien en su indicador rsi smoother 2, usted acaba de cambiar la media salvaje por la función ismooth

Y "ismooth" el momento relativo y absoluto

Yo hago lo mismo con la media de Hull pero el resultado no es el mismo que se ve en mi imagen

¿Tienes una idea de por qué, o me equivoco?

Gracias Mladen

Y el código RSI14 y RSIsmoother 45

//Momento relativo al cierre

ind1= cierre-cierre[1]

//Momento absoluto

ind2=abs(ind1)

// Suavizar el momento relativo con la media de Hull

v =(2*media ponderada[round(rs/2)](ind1))-media ponderada[rs](ind1)

ind3 = media ponderada[redondeada(rs))](v)

// Suavizar el momento absoluto con la media de Hull

v2 =(2*Promedio ponderado[redondo(rs/2)](ind2))-Promedio ponderado[rs](ind2)

ind4 = weightedAverage[Round(Sqrt(rs))](v2)

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

devolver ind5 como "RSI suave"

Sustituyo la media salvaje por una T3 Tillson en ambas (momento relativo y absoluto), con el mismo problema

Archivos adjuntos:
 

Es simplemente el resultado de utilizar diferentes métodos de alisado. Diferentes suavizados darán diferentes resultados

Si quieres resultados comparables al rsi publicado en el hilo de rsi tienes que usar el tipo de suavizado que se usa en ese indicador

 

Gracias Mladen por tu respuesta

Es extraño que un smooth del momento relativo y absoluto dé un resultado tan exagerado con la media de Hull y el T3

Puedes explicar con una fórmula matemática (si es posible) cómo funciona el smooth de la función ismooth de MT4 para obtener un RSI suave comparable al RSI por favor y lo codificaré después

Muchas gracias y que tengas un buen día

Zilliq

Tu código de MT4 y mi interpretación:

//momento relativo

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

//momento absoluto

double moa = MathAbs(mom);

/momento relativo suave con la "función ismooth

double tmom = iSmooth(mom,Length,SmoothSpeed,i,0);

//Amortiguar el momento absoluto con la función "ismooth".

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

if (tmoa != 0)

/Y la relación 50*(RM+AM)(AM)

rsi = MathMax(MathMin((tmom/tmoa+1,0)*50,0,100,00),0,00);

si no rsi = 50;

 

Zilliq

Tienes el código fuente del mismo en ese indicador. Sólo tienes que convertirlo a prorealtime

 

Ouch no es realmente fácil para mí interpretar la función ismooth (MT4 es tan complicado en comparación con PRT)

Intento traducir el código de MT4 en código matemático para codificarlo después en PRT

Por favor, ¿pueden confirmar mi interpretación de las diferentes líneas debajo de cada línea antes de codificarlas en PRT?

Muchas gracias Mladen

Zilliq

double iSmooth(double price,int length, double speed, int r, int instanceNo=0)

{

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

if(r<=2) { workSmooth[r] = precio; workSmooth[r] = precio; workSmooth[r] = precio; return(precio); }

//

//

//

//

//

_______________________________________________________________________

double beta = 0,45*(longitud-1,0)/(0,45*(longitud-1,0)+2,0);

beta = 0,45*(longitud-1,0)/(0,45*(longitud-1,0)+2,0)

_______________________________________________________________________

double alpha = MathPow(beta,velocidad);

alfa = beta^velocidad

_______________________________________________________________________

workSmooth[r] = precio+alpha*(workSmooth[r-1]-precio);

Filt0 = precio+alfa*(Filt0[1]-precio);

_______________________________________________________________________

workSmooth[r] = (precio - workSmooth[r])*(1-alfa)+alfa*workSmooth[r-1];

Filt1 = (precio - 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]

_______________________________________________________________________

return(workSmooth[r]);

return Filt4

 
zilliq:
Ouch no es realmente fácil para mí interpretar la función ismooth (MT4 es tan complicado en comparación con PRT)

Intento traducir el código de MT4 en código matemático para codificarlo después en PRT

Por favor, puede confirmar mi interpretación de la línea diferente debajo de cada línea antes de que el código en PRT

Muchas gracias Mladen

Zilliq

double iSmooth(double price,int length, double speed, int r, int instanceNo=0)

{

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

if(r<=2) { workSmooth[r] = precio; workSmooth[r] = precio; workSmooth[r] = precio; return(precio); }

//

//

//

//

//

_______________________________________________________________________

double beta = 0.45*(longitud-1.0)/(0.45*(longitud-1.0)+2.0);

beta = 0,45*(longitud-1,0)/(0,45*(longitud-1,0)+2,0)

_______________________________________________________________________

double alpha = MathPow(beta,velocidad);

alfa = beta^velocidad

_______________________________________________________________________

workSmooth[r] = precio+alpha*(workSmooth[r-1]-precio);

Filt0 = precio+alfa*(Filt0[1]-precio);

_______________________________________________________________________

workSmooth[r] = (precio - workSmooth[r])*(1-alfa)+alfa*workSmooth[r-1];

Filt1 = (precio - 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]

_______________________________________________________________________

return(workSmooth[r]);

devolver Filt4

Por lo que veo eso debería ser todo, pero ten en cuenta que nunca he trabajado con prorealtime