La etiqueta del mercado o los buenos modales en un campo de minas - página 84

 

Neutrón gracias por enviar la tesis


Gracias también por el tema planteado y el constructivo

Hasta ahora he logrado implementar algo similar usando SSAS (lamentablemente, recién hoy leí este hilo y la tesis),

quizás K.N. aprenda algo útil de ello:

1. Agrupar el rango intradiario en varios grupos según el valor medio de la vela H1 y dividir el día en intervalos de tiempo (IT)

(2 racimos y 2 VV, pero un par de yenes resultaron 4 racimos y 7 VV)

2. Se crean modelos para cada instrumento y VI:

- agrupación de movimientos anteriores al alza y a la baja por separado mediante dos parámetros de entrada: el precio y el tiempo

- Agrupación de movimientos futuros al alza y a la baja por separado mediante dos parámetros de entrada: el precio y el tiempo
(este modelo sólo se utiliza, por supuesto, para preparar los datos para la fase de entrenamiento)

- modelos de predicción:
-- naive Bayes

-- regla general

-- reglas de relación

-- NS

-- árbol de decisión

3. basándonos en la desviación mínima de un extremo, construimos un zigzag - obtenemos una estructura f monótona a trozos y, en consecuencia, patrones de N segmentos.

Entrenamos los modelos de agrupación adecuados y agrupamos los segmentos

5. Calculamos el horizonte de predicción del patrón como una fracción de la longitud del patrón o de la longitud fija o al múltiplo más cercano de una fracción mayor de la longitud del patrón

6. Calcular y clasificar la "previsión"

7. Enseñar modelos de pronóstico

Durante su funcionamiento, el Asesor Experto carga los datos en MS SQL y genera periódicamente puntos y previsiones en zigzag. Una vez recibidas, analiza los valores de su soporte y la validez de las normas. Toma una decisión basada en la comparación.


Ventajas:

- Es posible utilizar y comparar los resultados de varios modelos de DM

- los propios modelos pueden elegir entre una variedad de métodos

Desventajas:

- Menos parámetros para configurar los modelos

- funcionamiento de MSSQL que requiere muchos recursos

- Falta de base científica (corrijamos, incluyendo las conclusiones de la mencionada disertación)


Sin invadir en absoluto la gran sombra de la ciencia y las pruebas en la obra mencionada,

Me gustaría mucho pedir a todos los que lean este hilo

sobre la conveniencia de utilizar para la agrupación monótona a trozos entradas adicionales como el volumen, la delta del mercado, etc.

Quizás puedan desempeñar un papel adicional, por ejemplo, de filtro.


S.Privalov: En esencia, este trabajo (disertación) define una metodología para crear un patrón para una previsión.

Imho, eso es lo que estamos hablando - por ejemplo, cuando se obtiene un pronóstico por las reglas de ass. se puede especificar el número N de piezas del patrón y pedir diferente número de pasos de pronóstico por delante y obtenerlos con diferentes apoyos y certezas - es decir, obtenemos un modelo que puede ser utilizado como base para un pronóstico.

¿Crees que es posible/cómo aplicas tu idea de usar la f. de Kalman a ellos?

Tener un modelo/y sería interesante entrenarlo bajo ellos.


Este es el aspecto de los modelos en SSAS, para esta herramienta se han identificado 3 vi

En http://www.fxexpert.ru/forum/in dex.php?showtopic=656 hay bibliotecas de mallas, incluyendo mql y otras cosas útiles.

 

Empecé a profundizar en la red intentando determinar el número óptimo de neuronas ocultas. Llegué a una conclusión bastante interesante, a la que creo que otros han llegado hace tiempo. Intentaré explicarlo de forma intuitiva. Imagina una neurona de capa oculta que tiene 20 entradas. Con estas entradas, como los tentáculos, se estruja en las entradas y en el proceso de estriado se optimizan los pesos de las entradas para obtener las salidas esperadas de la red. Ahora añadimos otra neurona oculta, con 20 entradas conectadas a las 20 entradas de la primera neurona, pero con pesos diferentes. Como la segunda neurona está sondeando las mismas entradas, no aporta esencialmente ninguna información nueva. Si esto es cierto, el entrenamiento de la red conducirá a los mismos pesos de entrada para ambas neuronas. Como las salidas de ambas neuronas se multiplican por los pesos correspondientes de la neurona de salida y se suman, los pesos de entrada de ambas neuronas ocultas pueden diferir entre sí en amplitud por un factor igual a la relación de los pesos de las neuronas de salida.

