Redes Neuronales en Metatrader

Foro dedicado a todo lo relacionado con la versión 4 de la plataforma de Metaquotes.
Avatar de Usuario
YsEkU
Mensajes: 179
Registrado: 02 Ene 2007 23:24

Codigo Basico Red Neuronal en Metatrader.

Mensaje por YsEkU »

Saludos hermanos.
El tema es muy amplio, pero con buen entrenamiento, da buenos resultados, jejeje en cuanto a la parte practica del tema y a modo de ejemplo, os dejo el codigo basico de una red neuronal basada en 3 perceptrones multicapa y 3 entradas por perceptron, para metatrader.

El entrenamiento es simple, en las variables de entrada de cada perceptron, poner: iniciar 0, paso 1, detener 100. Asimismo activar para optimizar únicamente los perceptrones de la primera capa. Y realizar la primera optimizacion.
Esperamos, seleccionamos el mejor resultado, desactivamos los perceptrones de la primera capa (con los valores obtenidos), y activamos la segunda, Realizamos la segunda optimizacion.
Esperamos, seleccionamos el mejor resultado, desactivamos los perceptrones de la segunda capa (con los valores obtenidos), y activamos la tercera, Realizamos la ultima optimizacion.
Usar el Ea con los parametros obtenidos.

El numero de capas es de 3 porque cualquier puerta logica basica (AND, OR, NOR, XOR...) puede ser implementada con un maximo de 3 capas de perceptrones.

PD. Tanto los parametros de entrada como las operaciones a realizar por cada capa son unicamente un ejemplo, asi que no espereis grandes resultados, sin embargo podeis ver el funcionamiento en mt4 y añadiendo vuestras entradas y operaciones sacar cosas bastante decentes.

PD2. si a alguien se le ocurre como meterle un ajuste por back-propagation a los pesos de cada entrada, para que se auto-entrene una vez a comenzado a rodar que hable ahora o calle para siempre jejeje...

Código: Seleccionar todo

//+------------------------------------------------------------------+
//|                                                      YsNeuroV5.mq4 |
//|                                          Copyright © 2007, Yseku |
//|                                                 http://Yseku.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, Yseku"
#property link      "http://Yseku.com"

//---- input parameters

extern double       lotesmin = 0.01;
extern double       lotesmax = 0.02;
extern int          lotesdinamicos = 0;
extern int          doblarlotes = 0;
extern int          mn = 888;
extern int          pase = 1;

//Entradas perceptron capa1
extern int          x11 = 99;
extern int          x21 = 99;
extern int          x31 = 99;
extern int          x41 = 99;
extern int          y11 = 99;
extern int          y21 = 99;
extern int          y31 = 99;
extern int          y41 = 99;

//Entradas perceptron capa2
extern int          x12 = 99;
extern int          x22 = 99;
extern int          x32 = 99;
extern int          y12 = 99;
extern int          y22 = 99;
extern int          y32 = 99;
extern int          z12 = 99;
extern int          z22 = 99;
extern int          z32 = 99;

//Entradas perceptron capa3
extern int          x13 = 99;
extern int          x23 = 99;
extern int          x33 = 99;
extern int          y13 = 99;
extern int          y23 = 99;
extern int          y33 = 99;
extern int          z13 = 99;
extern int          z23 = 99;
extern int          z33 = 99;

static int prevtime=0,tic=-1,tiv=-1,doblotes=0,d,s,m;
static double p1x,p1y,p2x,p2y,p2z,p3x,p3y,p3z,lotes=0;


//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   if (Time[0] == prevtime) return(0);
   prevtime = Time[0];
   
   if (! IsTradeAllowed()) 
   {
      again();
      return(0);
   }
//-- Proceso Principal
Info();
RefreshRates();

if(pase>=3){pase3();}
if(pase>=2){pase2();}
if(pase>=1){pase1();}

//-- Exit --
   return(0);
}

// COMENTARIO: en cada pase, especificar la accion a realizar por cada perceptron. 

void pase1()
{
if (p1x>0) {CerrarVentas();AbrirCompras();}
if (p1y>0) {CerrarCompras();AbrirVentas();}
}

void pase2()
{
if (p2x>0) {CerrarVentas();}
if (p2y>0) {CerrarCompras();}
if (p2z>0) {AbrirVentas();AbrirCompras();}
}
   
void pase3()
{
if (p3x>0) {AbrirCompras();}
if (p3y>0) {AbrirVentas();}
if (p3z>0) {CerrarVentas();CerrarCompras();}
}

void again() {
   prevtime = Time[1];
   Sleep(30000);
}

//---- Calculo TipoBarra OHCL
int TipoBarra(int p)
{ 
   int res=0;
   double Ape=Open[p], Cie=Close[p];
   double dis=(High[p]-Low[p])/3;
   NormalizeDouble(dis,Digits);
   double p1=High[p];
   double p2=p1-dis;
   double p3=p2-dis;
   double p4=Low[p];
   if (Ape<p1>p2)res=res+30;
   if (Ape<p2>=p3)res=res+20;
   if (Ape<p3>=p4)res=res+10;
   if (Cie<p1>p2)res=res+3;
   if (Cie<p2>=p3)res=res+2;
   if (Cie<p3>=p4)res=res+1;
   switch(res)
   {
   case 11: res=5;
   case 22: res=1;
   case 33: res=-5;
   case 12: res=10;
   case 13: res=20;
   case 23: res=15;
   case 32: res=-10;
   case 31: res=-20;
   case 23: res=-15;
   }
   return(res);
}

// COMENTARIO: en cada perceptron, introducir cualquier valor analogico en a[0], a[1], a[2]. Estos seran los datos con los que trabajara nuestra red neuronal. 


//-- Proceso Perceptron Capa1 X -- Entrada TipoBarra
double Perceptron1X()
{
   double w[4],a[4];
   w[0] = x11 - 50;
   w[1] = x21 - 50;
   w[2] = x31 - 50;
   w[3] = x41 - 50;
   for(int i=0;i<=3;i++) a[i]=TipoBarra(i+1);
   
   return(w[0]*a[0] + w[1]*a[1] + w[2]*a[2] + w[3]*a[3]);
}
//-- Proceso Perceptron Capa1 Y -- entrada max-min
double Perceptron1Y()
{
   double w[4],a[4];
   w[0] = y11 - 50;
   w[1] = y21 - 50;
   w[2] = y31 - 50;
   w[3] = y41 - 50;
   for(int i=1;i<=3;i++) a[i-1]=High[i]-Low[i];
   
   return(w[0]*a[0] + w[1]*a[1] + w[2]*a[2] + w[3]*a[3]);
}

//-- Proceso Perceptron Capa2 X -- entrada tipobarra
double Perceptron2X()
{
   double w[3],a[3];
   w[0] = x12 - 50;
   w[1] = x22 - 50;
   w[2] = x32 - 50;
   for(int i=0;i<=2;i++) a[i]=TipoBarra(i+1);
   
   return(w[0]*a[0] + w[1]*a[1] + w[2]*a[2]);
}

//-- Proceso Perceptron Capa2 Y -- entrada max -min * volumen
double Perceptron2Y()
{
   double w[3],a[3];
   w[0] = y12 - 50;
   w[1] = y22 - 50;
   w[2] = y32 - 50;
   for(int i=1;i<=3;i++) a[i-1]=(High[i]-Low[i])*Volume[i];
   
   return(w[0]*a[0] + w[1]*a[1] + w[2]*a[2]);
}

//-- Proceso Perceptron Capa2 Z -- entrada fecha
double Perceptron2Z()
{
   d=Day();
   s=DayOfWeek();
   m=Month();
   double w[3],a[3];
   w[0] = z12 - 50;
   w[1] = z22 - 50;
   w[2] = z32 - 50;
   a[0]=d;
   a[1]=s;
   a[2]=m;
   
   return(w[0]*a[0] + w[1]*a[1] + w[2]*a[2]);
}

//-- Proceso Perceptron Capa3 X -- entrada capa 2
double Perceptron3X()
{
   double w[3],a[3];
   w[0] = x13 - 50;
   w[1] = x23 - 50;
   w[2] = x33 - 50;
   a[0]=p2x;
   a[1]=p2y;
   a[2]=p2z;
   
   return(w[0]*a[0] + w[1]*a[1] + w[2]*a[2]);
}
//-- Proceso Perceptron Capa3 Y -- entrada capa 2
double Perceptron3Y()
{
   double w[3],a[3];
   w[0] = y13 - 50;
   w[1] = y23 - 50;
   w[2] = y33 - 50;
   a[0]=p2x;
   a[1]=p2y;
   a[2]=p2z;
   
   return(w[0]*a[0] + w[1]*a[1] + w[2]*a[2]);
}
//-- Proceso Perceptron Capa3 Z -- entrada capa 2
double Perceptron3Z()
{
   double w[3],a[3];
   w[0] = z13 - 50;
   w[1] = z23 - 50;
   w[2] = z33 - 50;
   a[0]=p2x;
   a[1]=p2y;
   a[2]=p2z;
   
   return(w[0]*a[0] + w[1]*a[1] + w[2]*a[2]);
}
void AbrirCompras()
{
if (tic<1)
   {
   OrderSend(Symbol(),OP_BUY,lotes,Ask,0,0,0,0,mn,0,Green);
   ContarOrdenes();
   }
}

void AbrirVentas()
{
if (tiv<1>0)
   {
   OrderSelect(tic,SELECT_BY_TICKET,MODE_TRADES);
   if(OrderProfit()<0>0)
   {
   OrderSelect(tiv,SELECT_BY_TICKET,MODE_TRADES);
   if(OrderProfit()<0>=(lotes*2))lotes=lotes*2;
   }
else lotes=lotesmin;
}

void Info()
{
ContarOrdenes();
CalcularLotes();
p1x=Perceptron1X();p1y=Perceptron1Y();
p2x=Perceptron2X();p2y=Perceptron2Y();p2z=Perceptron2Z();
p3x=Perceptron3X();p3y=Perceptron3Y();p3z=Perceptron3Z();
Print("Capa3.  X:",p3x,"   Y:",p3y,"   Z:",p3z);
Print("Capa2.  X:",p2x,"   Y:",p2y,"   Z:",p2z);
Print("Capa1.  X:",p1x,"   Y:",p1y);
Print("TotalOrdenes: ",OrdersTotal()," *----------------------------------------------------------------*");
return(0);
}

void ContarOrdenes()
{
int total = OrdersTotal();
for (int i = 0; i <total>0) {CerrarVentas();AbrirCompras();}


PD. No se por que, al pegar el codigo me sustituye "==" por "<0>". subo el .mql. De cualquier modo, esta red neuronal no es estandart, ya he dicho que solo es un ejemplo, lo suyo es que solo haya entradas externas en la primera capa, y que las entradas de las demas capas, sean la salida de la anterior. Asimismo se puede poner un umbral en la accion a realizar por cada perceptron de modo que en vez de: 
if (p1x>0) {CerrarVentas();AbrirCompras();}
podeis hacer:

Umbral=1;
if (p1x>umbral) {AbrirCompras();}
if (p1x<-umbral) {AbrirVentas();}

De este modo sacais 2 acciones por perceptron. Y podeis optimizar tb el valor del umbral...


Espero que quede algo mas claro y vuestros comentarios.
Un Saludo Hermanos.

podeis hacer:
Adjuntos
YsNeuroV5.mq4
Codigo.
(7.18 KiB) Descargado 259 veces
Última edición por YsEkU el 21 Sep 2009 10:59, editado 2 veces en total.
Avatar de Usuario
YsEkU
Mensajes: 179
Registrado: 02 Ene 2007 23:24

Mensaje por YsEkU »

Y en lo que a la parte filosofica, pienso que evidentemente la inteligencia artificial en el trading es el futuro, pero unicamente como una herramienta más, como una especie de "afinador"...

Sin embargo, para conseguir la "maquina de jugar ajedrez perfecta" en esto del trading, las variables son tantas y con tal volumen de datos, que pienso que aun estamos muy lejos de poder procesar algo así con la tecnología actual.

Un saludo hermanos.
Avatar de Usuario
ledzep
Mensajes: 410
Registrado: 25 Sep 2006 03:19
Ubicación: Colombia

Mensaje por ledzep »

yseku!! otra vez por aca...... tiempo sin leerte, el trio otra vez por estos lados. Tenemos mucho que hablar.

s2.
Avatar de Usuario
Amosis
Mensajes: 306
Registrado: 31 Ene 2006 18:02

Mensaje por Amosis »

Pues sí, YsEkU.

Ya todos podemos apreciar lo bueno que ha sido tu regreso.

Mucha suerte.
La vida para algunos, es otra cosa. http://lacomunidad.elpais.com/jonas/posts
Avatar de Usuario
X-Trader
Administrador
Mensajes: 12851
Registrado: 06 Sep 2004 10:18
Contactar:

Mensaje por X-Trader »

X-Trader escribió:Pues al final este buen hombre ha decidido vender picos y palas.... :(

La web citada redirige ahora a ésta:

https://www.brokenpatterns.com/

Saludos,
X-Trader
Rectifico públicamente: al parecer he malinterpretado una redirección de dominios por lo que pido disculpas al autor.

Saludos,
X-Trader
"Los sistemas de trading pueden funcionar en ciertas condiciones de mercado todo el tiempo, en todas las condiciones de mercado en algún momento del tiempo, pero nunca en todas las condiciones de mercado todo el tiempo."

Avatar de Usuario
agmageton
Mensajes: 3608
Registrado: 30 Ene 2008 11:32

Mensaje por agmageton »

no perdais el tiempo con las redes neuronales, ahora son solo producto de marketing , para los incautos.....
La entrada te da la probabilidad y la salida la rentabilidad...
Avatar de Usuario
YsEkU
Mensajes: 179
Registrado: 02 Ene 2007 23:24

Re: Redes Neuronales en Metatrader

Mensaje por YsEkU »

Saludos hermanos.

Os dejo un enlace a otro hilo donde explico como instalar FANN en metatrader con un ejemplo de uso muy basico traducido.
viewtopic.php?f=9&t=12586#p126552
Jeje tengo los post mezclados...

PD. Al contrario del ejemplo anterior en este hilo en el que optimizabamos los pesos de cada perceptron, pudiendo obtener salidas analogicas en nuestra red, las redes neuronales creadas con FANN es mejor diseñarlas y entrenarlas para devolver valores booleanos. (1=verdadero, 0=falso)
Avatar de Usuario
Amosis
Mensajes: 306
Registrado: 31 Ene 2006 18:02

Re: Redes Neuronales en Metatrader

Mensaje por Amosis »

Hola YsEkU:

El tema de las Redes es muy interesante. Veremos este revival que estan teniendo lo que da de sí.
No te extrañe que tenga pocas lecturas el Post. El tema es dificil, nuevo en esta 2 vida y la documentacion escasisima y toda en Ingles.
Tu trabajo es muy interesante aunque lo de los micro-sistemas no lo termino de ver claro...

He visto tu ejemplo y en los enlaces que pones en la documentacion he visto un caso de aplicacion de Redes al MACD.Supongo que sera para localizar los parametros mas adecuados en cada ocasion. Al mismo tiempo que funciona el sistema se van reajustando los parametros. (Eso he entendido yo)

Una pregunta: Como se entrena la red? optimizando las variables?
Es decir: las redes hacen una optimacion clasica pero tecnicamente mas avanzada, en paralelo etc.?
No se incurre en la sobreoptimacion usando Redes?
En fin la pregunta definitiva: a que se llama "entrenar" una red?

Bueno, amigo YsEkU, ya tienes trabajo para cuando te aburras, jejeje.

Un saludo y muchas gracias por enseñarnos esto.
La vida para algunos, es otra cosa. http://lacomunidad.elpais.com/jonas/posts
Avatar de Usuario
YsEkU
Mensajes: 179
Registrado: 02 Ene 2007 23:24

Re: Redes Neuronales en Metatrader

Mensaje por YsEkU »

Veamos, el modelo para este tipo de redes es distinto al anterior, recapitulemos...

...Repasando el hilo el ejemplo que puse la otra vez esta demasiado "trasnochado" jejeje, voy a adaptar el modelo básico de red neuronal "a mano" mucho más acorde con el modelo de las redes de FANN, aunque veremos que la finalidad es algo distinta.
YS-NNBasic.mq4
(2.3 KiB) Descargado 160 veces
Solo debemos indicar que variables queremos que sirvan como entrada a nuestra red neuronal (array a, en este caso como ejemplo usamos la apertura de la barra 0, 7 y 14).
//-- Proceso Perceptron Capa1 X
double Perceptron1X()
{
double w[3],a[3];
w[0] = x11 - 25;
w[1] = x21 - 25;
w[2] = x31 - 25;
a[0]= Open[0];
a[1]= Open[7];
a[2]= Open[14];
return(w[0]*a[0] + w[1]*a[1] + w[2]*a[2]);
}
En este caso solo realizaremos una unica pasada de todas las variables de la red en lugar de hacerlo por capas como antes ademas dejare solo el ejemplo básico sin especificar ninguna accion. Y solo realizaremos una accion en cada red.
//----
if(RN&&salidaRN()>0)
{
//-- acción, por ejemplo cerrarTodo() o lo que sea.
}
Al contrario del ejemplo anterior, si queremos realizar mas acciones no tenemos mas que crear mas redes independientes.
---------------------------------

Ok, en este tipo de redes optimizamos las variables con la ayuda del algoritmo genetico de Metatrader y siempre ajustamos los pesos de cada variable al final y en funcion de los resultados obtenidos.(mejor balance o menor DD, etc...)
Una vez optimizada, la red permanece "estatica" hasta que se vuelva a realizar todo el proceso.

Pero con las redes en FANN o MATLAB el proceso es distinto.

dejo aquí el ejemplo de FANN:
YsFANN.mq4
(10.2 KiB) Descargado 171 veces
... (continuara)
Avatar de Usuario
YsEkU
Mensajes: 179
Registrado: 02 Ene 2007 23:24

Re: Redes Neuronales en Metatrader

Mensaje por YsEkU »

Ok, con las redes de FANN tendremos que preparar los datos para entrenar, debemos recorrer todo el grafico y determinar en que momentos queremos que se active nuestra red.
Es decir, por cada conjunto de datos de entrada debemos incluir tambien la salida esperada de nuestra red para esos datos en cada barra.

¿Y como se cuando quiero que se activé?
Aqui la estructura a programar sería un poco mas compleja e imaginativa.
Con el tipo de redes "a mano" esto se hacia de forma automatica al optimizar, pero siempre tenias que elegir tú la salida deseada al final. (es como elegir los datos de salida pero aplicado al proceso global.)

El proceso inicial sería:
1-.Preparar los datos de entrenamiento en cada barra, con la salida esperada de la red para esa barra.
2-.Entrenar la red para que aprenda los patrones, en este caso el criterio usado es el error cuadratico medio.

Una vez entrenada la red ya podemos usarla y re-optimizarla a cada nueva barra, el proceso sería:
1-.Recoger el valor de la red para la barra actual.
2-.Y una vez formada la barra, introducir los datos de esta como entrenamiento (entradas+salida esperada).(*La salida obtenida y la deseada no tienen porque ser iguales).
3-.Re-entrenar la Red.

No voy a entrar mucho al detalle, pero las funciones para preparar los datos, realizar los entrenamientos y pedir los resultados estan todas en el ejemplo y creo que no hace falta explicarlas mucho. Solo resaltar que se realizan desde dentro del programa sin usar el optimizador y que al igual que el otro tipo de redes debemos ajustar los parametros de entrada de nuestra red que queremos usar.

A primera vista es mucho mas complicado realizar sistemas con estas redes, mas que nada por la necesidad de pre-entrenamiento barra a barra, sin embargo una vez superado el problema de encontrar un metodo adecuado para el pre-procesado de la salida esperada, la velocidad de estas redes es muchisimo mayor que las "manuales", ademas de poder implementar logicas muchisimo mas complejas de forma mucho mas facil puesto que es muy sencillo crear x redes e interconectarlas.
Amosis escribió:He visto tu ejemplo y en los enlaces que pones en la documentacion he visto un caso de aplicacion de Redes al MACD
No se si te refieres a este EA,
NeuroMACD-fixed.mq4
(10.57 KiB) Descargado 190 veces
... Pero vamos, a esto me refiero con lo de redes muchisimo mas complejas, si te fijas en el ejemplo del NeuroMACD, éste te crea 8 redes distintas para gestionar cortos y otras 8 para largos y las guarda en la carpeta C:/ANN.
...(La verdad es que aún no he descifrado del todo, que es lo que hace realmente ese experto, pero lo tengo por ahi ya lo despiezare mas tranquilamente que ahora tengo mucho lio... jejeje)
... Y en cuanto a lo de la sobre optimizacion, el problema existe claro, pero existe igualmente con una simple media movil el caso es intentar reducirlo al minimo...
Amosis escribió:Bueno, amigo YsEkU, ya tienes trabajo para cuando te aburras, jejeje.
Espero haber resuelto tus dudas, al menos en parte... :-D

Saludos Hermanos.
Avatar de Usuario
Amosis
Mensajes: 306
Registrado: 31 Ene 2006 18:02

Re: Redes Neuronales en Metatrader

Mensaje por Amosis »

Hola YsEkU:
Gracias por contestar.
Sí, es ese ejemplo. Yo lo cogí de este enlace http://articles.mql4.com/777
pero aqui faltan unos procedimientos
y el tuyo viene ya completo y puesto en el Editor.

Es dificil este tema pero prometedor. Ya veremos.

Iremos estudiando y cogiendolo con tiempo, muchas gracias,
No tengas prisa en contestar necesito tiempo
para ir digeriendo toda la informacion.

Saludos
La vida para algunos, es otra cosa. http://lacomunidad.elpais.com/jonas/posts
Avatar de Usuario
YsEkU
Mensajes: 179
Registrado: 02 Ene 2007 23:24

Re: Redes Neuronales en Metatrader

Mensaje por YsEkU »

Saludos hermanos.

Para los que no lo hayais leido ya, leeros el ultimo articulo de X-Trader, en el que dissecciona el experto MACD basado en FANN2MQL: http://www.x-trader.net/articulos/siste ... rader.html

La verdad es que como dice Alberto el potencial es muy alto y una vez diseccionado el esqueleto del NEURO-MACD, es muy reutilizable como "afinador" de sistemas.

Esto es un ejemplo de cosas que se pueden hacer e interconectar, como dice el articulo, una estrategia perdedora como el sistema del MACD se mejora o "afina" hasta hacerlo al menos ligeramente beneficioso.

Vamos un paso mas allá, con la potencia de estas logicas puedes ir tan lejos como te propongas en el diseño no ya de sistemas sino de, se me ocurre por ejemplo en forma esquematica, auto-selectores de sistema.

Queremos un indicador que nos diga que EA usar cada dia de una lista de x EAs:
-Datos Entrada/Valores: Variables que midan la persistencia de la serie, la dimension fractal, la volatilidad o cualquier variable que estimemos nos proporcione informacion sobre el "estado" actual del mercado para aplicar un sistema u otro.
-Datos Entrada/Entrenamiento: Deberíamos ir simulando cada sistema, llevando un conteo de ganancias/perdidas para un periodo determinado, en este caso un día, el dato a introducir seria el indice del EA que mejores resultados dío para la serie de valores de entrada.

Una vez preparados los datos y entrenada la red, al ponerla en funcionamiento está debería devolver el EA que mejor se ajusta a los valores de entrada y en teoria el mas beneficioso. Si cada sistema tiene su propió "afinador" imagina el potencial.

El unico problema que veo es el hacer la simulacion de las estrategias "al vuelo" para conseguir datos de entrenamiento en funcion de los resultados. Estaria bien hacer una libreria estandar para simular o probar sistemas desde dentro de un sistema... :idea: voy a ver si no existe ya... jejeje

Hasta otro rato :-D
Avatar de Usuario
YsEkU
Mensajes: 179
Registrado: 02 Ene 2007 23:24

Re: Redes Neuronales en Metatrader

Mensaje por YsEkU »

Os dejo un enlace a un excelente articulo sobre reconocimiento de patrones con FANN:
http://www.mpmlab.com.ar/dm/node/14
Aunque no es especifico de trading, se puede ver otro ejemplo de uso para futuros diseños.
elcctrro
Mensajes: 329
Registrado: 26 Nov 2008 11:09
Ubicación: Zona centro España

Re: Redes Neuronales en Metatrader

Mensaje por elcctrro »

YsEkU escribió: El unico problema que veo es el hacer la simulacion de las estrategias "al vuelo" para conseguir datos de entrenamiento en funcion de los resultados. Estaria bien hacer una libreria estandar para simular o probar sistemas desde dentro de un sistema... :idea: voy a ver si no existe ya... jejeje

Hasta otro rato :-D
A mi me parece que el problema del entrenamiento, debiéndole proporcionar los datos de entrada y el tiempo para su optimización son los dos grandes problemas de las redes para que funcionen en tiempo real. Por otra parte el sistema de predicción quedara siempre cojo frente a eventos no entrenados.
Desde mi punto de vista el sistema del MAC podría funcionar mejor realizando operaciones virtuales con los parámetros del mac entre el intervalo estimado, valorando estas operaciones para tomar los valores que mejores resultados han dado en un periodo de tiempo relativamente cercado, pongamos las últimas tres horas en datos de 1 minuto. La utilización de este procedimiento estimo conlleva dos ventajas fundamentales, carece de entrenamiento y adapta las variables ante los eventos del mercado de tan rápido como queramos, simplemente fijando las condiciones para selecionarlas analizando las operaciones virtuales.

Desde luego las operaciones virtuales no pueden ser acumluladas en un array sobre la memoria del pc, hay que hacerlo sobre el disco duro, yo el año pasado me quede aqui... jejeje sin memoria ram y agotado sin ganas de meterme con los ficheros de disco.

Hay que tener en cuenta que las operaciones virtuales se han de realizar en tiempo real y con los ticks de entrada reales de la plataforma, eso pude requerir para un experto con dos variables y 10 posibles estados de cada una de 6000 a 10000 datos por hora y combinación, que hay que almacenar y luego evaluar, es decir, nos podemos ir olvidando de los sistemas en 1 minuto.

Un saludo.
elcctrro
Mensajes: 329
Registrado: 26 Nov 2008 11:09
Ubicación: Zona centro España

Re: Redes Neuronales en Metatrader

Mensaje por elcctrro »

Para la construccion de este sistema experto Neuro-CuentaLaVieja, se deben programar dos expertos por separado que trabajaran juntos sobre el mismo par.

¿por qué partir el experto en dos? pues porque tenemos que calcular qué combinación de los parámetros es el mejor y eso lleva bastante tiempo, pongamos que solo tardemos unos 6 minutos, durante ese tiempo no podemos estar con el experto como si estuviéramos sin conexión porque el bloque de cálculo tenga el control del experto. Por eso la contruccion seria así:

Experto 1:
1º.- Se encarga de tomar los datos de los ticks que llegan en tiempo real del broker, los graba en un fichero de COTIZACIONES.
2º.- Habiendo leído los datos del fichero de CONFIGURACIÓN proporcionados por el Experto 2, realiza operaciones reales sobre la cuenta siguiendo el sistema que sea (pongamos el sistema del MACD).

Experto 2:
1º Lee los datos del fichero COTIZACIONES y con ellos genera un fichero OPERACIONES en el que cada fila corresponde a las operaciones realizadas virtualmente por el sistema para las combinaciones de variables que corresponda, estas operaciones están indexadas con el fichero de COTIZACIONES, o simplemente tenemos un indice con ellas.

2º.- Una vez que tenemos en el fichero todas las operaciones virtuales para todas las combinaciones de las variables a estudiar, sacamos los parámetros habituales de rendimiento para cada combinación de variables: Beneficio, máximo DD, coeficiente Win/Loss... etc.

3º.- Seleccionamos mediante los parámetros de rendimiento la mejor combinación y la grabamos en el fichero de CONFIGURACIÓN para que las tome el experto que realiza las operaciones reales.


De esta manera tendremos un experto que funciona rápido con las configuraciones que le proporciona el optimizador, y un optimizador que puede tardar lo que quiera en realizar los cálculos y que también será relativamente cómodo el sustituir por otro superior sin que se vea afectado el experto que trabaja tirando las ordenes a mercado (experto 1).

YsEkU, yo el año pasado no encontre en la red librerias para hacer las operaciones virtuales ni para analizar los resultdos, si quieres podemos intentar el hacerlo.

Un saludo.
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Metatrader 4”