Gogetter EA - página 9

 

Espero que alguien pueda encontrar la respuesta al misterio aquí...

Este post tiene todo lo necesario para ejecutar GGL3 si se pone este código en un archivo include .mqh. He comprimido los informes .htm porque ambos son más de 4mb debido a todas las órdenes modificadas...

parece que mi rediseño de la función trailing stop mejoró el rendimiento de 1,2 millones a 1,3 millones...O eso es resultado de empezar con un depósito inicial de 1000 en lugar de 500. No sé cuál de las dos cosas, porque GGL3 no empezará con un depósito inicial de 500 ni abrirá ninguna operación

Es triste decir que a pesar de lo que parece ser el progreso en esto sigue siendo algo no revelado hasta ahora que mantiene esto de hacer el dinero grande constantemente. Más a menudo falla y va a la quiebra. Si no es el trailing stop el que lo hace entonces debe ser otra cosa... no sé qué...

Parece que hay mucha recompensa y algo de dinero para quien pueda averiguar qué está causando que esto tenga una variación tan amplia en los resultados de la misma configuración del mismo ea en el mismo rango de tiempo y corregirlo. Me tiene perplejo actualmente.

Me voy a tomar una semana de vacaciones... Espero que alguien haya publicado alguna idea o solución cuando regrese. No veo cómo puedo realmente pasar a más desarrollo con esto hasta que el misterio aquí se revela.

//+------------------------------------------------------------------+

//| GGLrewrite.mqh |

//| In no event will author be liable for any damages whatsoever. |

//| Use at your own risk. |

//| |

//| Please do not remove this header. |

//+------------------------------------------------------------------+

#property copyright "Aaragorn and Eaglehawk & Maji & Robert C."

#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

#property link "http://forex.factoid.ca/forums/showthread.php?t=104"

#property link "https://www.forex-tsd.com/expert-advisors-metatrader-4/2840-gogetter-ea.html"

// many thanks goes to all those on the tsdforex forum and factoid forum who have encouraged us this far

//+------------------------------------------------------------------+

//| defines |

//+------------------------------------------------------------------+

//+-----------Store HIGH, LOW matching data------+

#define SLSIZE 15

static int SLIndex = 0;

static double sLocatorLows[ SLSIZE ] = { 0 };

static double sLocatorHighs[ SLSIZE ] = { 0 };

//+-----------Stored equity data-----------------+

#define StoredEquitySIZE 5

static int EquityIndex = 0;

static double EQUITY[ StoredEquitySIZE ] = { 0 };

static int EquityValuesStored = 0;

//+-----------close based on time----------------+

extern string Time_Settings="Time In Trade Settings";

extern int MonitorInMinutes = 60; // minutes after open to check state of trade

extern int ThresholdMove = 1; // if after that time we don't have +'x' pips we will exit

extern int MinsMultiplier = 75; // multiplies the MonitorInMinutes to make minutes (if 'x'=60) into hours

//+------------------------------------------------------------------+

//| Commonly used GoGetter Functions | |

//+------------------------------------------------------------------+

//+-------------StoreHighsAndLows Function----support and resistance arrays------thanks to Robert C for assistance on this-------+

//+-------creates array of each trade series support and resistance for signal profile matching-------------------+

void StoreHighsAndLows(double HIGH, double LOW)

{

if ( SLIndex >= SLSIZE )

{

SLIndex = 0;

}

sLocatorLows[ SLIndex ] = LOW;

sLocatorHighs[ SLIndex ] = HIGH;

SLIndex++;

}

//+-----------------------end of StoreHighsAndLows------------------------------------+

//+--------------- Get past equity function---------Thanks Robert C.-----------+

// This returns past equity from the global equity array. The howFarBack parameter is a positive integer that indicates how far back into the array to go

// 1 would be the previous equity, 2 would be the equity before that, etc.

// the HowFarBack should not be greater than the arraysize

double GetPastEquity(int HowFarBack)

{

if ( HowFarBack > EquityValuesStored )

{

Print("Error getting past equity, Looking back farther than what we have stored");

return (-1);

}

else

{

int PastIndex = EquityIndex - HowFarBack;

if ( PastIndex < 0 )

{

PastIndex += StoredEquitySIZE;

}

return (EQUITY[PastIndex]);

}

}