De todos modos, después de entrenar dicha red 20-2-1, obtengo estos pesos de entrada de dos neuronas ocultas:

Observe que ambos conjuntos de pesos se comportan igual en función del número de entrada, excepto el multiplicador constante. Es decir, ambas neuronas dan la misma información a la neurona de salida. Quizá por eso el error de aprendizaje de mi red apenas mejora tras añadir una segunda neurona oculta. Esta es otra imagen de los pesos de las neuronas ocultas. Aquí difieren por un signo, pero los signos de los pesos de las neuronas de salida también difieren


En general, esta red de dos capas se comporta de forma similar a una red simple de una sola capa (modelo AR). Con esta conclusión me encuentro en un callejón sin salida. Resulta que las redes neuronales sólo son adecuadas para la clasificación, es decir, cuando la salida sólo tiene dos valores: sí o no. Al intentar utilizar la red para la predicción de precios, se obtienen los mismos resultados que con el modelo AR, ya que las salidas de las neuronas no están saturadas y su función de activación no lineal desempeña un papel menor, incluso si normalizamos los datos de entrada a -1...+1. Me voy a tomar una cerveza - tal vez aparezcan nuevas ideas (por ejemplo, para alimentar +1 y -1 a las entradas de la red?)

 
M1kha1l писал(а) >>

Hasta ahora he logrado implementar algo similar usando SSAS (lamentablemente, recién hoy leí este hilo y la tesis),

En http://www.fxexpert.ru/forum/in dex.php?showtopic=656 hay bibliotecas de mallas, incluyendo mql y otras cosas útiles.

Gracias, M1kha1l, por tus amables palabras y por compartir tus conocimientos.

Tu post necesita algo de tiempo para ser comprendido. Lo estoy leyendo ahora.

gpwr escribió >>

Empecé a profundizar en la red intentando determinar el número óptimo de neuronas ocultas. Llegué a una conclusión bastante interesante, a la que probablemente otros llegaron hace mucho tiempo. Intentaré explicarlo de forma intuitiva. Imagina una neurona de capa oculta que tiene 20 entradas. Con estas entradas, como los tentáculos, se estruja en las entradas y en el proceso de estriado se optimizan los pesos de las entradas para obtener las salidas esperadas de la red. Ahora añadimos otra neurona oculta, con 20 entradas conectadas a las 20 entradas de la primera neurona, pero con pesos diferentes. Como la segunda neurona está sondeando las mismas entradas, no aporta esencialmente ninguna información nueva. Si esto es cierto, el entrenamiento de la red conducirá a los mismos pesos de entrada para ambas neuronas. Como las salidas de ambas neuronas se multiplican por los pesos correspondientes de la neurona de salida y se suman, los pesos de entrada de ambas neuronas ocultas pueden diferir entre sí en amplitud por un factor igual a la relación de los pesos de las neuronas de salida.

Gran trabajo, gpwr, ¡no se me había ocurrido mirar los pesos de las neuronas paralelas!

Veamos el proceso de reducción del error de aprendizaje (en rojo) y de reducción del error de generalización (en azul) para la NS multicapa en el proceso de aprendizaje:

Podemos ver que el mínimo del error de generalización (lo que nos da la ventaja estadística en la toma de decisiones) no es el mismo que el mínimo del error de generalización. Esto es comprensible, porque la historia no siempre se repite exactamente, sino que se repite aproximadamente. Y mientras que sólo hay un mínimo global para el aprendizaje, hay muchos mínimos locales para la generalización y no hay manera de elegir el mejor. Sólo puedes adivinar. Y aquí es donde la estadística en forma de múltiples neuronas en una capa oculta pasa a primer plano. Todos ellos están poco entrenados y se "revuelcan" en los mínimos locales, algunos en su mejor momento (en términos de error de generalización), otros en el peor. ¿Lo entiendes? En general, sus soluciones son promediadas por la neurona lineal de salida y dicha estimación es la mejor. Además, el error de estimación disminuye con la raíz cuadrada del número de neuronas en la capa oculta. Por ello, el poder predictivo de NS aumenta con el incremento del número de neuronas en la capa oculta.

Esos datos que has citado hablan del reentrenamiento de la malla y, como consecuencia, del funcionamiento sincrónico de todas sus neuronas en la capa oculta. El NS multicapa ha degenerado en un pseptrón lineal.

 
Neutron >> :

Gracias, M1kha1l, por tus amables palabras y por elegir compartir tus conocimientos.

Se necesita algo de tiempo para comprender tu post. Lo he leído.

