Herramientas de no-agotamiento - página 48

 
zilliq:
Nosotros también usamos radianes

Puede ser una explicación: En el código de MT4 multiplicamos alfa con el precio

Supongo que este es el precio, i périods antes, no ?

Y así tenemos que sumar, por ejemplo con un len de 5

alfa*close[4]+alfa*close[3]+alfa*close[2]+alfa*close[1] and alfa*close

o

alfa[4]*cerrar[4]+alfa[3]*cerrar[3]+alfa[2]*cerrar[2]+alfa[1]*cerrar[1] y alfa*cerrar ?

Y es extraño, porque con una longitud de 1 la len es igual a 4 (4*1+0) y por lo tanto el nonlagma no puede ser igual a close porque sumamos el alfa*price de los últimos 4 periodos

Gracias por tus próximos comentarios

Zilliq

Es usar tu código, pero para entender mejor uso el código más sencillo del NonlagMav3

double pi = 3.1415926535;

double Coeff = 3*pi;

int Phase = Length-1;

double Len = Length*Cycle + Phase;

if ( counted_bars > 0 ) limit=Bars-counted_bars;

si ( counted_bars < 0 ) return(0);

si ( barras_contadas ==0 ) limit=Barras-Len-1;

for(shift=limit;shift>=0;shift--)

