![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
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![](https://c.mql5.com/forextsd/smiles/smile.png)
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
Hola Mladen,
Consigo utilizar el impulso relativo y absoluto![](https://c.mql5.com/forextsd/smiles/teeth_smile.png)
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, 100Zilliq
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![](https://c.mql5.com/forextsd/smiles/emoticon01.png)
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
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![](https://c.mql5.com/forextsd/smiles/teeth_smile.png)
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
Ouch no es realmente fácil para mí interpretar la función ismooth
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 Filt4Por lo que veo eso debería ser todo, pero ten en cuenta que nunca he trabajado con prorealtime