Gran trabajo, gpwr, ¡no se me había ocurrido mirar los pesos de las neuronas paralelas!

Veamos el proceso de reducción del error de aprendizaje (en rojo) y el error de generalización (en azul) para el NS multicapa en el proceso de aprendizaje:

Podemos ver que el mínimo del error de generalización (lo que nos da la ventaja estadística en la toma de decisiones) no es el mismo que el mínimo del error de generalización. Esto es comprensible, porque la historia no siempre se repite exactamente, sino que se repite aproximadamente. Y mientras que sólo hay un mínimo global para el aprendizaje, hay muchos mínimos locales para la generalización y no hay manera de elegir el mejor. Sólo puedes adivinar. Y aquí es donde la estadística en forma de múltiples neuronas en una capa oculta pasa a primer plano. Todos ellos están poco entrenados y se "revuelcan" en los mínimos locales, algunos en su mejor momento (en términos de error de generalización), otros en el peor. ¿Lo entiendes? En general, sus soluciones son promediadas por la neurona lineal de salida y dicha estimación es la mejor. Además, el error de estimación disminuye con la raíz cuadrada del número de neuronas en la capa oculta. Por ello, el poder predictivo de NS aumenta con el incremento del número de neuronas en la capa oculta.

Esos datos que has citado hablan del reentrenamiento de la malla y, como consecuencia, del funcionamiento sincrónico de todas sus neuronas en la capa oculta. El NS multicapa ha degenerado en un perseptrón lineal.

Mi red recibió 300 ejemplos de entrenamiento y el número de pesos fue de 45. En la literatura existe la opinión de que con 5 veces más ejemplos de entrenamiento que pesos, la red con un 95% de probabilidad será generalizada. Es decir, mi red debe tener una buena generalización según la teoría, pero en realidad no es así. Por eso he puesto ejemplos para confirmarlo. Creo que la cuestión aquí no es tomar más ejemplos de formación. Se trata de la naturaleza del problema que estoy obligando a la red a resolver. Si se intenta que la red prediga el tamaño del siguiente paso del precio, entonces en el entrenamiento tenderá a tales pesos en los que las neuronas operan en la zona lineal de la función de activación para preservar la proporcionalidad entre el paso predicho y los pasos pasados de entrada. Es decir, la tarea en sí es lineal. Dada esta situación, añadir neuronas ocultas no mejorará nada. Y la propia capa oculta se vuelve innecesaria. Experimentando con mi red, llegué a la conclusión de que una sola capa funciona tan bien como una doble. Creo que, leyendo tus posts anteriores en este hilo, has llegado a la misma conclusión para el EURUSD también.

En mi opinión, la red debería utilizarse para problemas altamente no lineales (como los problemas XOR o de clasificación) para los que se puede elegir que la función de activación de las neuronas sea escalonada.


 

Quería señalar que la esencia del efecto detectado puede explicarse por el sobreentrenamiento de NS debido a un número excesivo de épocas de entrenamiento, y debe haber un óptimo en el número de épocas de entrenamiento Nopt (véase la figura anterior), que depende del coeficiente de la tasa de aprendizaje. No he dicho que debamos "...para tomar aún más ejemplos de entrenamiento. ", esta es la esencia del problema de la longitud óptima de la muestra de entrenamiento Rorth=w*w/d. Eso es lo que dice la teoría, no que "...el número de ejemplos de entrenamiento es 5 veces el número de pesos..." .

Estamos hablando de diferentes causas del efecto de sobreentrenamiento de la red.

Estoy de acuerdo contigo en que la tarea de predecir el signo y la amplitud de la siguiente barra es predominantemente lineal y no puede haber nada más. El mercado es tan sencillo como una palanca y tan imprevisible como una previsión meteorológica. Aunque, un poco más tarde, publicaré los resultados comparativos de la calidad de las predicciones en barras horarias para una capa, doble capa con dos neuronas en la capa oculta y doble capa con 4 neuronas en la capa oculta. Todo ello se presentará en función del número de entradas d del NS. Los datos se promediarán en 50 experimentos numéricos independientes.

 

No hay manera... ¿poner un caballo y una cierva en el mismo carro? Me refiero a MT4 y MathCad. Para recibir las cotizaciones actuales directamente en MathCad y realizar todo el análisis allí, y luego transferir la señal generada a MT4. Lo primero que se me ocurre es utilizar el archivo, pero ambos programas deben comprobar el contenido de dos archivos diferentes todo el tiempo. No es muy conveniente. ¿Tal vez haya algo más? Es una pena que no haya manejo de interrupciones en MQL. ¡Qué inconveniente tiene todo! МТ4, este maldito... Podría sentarme y estudiar C++.