//+--end of get past equity function-----------+

//+---Stores account Equity value in an array for future comparisions up to as many previous trades as the declared size of the array----thanks Robert C.----+

void StoreAccountEquity(double equity)

{

if ( EquityIndex >= StoredEquitySIZE )

{

EquityIndex = 0;

}

EQUITY[EquityIndex] = equity;

EquityIndex++;

if ( EquityValuesStored < StoredEquitySIZE )

{

EquityValuesStored++;

}

}

//+-------end of Store Equity function-------------------+

//+---------count open trades function-------ty Maji--------------------------+

int CountTrades()

{

int count=0;

int trade;

for(trade=OrdersTotal()-1;trade>=0;trade--)

{

OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()!=Symbol()&&OrderMagicNumber()!=MagicNumber)

continue;

if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)

if((OrderType()==OP_SELL) || (OrderType()==OP_BUY))

count++;

}//for

return(count);

}

//+-----------end of count trades-------------------------------------+

//+---------------------Close Based on Time function------------Thanks to 'Maji' for this-------------------+

void CloseOrder()

{

double Profit=ThresholdMove*Point;

int total = CountTrades();

for (int cnt = 0 ; cnt < total ; cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if ((CurTime()-OrderOpenTime())>MonitorInMinutes*60*MinsMultiplier)

{

LowTrailingStopTrigger = False;

if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && Bid-Profit<OrderOpenPrice() )

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);

}

if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && Bid+Profit>OrderOpenPrice())

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);

}

}

}

}

//+---------------------------end of close on time code---------------+

//+------------------------increase lots function-------------------------+

//+----------------increases lots based on account equity-----------------+

//double IncreaseLots()

//{

// Lots = NormalizeDouble(AccountFreeMargin()/(LotIncreaseFactor*1000/0.1),2);

// if(Lots > 99) Lots = 99;

// Print("account free margin = ",AccountFreeMargin()," Lots = ",Lots);

// return(Lots)

//}
Archivos adjuntos:
ggl3.zip  353 kb
ggl3fail.zip  335 kb
ggl3.gif  6 kb
ggl3fail.gif  8 kb
ggl3.mq4  21 kb
 

aquí está el archivo de inclusión comprimido si es más fácil de manejar.

Archivos adjuntos:
 

las preguntas que me hago ahora son ....

¿es estable el flujo de datos? Asumo que lo es porque utiliza los archivos del centro de historia....¿Quizás haya que cuestionar esa suposición?

¿es estable la forma en que la plataforma procesa el flujo de datos y se puede confiar en que procese los mismos datos exactamente de la misma manera cada vez? Si no es así, ¿quién ha creado esta plataforma? ¿Cómo puedo ponerme en contacto con ellos? ¿Qué es lo que hay que arreglar para que sea fiable?

no parece probable que llegue a estabilizar el código del EA si cualquiera de esas dos incógnitas sigue siendo potencialmente variable y de hecho poco fiable. ¿Cómo se puede verificar su fiabilidad?

He publicado una solicitud de atención a esta pregunta en esta página...

http://www.metaquotes.net/index.php?bugtrack/

esperemos que alguien tenga alguna idea y responda pronto.

 
Aaragorn:
las preguntas que me hago ahora son ....

¿Es estable el flujo de datos? Supongo que lo es porque utiliza los archivos del centro de historia....¿Quizás haya que cuestionar esa suposición?

¿Es estable la forma en que la plataforma procesa el flujo de datos y se puede confiar en que procese los mismos datos exactamente de la misma manera cada vez? Si no es así, ¿quién ha creado esta plataforma? ¿Cómo puedo ponerme en contacto con ellos? ¿Qué es lo que hay que arreglar para que sea fiable?

no parece probable que llegue a estabilizar el código del EA si cualquiera de esas dos incógnitas sigue siendo potencialmente variable y de hecho poco fiable. ¿Cómo se puede verificar su fiabilidad?

He publicado una solicitud de atención a esta pregunta en esta página...

http://www.metaquotes.net/index.php?bugtrack/

esperemos que alguien tenga alguna idea y responda pronto.

