Discusión sobre el artículo "Hablando de nuevo sobre los mapas de Kohonen" - página 3

 
Por cierto, tomó los otros datos. De nuevo en la tercera imagen hay un arco iris. Supongo que esto sucede debido a su interferencia en el código desde el que escribió este artículo. Usted escribió en el artículo que hizo varias modificaciones.

Capturas de pantalla de la plataforma de comercio MetaTrader

GBPUSD, H1, 2017.03.01

Alpari International Limited, MetaTrader 5, Demo

¿Qué es el arco iris?

GBPUSD, H1, 2017.03.01, Alpari International Limited, MetaTrader 5, Demo


 
Viktor Vasilyuk:
Por cierto, tomó los otros datos. De nuevo en la tercera imagen hay un arco iris. Supongo que esto sucede debido a su interferencia en el código con el que escribió este documento. Escribiste en el paper que hiciste algunas modificaciones.



Normalizar la aleatoriedad al inicializar los nodos no limita los propios nodos al entrenar. Puedes inicializar los nodos con unidades, no afectará al resultado.

Pero puede afectar a la velocidad de obtención del resultado.

El hecho de que inicialice los nodos con valores aleatorios del campo entre el mínimo y el máximo para cada una de las columnas por separado, simplemente acelera la convergencia, porque SOM no tiene que conducir los nodos a los campos especificados al principio.

Este proceso está orgánicamente entretejido en el propio proceso de aprendizaje, por lo que ni siquiera se puede decir que este es el momento en el que la malla está conduciendo y este es el momento en el que está aprendiendo. Conducir en un campo determinado significa ajustar el nodo con un coeficiente de cambio muy grande.

Así que, fundamentalmente, mi intervención no cambió nada. Sólo aceleró la velocidad de convergencia.

Pero si tienes quejas sobre este mecanismo, eres libre de arreglarlo. Cambiar la inicialización de los nodos al crear la rejilla en Include\SOMNode.mqh

//+------------------------------------------------------------------+
//| Inicialización de los parámetros del nodo en el límite establecido |
//+------------------------------------------------------------------+
void CSOMNode::InitNode(int x1,int y1,int x2,int y2,const double &min_values[],const double &max_values[])
  {
//--- establece las coordenadas del nodo
   m_x1=x1;
   m_y1=y1;
   m_x2=x2;
   m_y2=y2;
//--- cálculo de las coordenadas del centro del nodo
   m_x=x1+MathAbs((x2-x1))/2;
   m_y=y1+MathAbs((y2-y1))/2;
//--- prepara un array de pesos
   ArrayResize(m_weights,m_dimension);
//--- inicialización de los pesos con valores aleatorios;
   for(int i=0; i<m_dimension; i++) {m_weights[i]=min_values[i]+(max_values[i]-min_values[i])*rand()/32768;}
  };

Pon rand() sin normalizar y será exactamente como en el algoritmo original. Así: m_pesos[i]=rand();

 

¿Estoy en lo cierto al entender que si se crea un archivo "optim.csv" como este:

i;Title
-0.195;2017.04.04
0.086;2017.04.03
-0.195;2017.03.31
-0.195;2017.03.30
-0.195;2017.03.29
0.086;2017.03.28
-0.195;2017.03.27
-0.195;2017.03.24
0.086;2017.03.23
0.086;2017.03.22

sólo hay dos valores:

  • -0.195
  • 0.086

entonces ejecutando "Sample5_SOM_Net_Player" mostrará algo como esto

inicio 1 inicio 2

es decir, la red Cohen encontró que el archivo "optim.csv" tiene dos ... ¿Dos qué? ¿Patrones?


 

Es decir, si quiero estudiar dos barras vecinas - si son alcistas o bajistas, necesito hacer una descripción de tales secuencias, algo como esto:

Dos bares vecinos

Al final habrá cuatro secuencias principales ("11", "12", "21", "22") y una quinta - cuando alguna barra no es ni alcista ni bajista (el tamaño del cuerpo de la barra es cero).


A continuación, sólo tiene que ir a través del número dado de barras y hacer un archivo "optim.csv" en el que escribir estas secuencias. Obtendrá algo como

i;Time
21;2017.04.03
11;2017.03.31
11;2017.03.30
11;2017.03.29
12;2017.03.28
22;2017.03.27
21;2017.03.24
11;2017.03.23
12;2017.03.22

Luego ejecute "Sample5_SOM_Net_Player". ¿Correcto?

 

Usted tiene dos valores, pero ha ordenado 250 nodos (50x50), por lo que naturalmente la rejilla extiende los nodos por todo el campo de valores intermedios.

Además, ha introducido un valor insignificante Tiempo en el campo de agrupación. Si desea utilizar el tiempo, entonces la estructura de datos debe reflejar de alguna manera la periodicidad, de lo contrario cómo entenderá la rejilla en qué se diferencia el lunes del viernes. Tal representación del tiempo como usted tiene es razonable al menos en los datos de varios años, entonces se reunirán repeticiones (si se quitan los valores del año, por supuesto).