P.D. Estoy trasteando con los datos para la parrilla.

 

No, ¿es aburrido implementar todo el algoritmo de análisis en MQL? ¿O es que las dificultades son desorbitadas de alguna manera?

P.D. Y estoy obteniendo estadísticas...

 

Sí, hay dificultades con el MQL en todo momento. Por ejemplo, aquí está el código más simple (indicador) para dividir un cociente en un número de transacciones:

#property indicator_chart_window
#property indicator_buffers 2

#property indicator_color1 Red
#property indicator_color2 MediumBlue

extern int step = 5;
extern int sp = 3;

double Trans[], Kagi[];
int mn, mx, H, Cotir, Up, Dn;
bool set_new=false, SetMax=false, SetMin=false;

//******************************************************************************
int init() 
{ 
SetIndexBuffer(0, Trans);
SetIndexBuffer(1, Kagi);

SetIndexEmptyValue(0,0.0);
SetIndexEmptyValue(1,0.0);

SetIndexStyle(0,DRAW_ARROW);
SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(0,119);
SetIndexArrow(1,162);

IndicatorShortName ("Kagi++");
return(0); 
} 
//*******************************************************************************

int start() 
{ 
int reset, MaxBar, MaxBarJ, counted_bars=IndicatorCounted(), mx_j, mn_j;

if ( counted_bars<0)return(-1);
if ( counted_bars>0) counted_bars--;
int limit=Bars- counted_bars-1; MaxBar=Bars-2; MaxBarJ= MaxBar-30; 
if ( limit==Bars-1) limit=Bars-2;

//----+ ОСНОВНОЙ ЦИКЛ ВЫЧИСЛЕНИЯ ИНДИКАТОРА 
for(int i= limit; i>=0; i--)
   {
     Cotir = Open[ i]*MathPow(10.0,Digits);
          
     if(! set_new)
      {
        mx = Cotir;
        mn = Cotir;
        H = step* sp;
        set_new = true;
      }               
     if( Cotir - mx > 0)
      {
        mx = Cotir;
        mx_j = i;
      }  

     if( Cotir - mn < 0)
      {
        mn = Cotir;
        mn_j = i;
      }  

     if(! SetMax && Cotir <= mx - H) 
      {
         Trans[ i] = Cotir/MathPow(10.0,Digits); 
         mn = Cotir;           
         mn_j = i;
         SetMax = true;
         SetMin = false;
         Kagi[ mx_j] = mx/MathPow(10.0,Digits);
      } 
     if(! SetMin && mn + H <= Cotir) 
      {
         Trans[ i] = Cotir/MathPow(10.0,Digits); 
         mx = Cotir;       
         mx_j = i;
         SetMax = false;
         SetMin = true;
         Kagi[ mn_j] = mn/MathPow(10.0,Digits);
      } 

   }
return(0);  
}


Funciona pero no podemos dibujar sus resultados con líneas en la ventana del gráfico. Además, (esto está fuera de mi entendimiento) si el spread se divide por menos de 6 spreads, no sale nada en absoluto, a pesar de que los arrays se forman correctamente. En MQL, así como en cualquier tecnología homebrew hay un montón de dificultades completamente inesperadas (empezando por la doble comparación y demás...) y "peculiaridades", por supuesto no documentadas. Estoy regañando, en general...

También entiendo cómo comprobar la rejilla en MathCad, pero ¿cómo hacerlo en MQL - no se puede pensar? ¿Y si tengo un error en alguna parte?

 
paralocus писал(а) >>

Sí, hay dificultades con el MQL en todo momento. Este es el código más sencillo, por ejemplo, para dividir un cociente en un número de operaciones:

ver anexo - dibujar - disfrutar

paralocus escribió >>

También sé cómo comprobar la rejilla en MathCad, pero cómo hacerlo en MQL - no tengo ni idea. >> ¿Y si tengo un error en alguna parte?

¿Por qué no considerar el uso de NeuroShell o Statistics? Allí puedes crear mallas y ponerlas en bibliotecas para luego entrenarlas desde MT y controlar sus parámetros
Archivos adjuntos:
 

Parece que no voy a poder esperar a recoger las estadísticas de mi EM...

Creo que tendré que abandonar la idea de presentar los datos de precisión de las predicciones en incrementos de 1 por el número de entradas NS. Por ejemplo, podemos simplificar la tarea tomando el número de entradas como múltiplo de 2...