.... ¿has tratado de probar esto en múltiples plataformas? actualmente estoy probando el mismo EA en dos plataformas diferentes de BD para ver qué resultados voy a obtener. quería asegurarme de que los resultados tendrían una buena cantidad de datos fijos antes de tomar uno en vivo. tal vez es una idea estúpida, pero no quiero arriesgar el capital real hasta que tenga una idea bastante segura de que el Ea tendrá un rendimiento consistente.

 

Solo lo he probado en metatrader 4 usando el 30tf para el GPBUSD. No porque no sea buena idea hacerlo, sino porque sólo soy humano y como no soy mujer tampoco soy multitarea. Así que simplemente no me he puesto a hacerlo todavía. Todavía no he hecho ninguna otra prueba. He seguido centrado en los temas de desarrollo. Mi objetivo era conseguir que fuera estable en esta instancia antes de intentar expandirlo a otros pares u otras plataformas o lo que sea.

Por todos los medios utilizar su sentido común. Permitiré que esto se ejecute en mi cuenta de demostración mientras estoy fuera esta próxima semana. Como nos vamos mañana y estaremos fuera durante la semana no volveré al hilo muy probablemente hasta el próximo martes.

No considero que esté en condiciones de arriesgar dinero real, sólo quiero ver que se resuelvan las inestabilidades y luego hacer una prueba en demo. Entonces veré donde los datos me dicen que ir con él desde allí. Realmente me gustaría invitar especialmente a los desarrolladores para escudriñar mientras estoy fuera y ver si el procesamiento de datos o las irregularidades del archivo de datos pueden ser verificados.

No veo nada obviamente incorrecto en el código que pueda explicar la variación. Ya me he equivocado antes, podría estar equivocado también. Me parece bien estar equivocado si alguien puede mostrarme cómo o dónde corregirlo.

No te voy a mentir, estaré feliz de alejarme de esto por un tiempo. Ha consumido demasiado mi atención y me merezco buscar un poco de equilibrio en la vida mientras trabajo en esto.

Dejaré esto en sus manos por un tiempo y veré lo que pueden hacer con él. Sólo os pido que si hacéis alguna investigación al respecto informéis en este hilo con vuestros resultados para que todos podamos beneficiarnos de ello.

 

...........

¿podríais poner las posturas cortas y largas en un solo archivo mp4?

 

¿Por qué un informe tan diferente con la misma configuración?

Usando el EA adjunto con el archivo include.mqh adjunto. Ejecuto una prueba de la estrategia utilizando estos ajustes....

Botón de propiedades del experto....

Pestaña de prueba...

1000 USD de depósito inicial...

Posiciones: Largo y corto

Parámetro Optomizado: Saldo

La casilla del algoritmo genético no está marcada

Pestaña de entradas...

Todas las entradas del usuario se utilizan exactamente como se guardan en el EA sin cambios manuales en esta pestaña

Pestaña Optimización...

No se ha marcado nada en esta pestaña

Configuración.....

Asesor Experto: GGL3, Aaragorn y Eaglehawk & Maji & Robert C.

Símbolo: GBPUSD, Libra esterlina vs Dólar americano

Periodo: M30

Modelo: Cada tick (basado en todos los leasttimeframes disponibles con interpolación fractal de cada tick)

Estoy utilizando el archivo de datos de 1 minuto que también se adjunta.

La casilla "Use date" está marcada; From: 2005.09.09 Hasta: Hoy (2006.08.22)

Marco la casilla de Recalcular

No marco la casilla de Optimización

Obtengo este informe cuando la prueba está terminada...

**************************************************

Barras en la prueba 17735

Ticks modelados 702859

Calidad de modelado 89.82%

Depósito inicial 1000.00

Beneficio neto total 1375788,66

Beneficio bruto 3678568,71

Pérdida bruta -2302780,05

Factor de beneficio 1,60

Beneficio esperado 472,62

Reducción absoluta 240,00

Reducción máxima 231662,10 (15,07%)

Reducción relativa 55,32% (18074,74)

Total de operaciones 2911

Posiciones cortas (% de won) 0 (0,00%)

Posiciones largas (% de won) 2911 (42,05%)