{

Peso=0; Suma=0; t=0;

for (i=0;i<=Len-1;i++)

{

g = 1,0/(Coeff*t+1);

si (t <= 0,5 ) g = 1;

beta = MathCos(pi*t);

alfa = g * beta;

precio = iMA(NULL,0,1,0,MODE_SMA,Price,shift+i);

Suma += alfa*precio;

Peso += alfa;

si ( t < 1 ) t += 1,0/(Fase-1);

else if ( t < Len-1 ) t += (2*Ciclo-1)/(Ciclo*Longitud-1);

}

if (Peso > 0) MABuffer[shift] = Suma/Peso;

Deberías usar la forma alfa[4]*cierre[4]+alfa[3]*cierre[3]+alfa[2]*cierre[2]+alfa[1]*cierre[1] y alfa*cierre (alfa es diferente para cada elemento)

¿Por qué no haces una versión simple que muestre los valores de los alfa y los comparas con los valores de los alfa en metatrader 4?

 

Gracias Mladen,

Voy a probar esto

De hecho en MT4, tengo el precio del cfd de mi broker (Activtrade), y en Prorealtime este es otro flujo en Efectivo, por lo que hay alguna gran diferencia

Muchas gracias y hasta luego

Zilliq

 

Bueno, he intentado muchas cosas diferentes pero no funciona y definitivamente no sé por qué

Mi código parece estar bien:

****************************

peso=0

suma=0

para i=0 a Len

si i<=Fase-1 entonces

t = 1,0*i/(Fase-1)

si no

t = 1,0 + (i-Fase+1)*(2,0*Cicloe-1,0)/(Cicloe*Longitud-1,0)

endif

beta = Cos(pi*t)

g = 1,0/(Coeff*t+1)

si t <= 0.5 entonces

g = 1

endif

alfa = g * beta

suma=suma+alfa*cierre

peso=peso+alfa

siguiente

nonlagma=suma/peso

***************************

Y similar al tuyo pero como ves en mi gráfico, el nonlagma está muy lejos del close

¿Tienes alguna idea de por qué, y tienes el código de NonlagMa en lenguaje Easy (suele ser más fácil de transcribir)?

Muchas gracias Mladen, estoy cansado...

Ver U

Zilliq

Archivos adjuntos:
 
zilliq:
Bueno, he intentado muchas cosas diferentes, pero no funciona y definitivamente no sé por qué

Mi código parece estar bien:

****************************

peso=0

suma=0

for i=0 to Len

si i<=Fase-1 entonces

t = 1,0*i/(Fase-1)

si no

t = 1,0 + (i-Fase+1)*(2,0*Cicloe-1,0)/(Cicloe*Longitud-1,0)

endif

beta = Cos(pi*t)

g = 1,0/(Coeff*t+1)

si t <= 0.5 entonces

g = 1

endif

alfa = g * beta

suma=suma+alfa*cierre

peso=peso+alfa

siguiente

nonlagma=suma/peso

***************************

Y similar al tuyo pero como ves en mi gráfico, el nonlagma está muy lejos del close

¿Tienes alguna idea de por qué, y tienes el código de NonlagMa en lenguaje Easy (suele ser más fácil de transcribir)?

Muchas gracias Mladen, estoy cansado...

Ver U

Zilliq

Aquí hay una versión que calcula sólo los alfas : _nonlag_ma_alphas.mq4

Haz algo parecido en protrader. Una vez que son los mismos, después de que debería ser fácil de hacer el no lag ma el mismo también. El ejemplo es para el periodo 50

Archivos adjuntos:
 

Muchas gracias Mladen,

Voy a probar con este primer paso

Ver U

Zilliq

 

Bueno,

En primer lugar: una buena noticia que tengo el mismo EUR/USD como usted, ya que será más fácil de comparar

Pero en realidad no tengo éxito

Tu código para calcular el alfa es

double Cycle = 4.0

double Coeff = 3.0*Pi;

int Phase = NlmPeriod-1;

int len = NlmPeriod*4 + Phase;

if (ArraySize(alphas) != len) ArrayResize(alphas,len);

for (int k=0; k<len; k++)

{

si (k<=Fase-1)

double t = 1.0 * k/(Fase-1);

si no t = 1,0 + (k-Fase+1)*(2,0*Ciclo-1,0)/(Ciclo*NlmPeriodo-1,0);

double beta = MathCos(Pi*t);

double g = 1,0/(Coeff*t+1); si (t <= 0,5 ) g = 1;

alphas[k] = g * beta;

}

for(int i=len-1; i>=0; i--) nlm = alphas;

Entonces, si lo he entendido bien:

1/ Primer sted: Calcula todos los alphas de 0 a len-1

Esto es

alphas[k] = g * beta;

2/ Segundo paso: se suman todas las alfas de 0 a len-1

Esto es

for(int i=len-1; i>=0; i--) nlm = alfas;

El problema es que tengo siempre el mismo alfa en mi gráfico ? ¿Cómo se puede tener un alfa diferente en cada vela, ya que k, t y demás son siempre los mismos en cada vela, y no dependen del cierre?

El código que tengo en Prorealtime parece ser el mismo:

Pi=3.14159265358979323846264338327950288

Cyclee = 4.0

Coeff = 3.0*Pi

Fase = NlmPeriod-1

len = NlmPeriod*4 + Fase

alph=0

para k=0 a len-1

t=0

si (k<=Fase-1) entonces

t = 1,0 * k/(Fase-1)

si no

t = 1,0 + (k-Fase+1)*(2,0*Cicloe-1,0)/(Cicloe*NlmPeriodo-1,0)

endif

beta = Cos(Pi*t)

g = 1,0/(Coeff*t+1)

si (t <= 0.5 ) entonces

g = 1

endif

alphas= g * beta

alph=alph+alphas

siguiente

 
zilliq:
Bien,

Primero: una buena noticia, tengo el mismo EUR/USD que tú, ya que será más fácil comparar

Pero no tengo éxito en realidad

Tu código para calcular el alfa es

double Cycle = 4.0

double Coeff = 3.0*Pi;

int Phase = NlmPeriod-1;

int len = NlmPeriod*4 + Phase;

if (ArraySize(alphas) != len) ArrayResize(alphas,len);

for (int k=0; k<len; k++)

{

si (k<=Fase-1)

double t = 1.0 * k/(Fase-1);

si no t = 1,0 + (k-Fase+1)*(2,0*Ciclo-1,0)/(Ciclo*NlmPeriodo-1,0);

double beta = MathCos(Pi*t);

double g = 1,0/(Coeff*t+1); si (t <= 0,5 ) g = 1;

alphas[k] = g * beta;

}

for(int i=len-1; i>=0; i--) nlm = alphas;

Entonces, si lo he entendido bien:

1/ Primer sted: Calcula todos los alphas de 0 a len-1

Esto es

alphas[k] = g * beta;

2/ Segundo paso: se suman todas las alfas de 0 a len-1

Esto es

for(int i=len-1; i>=0; i--) nlm = alfas;

El problema es que tengo siempre el mismo alfa en mi gráfico ? ¿Cómo se puede tener un alfa diferente en cada vela, ya que k, t y demás son siempre los mismos en cada vela, y no dependen del cierre?

El código que tengo en Prorealtime parece ser el mismo:

Pi=3.14159265358979323846264338327950288

Cyclee = 4.0

Coeff = 3.0*Pi

Fase = NlmPeriod-1

len = NlmPeriod*4 + Fase

alph=0

para k=0 a len-1

t=0

si (k<=Fase-1) entonces

t = 1,0 * k/(Fase-1)

si no

t = 1,0 + (k-Fase+1)*(2,0*Cicloe-1,0)/(Cicloe*NlmPeriodo-1,0)

endif

beta = Cos(Pi*t)

g = 1,0/(Coeff*t+1)

si (t <= 0.5 ) entonces

g = 1

endif

alphas= g * beta

alph=alph+alphas

siguiente

Zilliq

Como dije : hay un array de aplhas

Lo que he mostrado ahí es un array de alphas - no tengas en cuenta la componente temporal. Esos son los valores de todos y cada uno de los valores alfa en el array de alphas, Esos son los pesos que se aplican a cada elemento del precio que utiliza para el cálculo

 

Probablemente no entiendo lo que llamas array de alfas (entiendo que son alfas diferentes en cada vela), lo siento

Lo intentaré una vez más...

 
zilliq:

Probablemente no entienda a qué llamas matriz de alfas (entiendo que son alfas diferentes en cada vela), lo siento

Voy a probar una vez más...

Zilliq

Coeficiente (alfa) para el precio 0 == 1

Coeficiente (alfa) para el precio 1 == 0.9nnnnn

y así sucesivamente (como se muestra por el indicador de alfas no lag ma) y todo lo que se utiliza para los precios de len para obtener el valor actual no lag ma

 

Vale, creo que he entendido tus explicaciones (eres genial ) y he hecho diferentes pruebas en MT4 con tu código

los alfa que como valor diferente de 1 a len-1 ponderan el precio y al final dividimos por la suma de los alfa

Por eso el primer valor de alphas a la derecha es siempre 1 y por eso aunque cambiemos el valor de nlm el aspecto de los alphas en el gráfico es siempre el mismo tipo de serpiente)

Bueno, sé que tengo que buscar cómo puedo hacer esto en Prorealtime...