Red neuronal en forma de guión - página 4

 
rip:
YuraZ:

No siempre es necesario normalizar, ¿quién dice que la parrilla PUEDE y DEBE funcionar sólo con 0 y 1?


Puedo adjuntar una retícula sencilla con un ejemplo, (desgraciadamente no hay materiales a mano ahora mismo) - lo haré más tarde

donde una simple NN resuelve este problema sin preparación de datos con normalización

lamentablemente esta no es la fuente


el ejemplo que di, sin embargo! es como si ya estuviera normalizado

la condición tiene dos rangos


1 0-100

2 10-30


sólo hay que encontrar la relación de la posición en un rango - que se sabe que

en esencia esto es escalar.

La normalización es casi siempre necesaria. Los datos deben estar dentro del rango de definición de la función de activación.

En el guión la sigmoide es [-1;+1]. Si lo sustituyes por, digamos, un exponencial ... o raíz cuadrada.


http://www.statsoft.ru/home/portal/applications/NeuralNetworksAdvisor/Adv-new/ActivationFunctions.htm








http://www.statsoft.ru/statportal/tabID__32/MId__141/ModeID__0/PageID__354/DesktopDefault.aspx


aquí hay un ejemplo de creación de red ... La entrada es BAJA, es decir, no hay normalización

 
YuraZ:

http://www.statsoft.ru/statportal/tabID__32/MId__141/ModeID__0/PageID__354/DesktopDefault.aspx


aquí hay un ejemplo de creación de red ... la entrada es BAJA, es decir, no hay normalización


El uso de datos no normalizados es a veces muy útil. No pierden la información, que puede perderse durante las transformaciones.

Y no existe un mecanismo formalizado para determinar la informatividad de la muestra de entrenamiento...


Por cierto, el artículo no muestra en ninguna parte qué función de activación se utiliza. Aparentemente, algo con el área de definición [-inf;+inf] o [0;+inf] ...

 

ha cambiado un poco el programa.

ha cambiado ligeramente el formato de salida


ahora SCRIPT considera un deber calcular los datos de salida con gran precisión

Por supuesto, el programa no es universal, sino especializado para una serie de entradas y salidas.

pero el tamaño de la capa oculta se ajusta en el proceso de aprendizaje



la próxima versión - trataré de hacerlo flexible en el número de entradas y salidas

y si tiene éxito, añadiré un algoritmo genético

cuyo objetivo será matar a las NEURONAS con un gran número de errores

¡y reproducir las neuronas con pocos errores!

es decir, buscar las neuronas de la matriz que tengan el menor número de errores y criar a partir de ellas para reemplazar

esas neuronas que se han comportado mal...


1 El índice de aprendizaje es actualmente bajo

2 Cambio - el número de neuronas ocultas del 1er nivel es aleatorio sin lógica

3 Detiene el proceso de aprendizaje si obtiene una alta precisión en los datos de muestra de entrada y salida


Archivos adjuntos:
 

¿Cómo se usa esto? Poner un guión en el gráfico, montones de números comenzaron a reescribir... ¿Qué dicen estas cifras?

 
Blast:

¿Cómo se usa esto? Poner un guión en el gráfico, montones de números comenzaron a reescribir... ¿Qué dicen estas cifras?

¿Para qué los necesita? Tengo mi propio algoritmo de AG, pero apenas he entendido el código: necesito tiempo para averiguar dónde poner las entradas, cómo darles salida, cuándo comprar-liquidar y si puedo hacerlo... ¿O estás aquí por el grial?

 
Loknar:
Explosión:

¿Cómo se usa esto? Poner un guión en el gráfico, montones de números comenzaron a reescribir... ¿Qué dicen estas cifras?

¿Para qué los necesita? Tengo mi propio algoritmo de AG, pero apenas he entendido el código: necesito tiempo para averiguar dónde poner las entradas, cómo sacarlas y cuándo comprarlas, si es que lo hago... ¿O tal vez usted está detrás del grial aquí?

Blast , no busques un Asesor Experto o un indicador - está muy lejos.


Esto es más bien un estudio de los principios de una red neuronal en MQL4

---