Entender una idea simple, la rejilla de Kohonen coloca nodos en la vecindad de similares (en términos multivariantes) ejemplos. Y entonces todo encajará con la comprensión del trabajo.

 
Nikolay Demko:

Usted tiene dos valores, pero ha ordenado 250 nodos (50x50), por lo que naturalmente la rejilla extiende los nodos por todo el campo de valores intermedios.

Además, ha introducido un valor insignificante Tiempo en el campo de agrupación. Si desea utilizar el tiempo, entonces la estructura de datos debe reflejar de alguna manera la periodicidad, de lo contrario cómo entenderá la rejilla en qué se diferencia el lunes del viernes. Tal representación del tiempo como usted tiene es razonable al menos en los datos de varios años, entonces se reunirán repeticiones (si se quitan los valores del año, por supuesto).

Entender una idea simple, la rejilla de Kohonen coloca los nodos en la vecindad de similares (en términos multivariantes) ejemplos. Y entonces las cosas caerán en su lugar con la comprensión del funcionamiento.


Si rehago el archivo csv con este formato: [tamaño del cuerpo de la vela][día de la semana (1, 2, 3, 4, 5)] y lo relleno para, digamos, 100 barras, ¿terminaré con 100 EJEMPLOS en el archivo csv? ¿Y cuántos nodos poner en ese caso? 3*3?
 
Vladimir Karputov:

Si rehago el archivo csv con este formato [tamaño del cuerpo de la vela][día de la semana (1, 2, 3, 4, 5)] y lo relleno para, digamos, 100 barras, ¿terminaré con 100 EJEMPLOS en el fichero csv? ¿Y cuántos nodos poner en ese caso? 3*3?


Depende de lo que quieras obtener, clustering o regresión.

Clustering combinará varios ejemplos en un cluster, luego el número de nodos debe ser menor que el número de ejemplos.

La regresión requerirá más nodos que ejemplos, para cubrir campos en puntos que no están representados en los ejemplos.

De nuevo este proceso no es binario, por lo que no se puede decir que sea clustering, sino que es regresión, imagínatelo como un espectro multidireccional, a más clustering menos regresión y viceversa. Y en el punto cero, cuando el número de nodos es igual al número de ejemplos, tenemos aproximadamente las mismas cantidades de agrupación y regresión.

 
Nikolay Demko:


Depende de si desea clustering o regresión.

El clustering combinará varios ejemplos en un cluster, luego el número de nodos debe ser menor que el número de ejemplos.

La regresión requerirá más nodos que ejemplos, para cubrir campos en puntos que no están representados en los ejemplos.


Para simplificar, quería obtener una visualización para cuatro secuencias:

Foro sobre negociación, sistemas automatizados de negociación y prueba de estrategias de negociación.

Discusión del artículo "Una vez más sobre los mapas de Kohonen"

Vladimir Karputov, 2017.04.04 13:49

Es decir, si quiero investigar dos barras vecinas - si son alcistas o bajistas, necesito hacer una descripción de tales secuencias, algo así como:

Dos bares vecinos

Al final habrá cuatro secuencias principales ("11", "12", "21", "22") y una quinta - cuando alguna barra no es ni alcista ni bajista (el tamaño del cuerpo de la barra es cero).


en un número determinado de barras. Es decir, ejecuto el script sobre un número determinado de barras y asigno una de las cinco secuencias ("0", "11", "12", "21", "22"). También asigno un día de la semana. Obtengo 100 ejemplos de [nombre de la secuencia][día de la semana] para 100 compases.

 
Vladimir Karputov:


Bien, para simplificar, quería una visualización para cuatro secuencias:


en un número determinado de compases. Es decir, paso el script sobre un número dado de compases, y le asigno una de las cinco secuencias ("0", "11", "12", "21", "22"). También le asigno un día de la semana. Al final tengo 100 ejemplos de [nombre de la secuencia][día de la semana] para 100 compases.


Lo siento, no lo entiendo, si tienes una combinación de condiciones y las conoces exactamente, ¿para qué necesitas una cuadrícula?

Si no, es mejor mostrar en la rejilla lo que te interesa, por ejemplo, la diferencia Open[i]-Close[i] en una columna y la diferencia Open[i+1]-Close[i+1] en otra columna, y ya en base a la agrupación establecer las condiciones que cluster interpretar.

 
Nikolay Demko:


Lo siento, no lo entiendo, si tienes una combinación de condiciones y sabes exactamente cuáles son, ¿para qué necesitas una cuadrícula?

***

  1. Las combinaciones ("0", "11", "12", "21", "22") te las acabo de poner de ejemplo hoy. No tengo ni idea de si funcionan o no. Eso es lo que pregunto: si se me ocurren todo tipo de combinaciones, ¿cómo me ayudará la cuadrícula? Pensaba que esta rejilla mostraría visualmente (¿número?) de aciertos de mis ejemplos en determinados grupos (clusters?).
  2. Bien, si hago "... por ejemplo, la diferencia entre Abrir[i]-Cerrar[i] en una columna, y la diferencia entre Abrir[i+1]-Cerrar[i+1] en otra columna, ..." ¿cuál es la respuesta? Bueno, veré diferentes colores, pero ¿cuál es cuál?