Operaciones con beneficios (% del total) 1224 (42,05%)

Operaciones con pérdidas (% del total) 1687 (57,95%)

Mayor

ganancia 89100,00

operación con pérdidas -15840,00

Media

de beneficios 3005,37

pérdida de comercio -1365.01

Máximo

victorias consecutivas (ganancias en dinero) 9 (106921.10)

Pérdidas consecutivas (pérdida en dinero) 18 (-163,10)

Máximo

ganancias consecutivas (recuento de ganancias) 225720.50 (7)

pérdidas consecutivas (recuento de pérdidas) -15845,70 (5)

Media

ganancias consecutivas 2

pérdidas consecutivas 2

****************************************************

Ahora estoy pensando que este es un muy buen EA así que quiero probarlo de nuevo para asegurarme de que hace lo mismo....

No hago ningún cambio en la configuración de cualquier tipo....

Selecciono la casilla Recalcular en la pestaña de ajustes y hago clic en iniciar.... Ahora obtengo este informe...

******************************************************

Barras en la prueba 18015

Ticks modelados 739231

Calidad de modelado 89.83%

Depósito inicial 1000.00

Beneficio neto total -731,75

Beneficio bruto 31897,83

Pérdida bruta -32629,58

Factor de beneficio 0,98

Beneficio esperado -0,24

Reducción absoluta 780,40

Reducción máxima 4912,15 (94,91%)

Reducción relativa 94,91% (4912,15)

Total de operaciones 2990

Posiciones cortas (% de won) 0 (0,00%)

Posiciones largas (% de won) 2990 (34,88%)

Operaciones con beneficios (% del total) 1043 (34,88%)

Operaciones con pérdidas (% del total) 1947 (65,12%)

Mayor

de beneficios 1170,00

Operación con pérdidas -360,00

Media

de beneficios 30,58

pérdida de comercio -16.76

Máximo

victorias consecutivas (beneficios en dinero) 8 (124,50)

Pérdidas consecutivas (pérdida en dinero) 20 (-45,50)

Máximo

ganancias consecutivas (recuento de ganancias) 2606.30 (7)

pérdidas consecutivas (recuento de pérdidas) -360,00 (1)

Media

ganancias consecutivas 2

pérdidas consecutivas 3

******************************************************

¿por qué las dos pruebas son tan diferentes?

¿qué hace el probador diferente cuando prueba el EA por segunda vez?

¿Cómo puedo hacer que el test sea el mismo cada vez que recalculo?

Gracias por su orientación para obtener el mismo informe cada vez que pruebe este EA.

Aaragorn

***********************include .mqh file below *******************************

//+------------------------------------------------------------------+

//| GoGetterfunctions.mqh |

//| In no event will author be liable for any damages whatsoever. |

//| Use at your own risk. |

//| |

//| Please do not remove this header. |

//+------------------------------------------------------------------+

#property copyright "Aaragorn and Eaglehawk & Maji & Robert C."

#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

#property link "http://forex.factoid.ca/forums/showthread.php?t=104"

#property link "https://www.forex-tsd.com/expert-advisors-metatrader-4/2840-gogetter-ea.html"

// many thanks goes to all those on the tsdforex forum and factoid forum who have encouraged us this far

//+------------------------------------------------------------------+

//| defines |

//+------------------------------------------------------------------+

//+-----------Store HIGH, LOW matching data------+

#define SLSIZE 15

static int SLIndex = 0;

static double sLocatorLows[ SLSIZE ] = { 0 };

static double sLocatorHighs[ SLSIZE ] = { 0 };

//+-----------Stored equity data-----------------+

#define StoredEquitySIZE 5

static int EquityIndex = 0;

static double EQUITY[ StoredEquitySIZE ] = { 0 };

static int EquityValuesStored = 0;

//+-----------close based on time----------------+

extern string Time_Settings="Time In Trade Settings";

extern int MonitorInMinutes = 60; // minutes after open to check state of trade

extern int ThresholdMove = 1; // if after that time we don't have +'x' pips we will exit

extern int MinsMultiplier = 75; // multiplies the MonitorInMinutes to make minutes (if 'x'=60) into hours

//+------------------------------------------------------------------+

