Diálogo del autor. Alexander Smirnov. - página 37

 
Esta fórmula RMS^2 = M[X^2] - (M[X])^2 es en realidad para la varianza, es decir, para una característica perfecta. Lo más probable es que en su derivación las sumas "cruzadas" se hayan eliminado explícita o implícitamente. Para las muestras grandes, esto es suficientemente correcto. Pero en el caso de las muestras pequeñas, la RMS real puede ser diferente. Pero aún no he podido comprobarlo.
 
Mathemat:

Yura, quieres contar el RMS más rápido que la función estándar. ¿Y si funciona? Para una sola llamada debería ser más rápido que cualquier código escrito en el lenguaje, pero para la masa (cálculo de todo el gráfico) es posible ahorrar en costes.


Si hablamos de sco para la regresión lineal, se calcula analíticamente en un paso mediante la fórmula

SKO^2=D[Y] - D[X]*A^2,

donde D[Y]=M[Y^2]-M[Y]^2, D[X]=M[X^2]-M[X]^2, y A es el coeficiente de regresión lineal Y=A*X+B

Así que la recurrencia no es necesaria aquí.

PS Y las sumas cruzadas se reducen a cero de forma explícita y puramente analítica. El tamaño de la muestra no tiene nada que ver.

 
Prival:

Sigue habiendo un error 2008.02.15 17:07:22 2007.01.11 12:15 OTF_1 EURUSD,M1: argumento negativo para la función MathSqrt

A juzgar por el contenido del error, el MathSqrt(lambda*lambda*lambda+16,0*lambda*lambda) debe estar por aquí. Pero lambda=MathAbs(Valor1[i]/Valor2[i]) ;no puede ser negativa.
Por eso lo único que se me ocurre, por si acaso, es ejecutar lambda=0,0;
y/o MathSqrt(MathAbs(lambda*lambda*lambda*lambda)) para eliminar este error para siempre.
//---- bucle principal
doble alfa, lambda=0,0 ;
//********************************************************************************************
for (i = límite; i >= 0; i--)
{
Price[i]=(High[i]+Low[i])/2.0;
}
for (i = límite; i >= 0; i--)
{
Value1[i]=SC*(Price[i]-Price[i+1])+4*SC*Value1[i+1];
Value2[i]=SC*(High[i]-Low[i])+4*SC*Value2[i+1];
}
for (i = límite; i >= 0; i--)
{
if(Valor2[i]< Punto)Valor2[i]= Punto;si no lambda=MathAbs(Valor1[i]/Valor2[i]);

alfa=(-lambda*lambda+ MathSqrt(lambda*lambda*lambda) )/8,0;

Value3[i]=alpha*Price[i]+(1.0-alpha)*Value3[i+1];
}
//********************************************************************************************

P.D. En general, no tiene sentido. Este error debe estar apareciendo en su probador.
P.P.S. Lo más probable es que la variable doble lambda; se haya inicializado por defecto con una basura negativa muy pequeña. Entonces la expresión doble lambda=0,0; debería ayudar.
Slava nos enseña que nunca hay que trabajar por defecto y que no se aprende.
 
VBAG:
Privado:

Sigue habiendo un error 2008.02.15 17:07:22 2007.01.11 12:15 OTF_1 EURUSD,M1: argumento negativo para la función MathSqrt


P.D. Es una locura. ¿Es probable que este error aparezca en su probador?
P.P.S. Lo más probable es que la variable doble lambda; se haya inicializado con una basura negativa muy pequeña por defecto. Entonces la expresión doble lambda=0,0; debería ayudar.
Slava nos enseña que nunca hay que trabajar por defecto y que no se aprende.

Los botniks locales siempre tratan de inventar alguna bicicleta.

No te preocupes por nada. Entre los índices personalizados está Bands.mq4 - hay un algoritmo de cálculo de RMS
 
<br / translate="no">

SKO^2=D[Y] - D[X]*A^2,

donde D[Y]=M[Y^2]-M[Y]^2, D[X]=M[X^2]-M[X]^2, y A es el coeficiente de regresión lineal Y=A*X+B

Así que la recurrencia no es necesaria aquí.

Hay muchas cosas innecesarias en estas fórmulas.
¿Y qué quiere decir que la recurrencia es innecesaria, cómo se supone que se calculan las sumas? ¿O tiene una idea de cómo hacer sin sustituir la expectativa por la media?

P.D. Por cierto, las sumas cruzadas no salen solas. Al menos yo no lo hice. Intenta trabajar no con la varianza sino con la expresión "real"
 
RMS para cualquier función

sq = 0.0;
for (int n=0; n<period; n++)
{
   dc = Close[n] - fx[n];
   sq += dc * dc;
}
sq = MathSqrt(sq/period);
Por lo tanto, para la regresión lineal es

sq = 0.0;
for (n=0; n<p; n++)
{
   lr = b + a * n;  
   dc = Close[n] - lr;
   sq += dc * dc;
}
sq = MathSqrt( sq / p );
 
ANG3110:
En consecuencia, para una regresión lineal sería

sq = 0.0;
for (n=0; n<p; n++)
{
   lr = b + a * n;  
   dc = Close[n] - lr;
   sq += dc * dc;
}
sq = MathSqrt( sq / p );

Esto es por definición. Si el LR no es demasiado corto, se puede calcular el RMS con mayor precisión, sin ningún ciclo adicional. Hay código para el cálculo de RMS en el código fuente MovingLR.mq4, pero está comentado y RMS se llama rmsY.
 
lna01:

SKO^2=D[Y] - D[X]*A^2,

donde D[Y]=M[Y^2]-M[Y]^2, D[X]=M[X^2]-M[X]^2, y A es el coeficiente de regresión lineal Y=A*X+B

Así que la recurrencia no es necesaria aquí.

Hay mucha redundancia en estas fórmulas.
¿Y qué quieres decir con que la recurrencia no es necesaria, cómo se supone que se calculan las sumas? ¿O tienes una idea de cómo evitar la sustitución de los pagos esperados por una media?

P.D. Por cierto, las sumas cruzadas no salen solas. Al menos yo no lo hice. Intenta trabajar no con la varianza sino con la expresión "real"


Muy ansioso por saber qué podría ser superfluo en estas fórmulas ? :-)

Por supuesto, la MO se sustituye por la media y hay que calcular las sumas. Sin embargo, no es necesaria la recurrencia o incluso un ciclo. La siguiente fórmula será suficiente

S(X)[i+1]=S(X)[i] - X[i-N+1] + X[i+1] donde S(X)[i]=Suma(X[k]; k=i-N+1, i-N+2, ...,i-1,i )

¿Quizás se refiere a esta expresión cuando habla de recurrencia? Entonces, por supuesto, tienes razón.

En cuanto a la "expresión real", ¿de dónde crees que salen todas esas fórmulas? Pues bien, si se sustituye en esta "expresión real" las fórmulas finitas derivadas de la MNC para A y B, entonces se obtiene simplemente la expresión anterior para la RMS. Puedo darle los cálculos analíticos correspondientes.

 
Yurixx:
lna01:


Puedo darle los cálculos analíticos pertinentes.


Si no es mucha molestia, por favor da más detalles desde aquí. Con los nuevos datos los coeficientes A y B pueden cambiar, creo, aunque puedo estar equivocado :-). Para LR parece estar resuelto, pero para la regresión parabólica ¿cómo?
 
lna01:
Esto es por definición. Si el LR no es demasiado corto, se puede calcular el RMS con mayor precisión, sin ningún ciclo adicional. Hay un código para el cálculo del RMS en el código fuente MovingLR.mq4, pero está comentado y el RMS se llama rmsY.
Sí, puedes hacerlo una vez y restar el último elemento y añadir el nuevo primero. Entonces funciona sin ciclo. Hice tales cosas con mql2, en MT3. Incluso ahora lo hago cuando es necesario y no sólo para la regresión lineal.