en general, es razonable escribirlo en C++ en forma de DLL, o en otros lenguajes rápidos


Loknar - es sólo una modificación de la secuencia de comandos desde el principio para tratar de obtener una salida más precisa

--

por cierto trató de añadir una capa :-), por no hablar de las salidas de las entradas ... el algoritmo de aprendizaje de la tubería muere en un momento...


---

quiere probar algo como

3 salidas

la salida no es sólo 0 o 1 o -1 0 +1 sino un rango

x 0 0 - comprar mantener

0 x 0 - plano (salida compra o venta)

0 0 x vender - mantener vender

donde x no es 0 o 1, sino que tiene alguna desviación en algún rango, por ejemplo -1.000 0.000 +1.000

es decir, puede tomar un valor de, por ejemplo, 0,1122 o -0,012


la combinación de tres salidas se analiza para el cruce de límites


entradas 9 en cada franja horaria - tomar M1 M5 M15 M30 H1 H4 54 entradas en total

alimentamos la diferencia entre las medias 3 5 8 13 21 34 55 89 144 233 en cada traf

total 3-5 5-8 8-13 13-21 21-34 34-55 55-89 89-144 144-233 en total 9 por plazo

obtenemos una especie de VERIABLE de promedios en la vista de cuadrícula... :-) en la matriz

cuando tenemos algo como el patrón 2 3 4 5 6 7 8 9 10 11 el ventilador está completamente abierto hacia arriba juzgando es Vender

cuando tenemos -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 patrón, el patrón está totalmente abierto hacia abajo - BAY

Los números son arbitrarios y a veces un patrón -1 -3 -7 -10 -15 -20 -30 -40 -80 en un plazo mayor



---

una muestra de entrenamiento de algo así como


1 2 1 0 -3 2 3 0 4 M1

-1 2 -1 0 1 2 3 0 -4 M5

...

........................ H4

 

Preparación de los datos para el entrenamiento





#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
 
static int hWR;
 
static double    ma[9][233] ;
static datetime  SaveTime[9];
static int       indx[8]={3,5,8,13,21,34,55,89,144};
static  int iFW = 0;
 
int init()
  {
   hWR = FileOpen( "MA.CSV", FILE_BIN|FILE_WRITE) ; 
   string strPut="DATETIM            |"+
   "m100035|m010058|m010813|m011321|m012134|m013455|m015589|"+
   "m500035|m050058|m050813|m051321|m052134|m053455|m055589|"+
   "m150035|m150058|m150813|m151321|m152134|m153455|m155589|"+
   "m300035|m300058|m300813|m301321|m302134|m303455|m305589|"+
   "h010035|h010058|h010813|h011321|h012134|h013455|h015589|";
 
 
 
// "-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|
   FileWrite(hWR, strPut);
   return(0);
  }
int deinit()
  {
  FileClose(hWR);
  }
 
int start()
{
  iFW = 0;
  getMA( PERIOD_M1 ,1);
  getMA( PERIOD_M5 ,2);
  getMA( PERIOD_M15,3);
  getMA( PERIOD_M30,4);
  getMA( PERIOD_H1 ,5);
  getMA( PERIOD_H4 ,6);
   if ( iFW == 1 )
   {
      PutFile( );
   }
   return(0);
}
void getMA(int TF,int iTF)
{
 if ( SaveTime[iTF] != iTime(Symbol(),TF,0) )
 {
 SaveTime[iTF] = iTime(Symbol(),TF,0);
 ma[iTF][89] =  iMA(Symbol(),TF,89,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][55] =  iMA(Symbol(),TF,55,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][34] =  iMA(Symbol(),TF,34,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][21] =  iMA(Symbol(),TF,21,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][13] =  iMA(Symbol(),TF,13,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][ 8] =  iMA(Symbol(),TF, 8,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][ 5] =  iMA(Symbol(),TF, 5,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][ 3] =  iMA(Symbol(),TF, 3,0,MODE_EMA,PRICE_CLOSE,0);
 iFW = 1;
 }
}
void  PutFile( )
{
 string strPut;
 strPut = TimeToStr( SaveTime[1] , TIME_DATE|TIME_MINUTES|TIME_SECONDS) ;
 for ( int iiTF = 1; iiTF <= 6; iiTF++)
 {
   for ( int jM = 0; jM <= 6; jM++)
   {
      int nMA = indx[jM];
      int nMA_N = indx[jM+1];
      double nn = NormalizeDouble( (ma[iiTF][ nMA] - ma[iiTF][ nMA_N])/Point,0) ;
      string sss = DoubleToStr( nn , 0);
      if ( nn >= 0 )
         sss =" "+sss;
      if (MathAbs(nn)  <= 9)
         sss =" "+sss;
       
         
      // strPut = strPut+DoubleToStr( ma[iiTF][ nMA] , 4)+"|";
      strPut = strPut+"|"+sss;
   }
 }
 FileWrite(hWR, strPut);
}
 
Loknar:
Explosión:

¿Cómo se usa esto? Poner un guión en el gráfico, montones de números comenzaron a reescribir... ¿Qué dicen estas cifras?

¿Para qué los necesita? Tengo mi propio algoritmo de AG, pero apenas he entendido el código: necesito tiempo para averiguar dónde poner las entradas, cómo darles salida, cuándo comprar-liquidar y si puedo hacerlo... ¿O has ido a por el grial?

En principio, me gusta la idea de las redes neuronales. Todo lo que sé al respecto es que teniendo 1000 puntos de alguna manera la red convergerá a un punto... y que se ganó el autotrading con un EA basado en el algoritmo de la red. Tengo planes de crear mi propia versión de dicha red pero en este momento no entiendo nada ni de mql4 ni de redes neuronales.

Por lo tanto, primero voy a poner mi estrategia en Expert Advisor para aprender mql4. Y luego pensaré en las redes.

He descargado su versión sólo por interés. Es la primera vez que me encuentro con estas cosas. No entiendo el funcionamiento de estas redes. No tengo ni idea de cómo funcionan estas redes, por lo que tengo estas preguntas.

Estaré encantado de recibir cualquier referencia sobre temas similares que, en su opinión, sean dignos de atención.

 

ESTA RED

YuraZ:

ha cambiado un poco el software.

ha cambiado un poco el formato de visualización de

ahora SCRIPT considera un deber calcular con gran precisión los datos de salida

el programa no es universal, sino que está especializado en el número de entradas y salidas

pero el tamaño de la capa oculta se ajusta en el proceso de aprendizaje



la próxima versión - trataré de hacerlo flexible en el número de entradas y salidas

y si tiene éxito, añadiré un algoritmo genético

cuyo objetivo será acabar con las NEURONAS con un gran número de errores

¡y reproducir las neuronas con pocos errores!

es decir, esencialmente, buscar las neuronas de la matriz que tengan el menor número de errores y criar a partir de ellas para reemplazar

esas neuronas que se han comportado mal...


1 El índice de aprendizaje es actualmente bajo

2 Cambio - el número de neuronas ocultas del 1er nivel es aleatorio sin lógica

3 Detiene el aprendizaje si obtiene una alta precisión en los datos de muestra de entrada y salida


LA MISMA RED pero escrita en Microsoft Visual C++ 6.0

La velocidad es órdenes de magnitud mayor que en MQL4

el algoritmo no cambia, la transferencia de MQL4 a C++ es lo más sencilla posible sin utilizar objetos de clase

Archivos adjuntos:
yzpnn.zip  63 kb
 

Otra opción pero en MQL


sólo tratando de trabajar en M1 muestra la dirección de la tendencia actual

salida en el 3, en teoría no se puede enseñar en el inicio - pero inmediatamente tomar pesos listos - enseñar por adelantado


---

9 entradas a las que se alimenta la diferencia normalizada de muwings

---

out-1 out-2 out-3 output

0,9 0,01 0,01 tendencia al alza

0,01 0,9 0,01 flet

0,01 0,01 0,9 tendencia a la baja



---

¡Pienso añadir 3-4 plazos y contarlos todos a la vez!

La PNN cuando ya está pesada funciona muy rápido

---


Código de prueba experimental - por favor, no me eches.






Archivos adjuntos: