2 Archivos adjunto(s)
Re: Business are business
Hola de nuevo, pues como dice el dicho: "el que busca encuentra". Tras una semana buscando en internet acerca de la optimización, definición de rango, qué es el algoritmo genético, qué pasos seguir, etc., he encontrado una serie de vídeos que explican bastante bien estos temas:
Este es el link:
Profundizando en Robots de Metatrader 1/5: ¿Qué es la optimización manual y cómo funciona?
Resumen:
Vídeo 1: optimización de cada variable para crear rangos
Vídeo 2: qué es un óptimo local, ir mediante prueba y error para encontrar el óptimo absoluto.
Archivo adjunto 37422
Vídeo 3: algoritmo genético, limitaciones y ventajas.
Archivo adjunto 37421
Vídeo 4 y 5 en marcha, en cuanto tenga noticias les comento.
Re: Business are business
Se me ha olvidado mencionar que las operaciones las he realizado en demo, ello por la cuestión de probar cómo responden los EAs.
8 Archivos adjunto(s)
Re: Business are business
Hola a todos de nuevo!
Lubina
aprendetrader
garuda villas
Les doy las gracias por sus comentarios. En especial a atenais quien propuso la idea de lanzar mt4 desde tickstory, fue el santo remedio y pude descargar datos de varios pares.
Esta semana trata sobre la definición de rangos y optimización de un EA.
Archivo adjunto 37310
Cómo pasar de algo así a esto:
Archivo adjunto 37311
Comencé con el típico MACD que viene por defecto en mt4 y modifiqué el código como sigue:
Código:
extern double TakeProfit =50;
extern double Lots =0.1;
extern double TrailingStop =30;
extern double MACDOpenLevel =3;
extern double MACDCloseLevel=2;
extern int MATrendPeriod =26;
extern double a=12;
extern double b=26;
extern double c=9;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnTick(void)
{
double MacdCurrent,MacdPrevious;
double SignalCurrent,SignalPrevious;
double MaCurrent,MaPrevious;
int cnt,ticket,total;
//---
// initial data checks
// it is important to make sure that the expert works with a normal
// chart and the user did not make any mistakes setting external
// variables (Lots, StopLoss, TakeProfit,
// TrailingStop) in our case, we check TakeProfit
// on a chart of less than 100 bars
//---
if(Bars<100)
{
Print("bars less than 100");
return;
}
if(TakeProfit<10)
{
Print("TakeProfit less than 10");
return;
}
//--- to simplify the coding and speed up access data are put into internal variables
MacdCurrent=iMACD(NULL,0,a,b,c,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);
total=OrdersTotal();
if(total<1)
{
//--- no opened orders identified
if(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ",AccountFreeMargin());
return;
}
//--- check for long position (BUY) possibility
if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"macd sample",16384,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
}
else
Print("Error opening BUY order : ",GetLastError());
return;
}
//--- check for short position (SELL) possibility
if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice());
}
else
Print("Error opening SELL order : ",GetLastError());
}
//--- exit from the "no opened orders" block
return;
}
//--- it is important to enter the market correctly, but it is more important to exit it correctly...
for(cnt=0;cnt<total;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
continue;
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
//--- long position is opened
if(OrderType()==OP_BUY)
{
//--- should it be closed?
if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDCloseLevel*Point))
{
//--- close order and exit
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
Print("OrderClose error ",GetLastError());
return;
}
//--- check for trailing stop
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
//--- modify order and exit
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green))
Print("OrderModify error ",GetLastError());
return;
}
}
}
}
else // go to short position
{
//--- should it be closed?
if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point))
{
//--- close order and exit
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
Print("OrderClose error ",GetLastError());
return;
}
//--- check for trailing stop
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
//--- modify order and exit
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red))
Print("OrderModify error ",GetLastError());
return;
}
}
}
}
}
}
//---
}
//+------------------------------------------------------------------+
Externalizamos las variables y agregamos a,b y c como otra media móvil.
Posteriormente se realiza un backtest para verificar la estrategia y ver su factor de rentabilidad, operaciones, retroceso, media de operaciones consecutivas, etc. Seguramente no saldrá muy alto, pero puede dar una buena referencia del punto inicial.
Archivo adjunto 37312
Definimos los rangos de las variables en las propiedades del experto de las pestaña prueba de estrategia:
Archivo adjunto 37313
Tildamos la casilla de optimización y comenzamos el proceso.
Archivo adjunto 37314
He tomado como referencia usar la optimización respecto al balance aunque pueden hacer con lo que gusten (retroceso, factor de beneficio, etc.)
Los resultados de la optimización son lo más importante, elegiremos aquellos que ofrezcan buenos beneficios, un buen factor de beneficio, un considerable retroceso, una buena rentabilidas esperada, etc.
| beneficios |
| 215.68 |
| 198.45 |
| 171.91 |
| rentabilidad esperada |
| 7.99 |
| 7.94 |
| 8.6 |
| disminucón$ |
| 127.45 |
| 95.91 |
| 70.81 |
| disminución% |
| 1.26% |
| 0.95% |
| 0.70% |
Esos son para mí los tres principales resultados de toda la optimización, se puede elegir configurar esos parámetros y ver qué sucede con la curva de balance. En mi caso cargue la configuración siguiente:
| TakeProfit=80 |
TrailingStop=20 |
MACDOpenLevel=35 |
MATrendPeriod=7 |
a=67 |
b=86 |
c=79 |
Lots=0.1 |
MACDCloseLevel=2 |
Posteriormente apliqué el EA al par euro-dólar y obtuvimos lo siguiente:
Archivo adjunto 37315
Un par de dólares y sigue sin decepcionarme este EA tan sencillo, combinado con otros seguro será excelente.
Me gustaría profundizar en un siguiente tema la cuestión de definir rangos y la utilización de EA analizer para nuestras estrategias, ya que ambos son herramientas potentes para mejorar nuestro trading. Actualmente realizo una optimización de un EA tipo scalping y he tenido varias dudas:
Archivo adjunto 37316
En la imagen anterior arrastre el EA MACD sample pero no sé por qué no me marca las entradas o salidas, no sé si primero tengo que hacer la prueba de estrategia y desde allí mandar que me abra el gráfico, si sólo lo arrastro no se abren mis operaciones ni nada. Alguna idea?
Archivo adjunto 37317
Tengo este EA tipo scalping pero son bastantes indicadores y no se al seleccionarlos todos no me permite hacer la optimización, alguno cono la manera de modificar el algoritmo de optmización para que sea más eficiente? He leído que el que tiene por defecto mt4 no es de lo mejor.
Respecto a definir los rangos de variables,y las paradas que recomiendan? Cómo es su optimización?
He tratado de abrir varios pares a la vez en mt4 y usar EAs en cada ventana pero sólo se abren operaciones en un par, saben cómo modificar o cómo hacer que el EA funcione en varios pares a la vez?
Alguno conoce estos indicadores?
ECN
Williams
ATR
CCI
Breakeven
Recalco sobre todo la parte de optimización, si alguno conoce algún buen libro o vídeo se los agradecería demasiado. Saludos a todos.
Re: Business are business
es genial tu historia ya que muchos de aqui nos inspira ver que no estamos solos y que muchas veces lo que pensamos que nadie lo hace en realidad muchos lo hacen y sirve de apoyo, pues vemos que los errores son parte del exito.
Re: Business are business
Para que te funcione desde el mt4 en el método de tickstory debes abrir el mt4 desde el programa del tickstory. Me parece que se llama abrir terminal la opción y previamente haber cargado la ruta del mt4 que quieres que abra.
Un abrazo
Re: Business are business
Buenas,
Que menos que darte la bienvenida y un agradecimiento por tener el valor de hacer un diario.
Seguro que te proporciona un crecimiento en tu carrera como trader. Estaremos atentos a el.
Un saludo para tod@s
Re: Business are business
Gracias pz_inferno, comenzando descarga =D. Comentaré en cuanto realice la prueba.
Re: Business are business
Una vez marcado el par que quieres descargar y en qué timeframe, debes darle a descargar. Te tardará un rato pero a mi siempre me ha funcionado de esa manera. Para un testeo mas exacto es mejor descargarse los historiales desde el timeframe mas bajo posible, de esa manera te aseguras una fiabilidad del 100%.
Un saludo,
Re: Business are business
6 Archivos adjunto(s)
Re: Business are business
Hola de nuevo, agradezco a todos vosotros por el ánimo que me dan. Y vamos a comenzar con un par de dudas que tengo:
Mi proyecto actual es realizar un EA (expert advisor) en mt4, como sabrán es necesario realizar un modelado con unos buenos datos históricos, pero me he liado un poco:
Archivo adjunto 37247
Archivo adjunto 37248
Como se puede apreciar mi modelado llega apenas al 44.58% y con bastantes pérdidas.
Archivo adjunto 37250
He usado los datos que ofrece Mt4, seleccioné el par euro-dólar y he iluminado varios time frames, pero no he dado click en descargar, no sé si eso esté afectando mi resultado.
Posteriormente usé el método de ticktstory lite:
Archivo adjunto 37251
He escogido el mismo par y tratado de exportar a mt4 pero recibo este error:
Archivo adjunto 37252
No sé que sucede, si alguien puede ayudarme o recomendarme una página de datos históricos fiables o algún vídeo se los agradecería. Saludos.