//| Commonly used GoGetter Functions | |

//+------------------------------------------------------------------+

//+-------------StoreHighsAndLows Function----support and resistance arrays------thanks to Robert C for assistance on this-------+

//+-------creates array of each trade series support and resistance for signal profile matching-------------------+

void StoreHighsAndLows(double HIGH, double LOW)

{

if ( SLIndex >= SLSIZE )

{

SLIndex = 0;

}

sLocatorLows[ SLIndex ] = LOW;

sLocatorHighs[ SLIndex ] = HIGH;

SLIndex++;

}

//+-----------------------end of StoreHighsAndLows------------------------------------+

//+--------------- Get past equity function---------Thanks Robert C.-----------+

// This returns past equity from the global equity array. The howFarBack parameter is a positive integer that indicates how far back into the array to go

// 1 would be the previous equity, 2 would be the equity before that, etc.

// the HowFarBack should not be greater than the arraysize

double GetPastEquity(int HowFarBack)

{

if ( HowFarBack > EquityValuesStored )

{

Print("Error getting past equity, Looking back farther than what we have stored");

return (-1);

}

else

{

int PastIndex = EquityIndex - HowFarBack;

if ( PastIndex < 0 )

{

PastIndex += StoredEquitySIZE;

}

return (EQUITY[PastIndex]);

}

}

//+--end of get past equity function-----------+

//+---Stores account Equity value in an array for future comparisions up to as many previous trades as the declared size of the array----thanks Robert C.----+

void StoreAccountEquity(double equity)

{

if ( EquityIndex >= StoredEquitySIZE )

{

EquityIndex = 0;

}

EQUITY[EquityIndex] = equity;

EquityIndex++;

if ( EquityValuesStored < StoredEquitySIZE )

{

EquityValuesStored++;

}

}

//+-------end of Store Equity function-------------------+

//+---------count open trades function-------ty Maji--------------------------+

int CountTrades()

{

int count=0;

int trade;

for(trade=OrdersTotal()-1;trade>=0;trade--)

{

OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()!=Symbol()&&OrderMagicNumber()!=MagicNumber)

continue;

if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)

if((OrderType()==OP_SELL) || (OrderType()==OP_BUY))

count++;

}//for

return(count);

}

//+-----------end of count trades-------------------------------------+

//+---------------------Close Based on Time function------------Thanks to 'Maji' for this-------------------+

void CloseOrder()

{

double Profit=ThresholdMove*Point;

int total = CountTrades();

for (int cnt = 0 ; cnt < total ; cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if ((CurTime()-OrderOpenTime())>MonitorInMinutes*60*MinsMultiplier)

{

LowTrailingStopTrigger = False;

if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && Bid-Profit<OrderOpenPrice() )

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);

}

if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && Bid+Profit>OrderOpenPrice())

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);

}

}

}

}

//+---------------------------end of close on time code---------------+

//+------------------------increase lots function-------------------------+

//+----------------increases lots based on account equity-----------------+

//double IncreaseLots()

//{

// Lots = NormalizeDouble(AccountFreeMargin()/(LotIncreaseFactor*1000/0.1),2);

// if(Lots > 99) Lots = 99;

// Print("account free margin = ",AccountFreeMargin()," Lots = ",Lots);

// return(Lots)

//}

***************************end of include .mqh file******************************
Archivos adjuntos:
ggl3.mq4  21 kb
 

. me gustaria ayudarte a probar esto, pero por alguna razón no puedo adjuntarlo a un gráfico.. no puedo entender por qué no..

 
furious_angel:
. me gustaria ayudarte a probar esto, pero por alguna razon no puedo adjuntarlo a un grafico.. no puedo entender por que no..

Intenta compilarlo. También es necesario tener el archivo mqh en la carpeta de expertos para que funcione.

 
forextrades:
Prueba a compilarlo. También necesitas tener el archivo mqh en la carpeta de expertos para que funcione.

en realidad el archivo mqh tiene que ir en la carpeta "include" que es una subcarpeta de la carpeta "experts". Al menos así es como funciona para mí.

No tengo problemas para adjuntarlo> Sólo tengo problemas para que el probador de estrategias sea consistente con él.

Razón de la queja: