Gogetter EA - página 9

 

Espero que alguém possa encontrar aqui a resposta para o mistério...

Este post tem tudo o que é necessário para executar o GGL3 se você colocar este código em um arquivo .mqh incluído. Eu zipei os relatórios .htm porque ambos têm mais de 4mb por causa de todas as ordens de modificação...

parece que meu redesenho da função trailing stop melhorou o desempenho de 1,2 milhões para 1,3 milhões...OU que é o resultado de começar com um depósito inicial de 1000 ao invés de 500. Não sei qual, porque o GGL3 não vai começar com um depósito inicial de 500 e abrir qualquer negócio

É triste dizer que, apesar do que parece ser um progresso, ainda há algo ainda não revelado que impede que se ganhe muito dinheiro de forma consistente. Com mais freqüência, ele falha e vai à falência. Se não é a parada de fuga que o faz, então deve ser algo mais... Não sei o que...

Parece que há muita recompensa e algum dinheiro grande nele para quem quer que consiga descobrir o que está causando isto ter uma variação tão grande nos resultados dos mesmos cenários da mesma área de tempo e corrigi-la. Isso me deixou perplexo no momento.

Estou tirando uma semana de férias... Espero que alguém tenha postado alguma visão ou solução quando eu voltar. Não vejo como posso realmente passar para mais desenvolvimento com isto até que o mistério aqui seja revelado.

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

//| 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)

//}
Arquivos anexados:
ggl3.zip  353 kb
ggl3fail.zip  335 kb
ggl3.gif  6 kb
ggl3fail.gif  8 kb
ggl3.mq4  21 kb
 

aqui está o arquivo incluído zipado, se isso for mais fácil de gerenciar.

Arquivos anexados:
 

as perguntas que estou fazendo agora são....

o fluxo de dados é estável? Presumo que seja porque usa os arquivos do centro de histórico...., talvez essa suposição deva ser contestada?

a maneira como a plataforma processa o fluxo de dados é estável e é possível confiar que ela processa os mesmos dados exatamente da mesma maneira todas as vezes? Se não foi quem criou esta plataforma? como posso contatá-los? o que é preciso consertar para torná-la confiável?

não me parece provável que eu alguma vez estabize o código EA se alguma dessas duas incógnitas ainda for potencialmente variável e, na verdade, não confiável. Como é possível verificar sua confiabilidade?

Eu coloquei um pedido de atenção a esta pergunta nesta página...

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

esperemos que alguém tenha alguma visão e respostas em breve.

 
Aaragorn:
as perguntas que estou fazendo agora são....

o fluxo de dados é estável? Presumo que seja porque usa os arquivos do centro de histórico.... talvez essa suposição deva ser contestada?

a maneira como a plataforma processa o fluxo de dados é estável e é possível confiar que ela processa os mesmos dados exatamente da mesma maneira todas as vezes? Se não foi quem criou esta plataforma? como posso contatá-los? o que é preciso consertar para torná-la confiável?

não me parece provável que eu alguma vez estabize o código EA se alguma dessas duas incógnitas ainda for potencialmente variável e, na verdade, não confiável. Como é possível verificar sua confiabilidade?

Eu coloquei um pedido de atenção a esta pergunta nesta página...

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

esperemos que alguém tenha alguma visão e respostas em breve.

.... você já tentou testar isso em plataformas mutilple? estou atualmente testando a mesma EA em duas plataformas BD diferentes para ver que resultados estarei obtendo. eu queria ter certeza de que os resultados teriam uma quantidade razoável de dados fixos antes de levar um ao vivo. talvez seja uma idéia estúpida, mas não quero arriscar capital real até ter uma idéia razoavelmente certa de que a Ea terá um desempenho consistente.

 

Só o testei no metatrader 4 usando o 30tf para o GPBUSD. Não porque não é uma boa idéia fazê-lo, mas porque sou apenas humano e como não sou do sexo feminino também não sou multitarefa. Portanto, eu simplesmente ainda não consegui fazer isso. Eu ainda não fiz nenhum outro teste. Tenho me mantido concentrado nas questões de desenvolvimento. Meu objetivo era mantê-lo estável neste caso antes de tentar expandir para outros pares ou outras plataformas ou o que quer que seja.

Por todos os meios, use seu bom senso. Permitirei que isto funcione em minha conta demo enquanto estiver fora na próxima semana. Já que partimos amanhã e estaremos fora durante a semana, provavelmente não voltarei ao tópico até a próxima terça-feira.

Eu não acho que se ainda for capaz de arriscar dinheiro real, eu só quero ver as instabilidades resolvidas e depois fazer um teste de demonstração. Depois verei onde os dados me dizem para ir com ele a partir daí. Eu realmente gostaria de convidar especialmente os desenvolvedores a examiná-los enquanto eu estiver fora e ver se o processamento de dados ou as irregularidades do arquivo de dados podem ser verificadas.

Eu não vejo nada obviamente errado com o código que explicaria a variação. Eu já me enganei antes de poder estar enganado sobre isso também. Não me importo de estar errado se alguém puder me mostrar como ou onde corrigi-lo.

Não vou mentir para você, ficarei feliz em me afastar disso por um tempo. Isso consumiu muito da minha atenção e eu mereço buscar algum equilíbrio na vida enquanto trabalho nisto.

Vou deixar isto nas mãos de vocês por um tempo e ver o que vocês podem fazer com isto. Eu só peço que, se vocês fizerem alguma pesquisa sobre isso, reportem a este tópico com seus resultados, para que todos possam se beneficiar com isso.

 

...........

você poderia colocar posições curtas e longas em um arquivo mp4?

 

Por que um relatório tão diferente das mesmas configurações?

Usando a EA anexada com o arquivo include.mqh anexado. Eu faço um teste de estratégia usando estas configurações....

Botão Expert Properties Button....

Aba Testng...

Depósito inicial de 1000 USD...

Posições: Longo e Curto

Parâmetro optomizado: Balanço

A caixa do algoritmo genético não está marcada

Guia Inputs...

Todas as entradas do usuário são usadas exatamente como são salvas na EA, sem alterações manuais nesta aba

Guia de Otimização...

Nada é verificado nesta aba

Configurações.....

Consultor especializado: GGL3, Aaragorn e Eaglehawk & Maji & Robert C.

Símbolo: GBPUSD, Grande Libra Brilhante versus Dólar Americano

Período: M30

Modelo: Cada carrapato (com base em todos os tempos mínimos disponíveis com interpolação fractal de cada carrapato)

Estou usando o arquivo de dados de 1 minuto também anexado.

A caixa de data de uso está marcada; De: 2005.09.09 Até: Hoje (2006.08.22)

Marquei a caixa para Recalcular

Não assinalo a caixa para Otimização

Recebo este relatório quando o teste termina...

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

Barras em teste 17735

Carrapatos modelados 702859

Qualidade de modelagem 89,82%

Depósito inicial 1000,00

Lucro líquido total 1375788,66

Lucro bruto 3678568,71

Prejuízo bruto -2302780.05

Fator de lucro 1,60

Reembolso esperado 472,62

Desembolso absoluto 240,00

Desembolso máximo 231662,10 (15,07%)

Desembolso relativo 55,32% (18074,74)

Total de negócios 2911

Posições curtas (ganho %) 0 (0,00%)

Posições longas (ganho %) 2911 (42,05%)

Lucros comerciais (% do total) 1224 (42,05%)

Perdas comerciais (% do total) 1687 (57,95%)

A maior

comércio lucrativo 89100.00

comércio de perdas -15840.00

Média

comércio lucrativo 3005,37

comércio de perdas -1365.01

Máximo

vitórias consecutivas (lucro em dinheiro) 9 (106921.10)

perdas consecutivas (perda em dinheiro) 18 (-163,10)

Maximal

lucro consecutivo (contagem de vitórias) 225720,50 (7)

perda consecutiva (contagem de perdas) -15845,70 (5)

Média

vitórias consecutivas 2

perdas consecutivas 2

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

Agora eu estou pensando que esta é uma EA muito boa, então eu quero testá-la novamente para ter certeza de que ela faz a mesma coisa....

Eu não faço nenhuma mudança nas configurações de qualquer tipo....

Eu seleciono a caixa Recalcular na guia de configurações e clico em start....I obtenho este relatório agora...

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

Barras em teste 18015

Carrapatos modelados 739231

Qualidade de modelagem 89,83%

Depósito inicial 1000,00

Lucro líquido total -731,75

Lucro bruto 31897,83

Prejuízo bruto -32629.58

Fator de lucro 0,98

Reembolso esperado -0,24

Desembolso absoluto 780,40

Máximo de drawdown 4912,15 (94,91%)

Desembolso relativo 94,91% (4912,15)

Total de negócios 2990

Posições curtas (ganho %) 0 (0,00%)

Posições longas (ganho %) 2990 (34,88%)

Lucros comerciais (% do total) 1043 (34,88%)

Perdas comerciais (% do total) 1947 (65,12%)

A maior

comércio de lucro 1170,00

comércio de perdas -360,00

Média

comércio de lucro 30,58

comércio de perdas -16,76

Máximo

vitórias consecutivas (lucro em dinheiro) 8 (124,50)

perdas consecutivas (perda em dinheiro) 20 (-45,50)

Maximal

lucro consecutivo (contagem de vitórias) 2606,30 (7)

perda consecutiva (contagem de perdas) -360,00 (1)

Média

vitórias consecutivas 2

perdas consecutivas 3

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

por que os dois testes são tão diferentes?

o que os testes fazem de diferente quando testam a EA pela segunda vez?

como faço para que o teste do testador seja o mesmo cada vez que eu recalculo?

Obrigado por sua orientação para obter o mesmo relatório cada vez que eu testo 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******************************
Arquivos anexados:
ggl3.mq4  21 kb
 

. gostaria de ajudá-lo a testar isso, mas por alguma razão não posso anexá-lo a um gráfico ... não posso descobrir por que não...

 
furious_angel:
. eu gostaria de ajudá-lo a testar isto, mas por alguma razão eu não posso anexá-lo a um gráfico ... não posso descobrir porque não ...

Tente compilá-lo. Você também precisa ter o arquivo mqh na pasta de especialistas para que ele funcione.

 
forextrades:
Tente compilá-lo. Você também precisa ter o arquivo mqh na pasta "experts" para que ele funcione.

Na verdade, o arquivo mqh precisa ir na pasta "include" que é uma subpasta da pasta "experts". Pelo menos é assim que funciona para mim.

Eu não tenho problemas para anexá-lo> eu só tenho problemas para que o testador de estratégia seja consistente com ele.

Razão: