Redes Neuronales en Metatrader
Depende de los datos que quieras encontrar, como he dicho antes, la mejor operación en un historial te la va a sacar, pero en el futuro....
Las redes neuronales, sun muy buenas para trabajar con cantidad enorme de datos, si los datos que le metes a la red son erroneos o son de indicadores que van un paso por detrás del precio, la red te sacará operaciones a contra tiempo o erroneas.
Yo lo que creo que debería encontrar la red por ejemplo en vez de buscar buenas operaciones en un historial ,que buscara las mejores lineas de soporte o resistencia de todos los Periodos de un activo y las clasificara, para luego establecer una estrategia con esos datos.
Es decir una vez tengamos la estrategia fundamentada, utilizar las redes neuronales para mejorarlas, de esta forma si que se puede medir y corroborar los resultados de da una red.
Un saludo
Las redes neuronales, sun muy buenas para trabajar con cantidad enorme de datos, si los datos que le metes a la red son erroneos o son de indicadores que van un paso por detrás del precio, la red te sacará operaciones a contra tiempo o erroneas.
Yo lo que creo que debería encontrar la red por ejemplo en vez de buscar buenas operaciones en un historial ,que buscara las mejores lineas de soporte o resistencia de todos los Periodos de un activo y las clasificara, para luego establecer una estrategia con esos datos.
Es decir una vez tengamos la estrategia fundamentada, utilizar las redes neuronales para mejorarlas, de esta forma si que se puede medir y corroborar los resultados de da una red.
Un saludo
Por lo que dice en el blog es simplemente un montón de parametros sobreoptimizados hasta el absurdo en determinado periodo de tiempo y ademas con los stoploss mayores que los takeprofit.learntrader escribió:al final en que ha quedado lo de las redes neuronales?sirven para tradear o no?es que queira programar la del paco este si es que realmente vale la pena...saludos
Lo raro es que no saliera un 90 o 100% de operaciones ganadoras, da igual los datos de entrada que le ponga, lo mismo daría los datos del grafico, de otro activo, o las temperaturas diarias de su pueblo. Con ese monton de parametros la optimización encontrará facilmente una correlación entre cualquier conjunto de numeros y un conjunto de operaciones.
Las funciones en si mismas pueden ser utiles, pero tras esa optimización se debe comprobar los resultados en otros periodos de tiempo, no en el mismo donde lo optimizó.
-
- Mensajes: 4
- Registrado: 26 Mar 2009 00:47
Ayuda en la Programación de Metatrader
Como Trader he visto que algunas estrategias son buenas siempre y cuando los indicadores y parametros utilizados sean lo bastante especificos y exactos: actualmente me encuentro aprendiendo sobre programacion en Metatrader y queria por favor me ayudaran con una inquietud que tengo: necesito desarrollar el código para especificar el número de operaciones máximas que se deben abrir en el momento exacto en que los indicadores y parametros concuerden. Existe algún código que me permita colocarle un límite máximo de operaciones que se deben abrir???. He revisado el Manual y no lo he detallado, si alguien me puede colaborar de antemano le agradezco.
Yo entiendo que el tema de la optimizacion aplicado al trading debe ser enfocado desde un punto de vista natural, simulando a como ajustariamos el sistema si estuvieramos interactuando con él, es decir como si el experto fuera una herramienta de apoyo a la operativa del trader que es realmente quien tiene el control.
1º.- Yo más que en cuestiones y divagaciones de si son pardas o tordas cogeria un sistema que funcione y que con una optimización se vea que se puede mejorar el rendimiento. Por ejemplo un sistema de cruce de una media con su desplazada dos barras.
2º.- Dentro del experto pondria en una subrrutina el optimizador.
3º.- el optimizador simularia las operaciones realizadas en las ultimas 100 barras para un intervalo de mas menos 6 longitudes de la media actualmente utilizada y daria como resultado el valor de la media que mejor ha funcionado en estas últimas 100 barras.
4º Por ultimo recogemos el valor del dato del optimizador y se lo colocamos a la media con la que estamos decidiendo las operaciones reales.
Este método no usa algoritmos genéticos, ni intenta adivinar el futuro, simplemente intentaría trabajar con lo que mejor le ha funcionado ultimamente, nada de una optimizacion con datos de dos años que estan muy alejados de la realidad actual.
Un saludo.
1º.- Yo más que en cuestiones y divagaciones de si son pardas o tordas cogeria un sistema que funcione y que con una optimización se vea que se puede mejorar el rendimiento. Por ejemplo un sistema de cruce de una media con su desplazada dos barras.
2º.- Dentro del experto pondria en una subrrutina el optimizador.
3º.- el optimizador simularia las operaciones realizadas en las ultimas 100 barras para un intervalo de mas menos 6 longitudes de la media actualmente utilizada y daria como resultado el valor de la media que mejor ha funcionado en estas últimas 100 barras.
4º Por ultimo recogemos el valor del dato del optimizador y se lo colocamos a la media con la que estamos decidiendo las operaciones reales.
Este método no usa algoritmos genéticos, ni intenta adivinar el futuro, simplemente intentaría trabajar con lo que mejor le ha funcionado ultimamente, nada de una optimizacion con datos de dos años que estan muy alejados de la realidad actual.
Un saludo.
-
- Mensajes: 4
- Registrado: 26 Mar 2009 00:47
elcctrro mil gracias, si entiendo el código seria mas o menos asi:
int MaxTrades = 3;
for (MaxTrades = OrdersTotal(); MaxTrades >= 0; MaxTrades--)
{
If ......
Te agradecería que por favor me dieras un ejemplo claro de como se haria, porque no estoy muy seguro de que estos parametros que yo coloco esten bien fundamentados.
Cordial Saludo.
int MaxTrades = 3;
for (MaxTrades = OrdersTotal(); MaxTrades >= 0; MaxTrades--)
{
If ......
Te agradecería que por favor me dieras un ejemplo claro de como se haria, porque no estoy muy seguro de que estos parametros que yo coloco esten bien fundamentados.
Cordial Saludo.
Si no he entendido mal la pregunta sería algo así
Código: Seleccionar todo
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int Magic = 1234;
int MaxTrades = 3;
//Hay Señal de Compra
if(N_BUY(Magic) < MaxTrades)//solo comprueba compras
{
OrderSend(...);
}
else
{
//Alert();
}
//Hay Señal de Venta
if(N_SELL(Magic) < MaxTrades)//solo comprueba ventas
{
OrderSend(...);
}
else
{
//Alert();
}
//O Todo junto
if(N_ALL(Magic) < 3)//comprueba compras y ventas
{
OrderSend(...);
}
else
{
//Lo que quieras.
}
//----
return(0);
}
//+------------------------------------------------------------------+
int N_BUY(int MG)
{
int N_BUY = 0;
for(int nb=0;nb<OrdersTotal();nb++)
{
if(OrderSelect(nb,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()!=Symbol()) continue;
if(MG == OrderMagicNumber() && OrderType() == OP_BUY)
{
N_BUY++;
}
}
return (N_BUY);
}
int N_SELL(int MG)
{
int N_SELL = 0;
for(int ns=0;ns<OrdersTotal();ns++)
{
if(OrderSelect(ns,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()!=Symbol()) continue;
if(MG == OrderMagicNumber() && OrderType() == OP_SELL)
{
N_SELL++;
}
}
return (N_SELL);
}
int N_ALL(int MG)
{
int N_ALL = 0;
for(int ns=0;ns<OrdersTotal();ns++)
{
if(OrderSelect(ns,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()!=Symbol()) continue;
if(MG == OrderMagicNumber() && OrderType() <= 1)
{
N_ALL++;
}
}
return (N_ALL);
}
-
- Mensajes: 4
- Registrado: 26 Mar 2009 00:47
-
- Mensajes: 4
- Registrado: 26 Mar 2009 00:47
Señores una pregunta adicional, tengo este código para cerrar ordenes pero me genera error "Invalid Ticket", se que hace referencia al numero id del ticket pero nose como establecerlo (el número de ticket que deseo cerrar), sera que me pueden ayudar?
int start ()
{
int ticket;
{
ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-70*Point,Ask+50*Point,NULL,0,0,CLR_NONE);
if(ticket>0)
}
if(iMA(NULL,0,14,0,MODE_SMA,PRICE_CLOSE,0)<=iMA(NULL,0,28,0,MODE_SMA,PRICE_CLOSE,0))
{
OrderClose("""ticket"""???,1,Ask,3,CLR_NONE);
return(0);
}
return(0);
}
Igual me pasa a la hora de modificar una orden, como hago para que dentro del código, el sistema sepa que ticket me debe cerrar o modificar? como hago para asignarle un id??
int start ()
{
int ticket;
{
ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-70*Point,Ask+50*Point,NULL,0,0,CLR_NONE);
if(ticket>0)
}
if(iMA(NULL,0,14,0,MODE_SMA,PRICE_CLOSE,0)<=iMA(NULL,0,28,0,MODE_SMA,PRICE_CLOSE,0))
{
OrderClose("""ticket"""???,1,Ask,3,CLR_NONE);
return(0);
}
return(0);
}
Igual me pasa a la hora de modificar una orden, como hago para que dentro del código, el sistema sepa que ticket me debe cerrar o modificar? como hago para asignarle un id??
Jeje el típico cruce de medias, se nota que estas empezando, pero eso es lo bueno que ya vas trasteando con el código.
Primer error general, las ordenes las tienes que seleccionar del mercado, no las que creas que estan abiertas, por tanto hay que buscar la orden de entre todas las que estan abiertas en el mercado y seleccionar la que te interese, bien con el magicnumber y/o tipo de orden, sea Buy o Sell; a la hora de modificar ocurre lo mismo, hay que usar la función OrderSelect
Primer error general, las ordenes las tienes que seleccionar del mercado, no las que creas que estan abiertas, por tanto hay que buscar la orden de entre todas las que estan abiertas en el mercado y seleccionar la que te interese, bien con el magicnumber y/o tipo de orden, sea Buy o Sell; a la hora de modificar ocurre lo mismo, hay que usar la función OrderSelect
Código: Seleccionar todo
int MAGIC = 1234;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false) break;
if((OrderMagicNumber() != MAGIC) || OrderSymbol() != Symbol()) continue;
if(OrderType() == OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),.......);
}
}
Una vez has llamado a OrderSelect() para seleccionar una orden, ya puedes llamar el resto de funciones que hacen referencia a información sobre esa orden, sean:
Código: Seleccionar todo
OrderClosePrice()
OrderCloseTime()
OrderComment()
OrderCommission()
OrderExpiration()
OrderLots()
OrderMagicNumber()
OrderOpenPrice()
OrderOpenTime()
OrderProfit()
OrderStopLoss()
OrderSwap()
OrderTakeProfit()
OrderTicket()
OrderType()
De casualidad en mis exploraciones por la Red me he encontrado con código para hacer cositas con Inteligencia Artificial:
http://reshetov.xnet.uz/files/Artificia ... _Right.mq4
Saludos,
X-Trader
http://reshetov.xnet.uz/files/Artificia ... _Right.mq4
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."
mirad esta página:
http://articles.mql4.com/783
y ya me contais, yo estoy intentando hacer un optimizador en tiempo real para tres variables, pero esto de las neuronales lo no termino de ver claro.
Un saludo.
http://articles.mql4.com/783
y ya me contais, yo estoy intentando hacer un optimizador en tiempo real para tres variables, pero esto de las neuronales lo no termino de ver claro.
Un saludo.
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
La web citada redirige ahora a ésta:
https://www.brokenpatterns.com/
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."
Si te ha gustado este hilo del Foro, ¡compártelo en redes!