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

 
Yurixx:
Privado:

Pero VBAG primero posteó 1 indicador, luego lo sustituyó por otro (lo vi todo :-) ), y posteó el tercero, pero ya experto. Y todavía no puedo ver la imagen en movimiento, que me convenza de que el matemático tiene razón. El militar de cabeza dura es tan "tonto" :-) en la fe ciega no toma :-)


No sé, Sergey, por qué necesitas imágenes en movimiento, pero puedo hacerte un indicador con 2 líneas. Uno LRMA, el otro 3*LWMA-2*MA. Se superpondrán completamente, es decir, uno de ellos no será visible por el otro. Si se apaga el color del otro, se ve el primero. Si enciendes el color, sólo ves el otro.

Yo también te enviaría una prueba de equivalencia, es corta - sólo una docena de líneas. Pero se basa en fórmulas derivadas analíticamente para aplicar la regresión lineal. Bueno, no para contar todo en números, y si es posible utilizar fórmulas finitas - el menor número de ciclos, más rápido se cuenta. Pero esto es bastante largo cálculos, no quiero perder el tiempo en Word.


Gracias. Intentaré hacerlo yo mismo. Necesito una distracción. Por fin he terminado el filtro Kalman. Pero hace una semana que no puedo ejecutarlo en el probador. Me temo que si funciona :-(. Estoy buscando errores para tratar de preparar mejor sus datos y hacer que la predicción sea aún más precisa. Funciona en Matkadec, pero me da miedo ejecutarlo en el probador.

 
VBAG:
Si tienes algoritmos más ágiles para calcular los guiones o la regresión, ¡sería muy interesante echarle un vistazo!

Los algoritmos son demasiado ruidosos para llamarlos, pero puedo darte una idea. El principio es simple: se gana en velocidad, se pierde en memoria. Como la primera se requiere más, cargamos la memoria.

Por ejemplo, un simple SMA. El algoritmo incorporado debe ser universal y calcularlo en cualquier lugar, independientemente del contexto. Y puedes utilizar los resultados de los cálculos anteriores en tu propio programa. Para calcular el nuevo valor de la SMA, hay que tomar la suma de los N valores anteriores del precio, restarle el primero y añadir el nuevo valor actual. Esta suma se divide por N. Por lo tanto, debemos transportar la variable suma de los N precios anteriores y el array de estos N precios y actualizar la suma y el array en cada barra. Como resultado, para calcular la SMA en cada barra, necesitamos ejecutar 3 operadores: Actualizar la suma, actualizar el elemento del array y calcular el valor de la SMA. Sin bucles.

 
Prival:

Pero hace una semana que no puedo ejecutarlo en el probador. Me temo que podría funcionar:-( .


Sí, eso también ocurre. :-))
 
LeoV escribió:
Aquí están, por ejemplo, JMA y SSA con un período de 50. Pero tengo CSSA basado en SSA pero no redibujo. Muy rápido. Recomiendo este algoritmom.....

Off-topic, por supuesto, pero sigue siendo interesante - LeoV, ¿podría mostrarme una imagen del indicador CSSA Cycles del mismo desarrollador (se ve muy bien en las acciones)? Quiero ver cómo se ve en las cotizaciones de divisas.
 
Yurixx:
Este método probablemente tenga sentido, pero sólo si los periodos son cortos. Y la memoria no es la razón principal. Un reinicio perderá lo que estamos arrastrando. Gracias por la respuesta.
 
Prival:

El filtro Kalman está finalmente terminado.

He oído que está impulsando el tema de Kalman. Por alguna razón me perdí esa discusión. ¿Dónde puedo verlo?

P.D. He adjuntado un archivo sobre el tema, quizás a alguien le interese.
Archivos adjuntos:
 
Sí, si te llamas cobarde, te metes en la caja. Bien, Sergey, aquí tienes una prueba (la necesito de todos modos, para mi propia confianza):

Tengamos muestras de tiempo - t = 1, 2, ... N. La numeración se invierte en MQL4, es decir, N es la barra actual, "cero". Estas lecturas corresponden a la cláusula Сlose(1), Сlose(2), ... Сlose(N). Intentemos construir una línea recta y = A*t+B que pase por los claustros por MNC. A continuación, calculamos A*N + B, es decir, LRMA en la barra actual.

Calculamos la suma de los cuadrados del error:

Delta^2 = Suma( ( y(i) - Close(i) )^2; i = 1..N ) = Sum( ( A*i + B - Close(i) )^2; i = 1..N )

Diferenciamos esto por A y B y obtenemos un sistema de ecuaciones para los cocientes óptimos de A y B:

Suma( ( ( A*i + B - Close(i) ) * i ); i = 1...N ) = 0
Suma( A*i + B - Close(i) ); i = 1...N ) = 0

Expandiendo las sumas, obtenemos (omito los rangos de índices para simplificar la notación)

A*Suma( i^2 ) + B*Suma( i ) = Suma( i*Cerrar(i) )
A*Suma( i ) + B*Suma( 1 ) = Suma( Close(i) )

Prival, ahora mira los lados de la derecha. La suma de la derecha en la primera ecuación es casi LWMA, sólo que sin el factor de normalización. En la segunda, es SMA, también sin ella. Aquí están las fórmulas exactas de estas escalas:

LWMA = 2/(N*(N+1)) * Suma( i*Close(i) )
SMA = 1/N * Suma( Close(i) )

Ahora recuerda a qué equivale la suma de los cuadrados de los naturales 1 a N (es N*(N+1)*(2*N+1)/6), sustitúyelo en nuestro sistema y obtendremos:

A * N*(N+1)*(2*N+1)/6 + C * N*(N+1)/2 = LWMA * N*(N+1)/2
A * N*(N+1)/2 + C * N = SMA * N

Simplificando:

A * (2*N+1)/3 + C = LWMA
A * (N+1)/2 + C = SMA

No voy a resolver el sistema, me da mucha pereza (aquí ya está claro). Simplemente multiplicaré la primera ecuación por 3, y la segunda por 2, y luego restaré la segunda de la primera:

A * (2*N+1) + 3 * C - A * (N+1) - 2 * C = 3 * LWMA - 2 * SMA

A la izquierda, tras la simplificación, queda A*N + B, es decir, exactamente nuestra regresión en el punto N.
 
¡Alexey! ¡Respeto de nuevo! Me he preguntado de dónde viene el "/6" en mi fórmula LRMA (o debería decir fórmula Omega).
 
VBAG:
Este método probablemente tenga sentido, pero sólo si los periodos son pequeños. Y la memoria no es la razón principal. Al reiniciar, lo que arrastramos se perderá. Pero genial, gracias por la respuesta.


Este método es bueno para cualquier periodo. Cuando se reinicia, todo, por supuesto, se pierde. Sin embargo, al inicio, siempre podemos ejecutar primero este algoritmo poco sofisticado a través de todo el gráfico, creando la información necesaria. También es posible no ejecutarlo en todo el gráfico, sino sólo en una parte suficiente del mismo.

Este método sólo tiene una desventaja: en lugar de un iMA hay que escribir un cierto número de líneas de código a mano. :-)

 

Alexei, gracias. Me sentaré con un lápiz. Las derivadas de A y B son así


He comprobado dos veces la respuesta, y efectivamente A*N+B=3*LWMA-2*SMA

aunque el matemático falló un dos al tomar la derivada.

y tengo algunas dudas, que no deben coincidir en el punto N, sino en (N-1)/2. Bulashev p.156. Eso parece. Aquí hay una imagen que coincide en el punto N. Así que estoy bastante equivocado.