Gogetter EA - pagina 9

 

Spero che qualcuno possa trovare la risposta al mistero qui...

Questo post ha tutto il necessario per eseguire GGL3 se si mette questo codice in un file .mqh incluso. Ho zippato i rapporti .htm perché sono entrambi oltre 4mb a causa di tutti gli ordini modificati...

sembra che la mia riprogettazione della funzione di trailing stop abbia migliorato le prestazioni da 1,2 milioni a 1,3 milioni... O che è il risultato di iniziare con un deposito iniziale di 1000 invece di 500. Non so quale dei due perché GGL3 non inizierà con un deposito iniziale di 500 e aprirà alcun trade

Triste da dire rapporto che nonostante quello che sembra essere il progresso su questo rimane qualcosa di non rivelato come ancora che impedisce a questo di fare i grandi soldi in modo coerente. Più spesso fallisce e va in bancarotta. Se non è il trailing stop a farlo allora deve essere qualcos'altro...non so cosa...

Sembra che ci sia un sacco di ricompensa e un bel po' di soldi per chiunque riesca a capire cosa sta causando una così ampia varianza di risultati dalle stesse impostazioni dello stesso ea nello stesso intervallo di tempo e a correggerla. Al momento mi ha lasciato perplesso.

Sto prendendo una settimana di vacanza... Spero che qualcuno abbia postato qualche idea o soluzione al mio ritorno. Non vedo come posso davvero passare ad un ulteriore sviluppo con questo fino a quando il mistero qui è rivelato.

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

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

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

Ecco il file include zippato se è più facile da gestire.

File:
 

le domande che mi pongo ora sono....

il flusso di dati è stabile? Presumo che lo sia perché utilizza i file del centro storico....forse questa supposizione dovrebbe essere messa in discussione?

il modo in cui la piattaforma elabora il flusso di dati è stabile e ci si può fidare che elabori gli stessi dati esattamente nello stesso modo ogni volta? Se no, chi ha realizzato questa piattaforma? Come posso contattarli? Cos'è che deve essere corretto per renderla affidabile?

non sembra probabile che io possa mai stabilizzare il codice EA se una di queste due incognite è ancora potenzialmente variabile e di fatto inaffidabile. Come si può verificare la loro affidabilità?

Ho postato una richiesta di attenzione a questa domanda su questa pagina...

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

speriamo che qualcuno abbia qualche intuizione e risponda presto.

 
Aaragorn:
Le domande che sto facendo ora sono ....

il flusso di dati è stabile? Presumo che lo sia perché utilizza i file del centro storico.... forse questa supposizione dovrebbe essere messa in discussione?

Il modo in cui la piattaforma elabora il flusso di dati è stabile e ci si può fidare che elabori gli stessi dati esattamente nello stesso modo ogni volta? Se no, chi ha fatto questa piattaforma? Come posso contattarli? Cos'è che deve essere aggiustato per renderla affidabile?

non sembra probabile che io possa mai stabilizzare il codice EA se una di queste due incognite è ancora potenzialmente variabile e di fatto inaffidabile. Come si può verificare la loro affidabilità?

Ho postato una richiesta di attenzione a questa domanda su questa pagina...

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

Speriamo che qualcuno abbia qualche intuizione e risponda presto.

.... hai provato a testare in avanti questo su piattaforme mutilple? Attualmente sto testando lo stesso EA su due diverse piattaforme BD per vedere quali risultati otterrò. volevo essere sicuro che i risultati avrebbero avuto una buona quantità di dati fissi prima di prendere uno dal vivo. forse questa è un'idea stupida, ma non voglio rischiare il capitale reale fino a quando non ho un'idea abbastanza sicura che l'Ea avrà una performance consistente.

 

L'ho testato solo su metatrader 4 usando il 30tf per il GPBUSD. Non perché non sia una buona idea farlo, ma perché sono solo un essere umano e siccome non sono una donna, non faccio bene nemmeno il multitasking. Quindi semplicemente non ho ancora trovato il tempo di farlo. Non ho ancora fatto nessun altro test. Sono rimasto concentrato sui problemi di sviluppo. Il mio obiettivo era quello di renderlo stabile in questo caso prima di provare ad espandersi ad altre coppie o altre piattaforme o altro.

Con tutti i mezzi usate il vostro buon senso. Permetterò che questo funzioni nel mio conto demo mentre sono via la prossima settimana. Dal momento che partiamo domani e saremo via per la settimana non sarò di nuovo al thread molto probabilmente fino al prossimo martedì.

Non lo ritengo ancora adatto a rischiare soldi veri, voglio solo vedere le instabilità risolte e poi fare un test in demo. Poi vedrò dove i dati mi dicono di andare con esso da lì. Vorrei davvero invitare soprattutto gli sviluppatori a esaminarlo mentre sono via e vedere se l'elaborazione dei dati o le irregolarità dei file di dati possono essere verificate.

Non vedo nulla di palesemente sbagliato nel codice che possa spiegare la varianza. Mi sono sbagliato in passato, potrei sbagliarmi anche su questo. Mi sta bene essere in errore se qualcuno può mostrarmi come o dove correggerlo.

Non vi mentirò, sarò felice di allontanarmi da questo per un po'. Ha consumato troppa della mia attenzione e mi merito di cercare un po' di equilibrio nella vita mentre lavoro su questo.

Lascerò questo nelle vostre mani per un po' e vedere cosa potete fare con esso. Chiedo solo che se fate qualsiasi ricerca su di esso che si riferisce a questo thread con i vostri risultati in modo che tutti possano beneficiare di esso.

 

...........

potreste mettere le posizioni brevi e lunghe in un unico file mp4?

 

Perché un rapporto così diverso dalle stesse impostazioni?

Usando l'EA allegato con il file include.mqh allegato. Ho eseguito un test della strategia utilizzando queste impostazioni....

Pulsante Proprietà Esperto....

Scheda test...

1000 USD di deposito iniziale...

Posizioni: Lungo e corto

Parametro ottimizzato: Saldo

La casella Algoritmo genetico non è selezionata

Scheda Ingressi...

Tutti gli input dell'utente sono utilizzati esattamente come sono salvati nell'EA senza modifiche manuali in questa scheda

Scheda Ottimizzazione...

Niente è spuntato in questa scheda

Impostazioni.....

Consulente esperto: GGL3, Aaragorn e Eaglehawk & Maji & Robert C.

Simbolo: GBPUSD, Sterlina britannica contro dollaro USA

Periodo: M30

Modello: Ogni tick (basato su tutti i leasttimeframes disponibili con interpolazione frattale di ogni tick)

Sto usando il file di dati a 1 minuto, anch'esso allegato.

La casella Use date è selezionata; From: 2005.09.09 A: Oggi (2006.08.22)

Ho spuntato la casella per Ricalcola

Non spunto la casella per Ottimizzazione

Ottengo questo rapporto quando il test è finito...

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

Barre nel test 17735

Tick modellati 702859

Qualità di modellazione 89.82%

Deposito iniziale 1000.00

Profitto netto totale 1375788.66

Profitto lordo 3678568.71

Perdita lorda -2302780.05

Fattore di profitto 1,60

Rendimento previsto 472.62

Drawdown assoluto 240.00

Dispersione massima 231662.10 (15.07%)

Dispersione relativa 55.32% (18074.74)

Totale operazioni 2911

Posizioni corte (% won) 0 (0,00%)

Posizioni lunghe (% won) 2911 (42.05%)

Operazioni in profitto (% del totale) 1224 (42,05%)

Operazioni in perdita (% del totale) 1687 (57,95%)

Il più grande

operazioni con profitto 89100.00

operazione in perdita -15840.00

Media

di profitto 3005.37

perdita -1365.01

Massimo

vittorie consecutive (profitto in denaro) 9 (106921.10)

perdite consecutive (perdita in denaro) 18 (-163.10)

Massimo

profitto consecutivo (numero di vittorie) 225720.50 (7)

perdita consecutiva (conteggio delle perdite) -15845.70 (5)

Media

vittorie consecutive 2

perdite consecutive 2

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

Ora sto pensando che questo è un ottimo EA quindi voglio testarlo di nuovo per assicurarmi che faccia la stessa cosa....

Non apporto modifiche alle impostazioni di alcun tipo....

Seleziono la casella Ricalcola nella scheda delle impostazioni e clicco su start....Ora ottengo questo rapporto...

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

Barre nel test 18015

Tick modellati 739231

Qualità di modellazione 89.83%

Deposito iniziale 1000.00

Profitto netto totale -731.75

Profitto lordo 31897.83

Perdita lorda -32629.58

Fattore di profitto 0,98

Guadagno previsto -0,24

Drawdown assoluto 780.40

Disavanzo massimo 4912.15 (94.91%)

Drawdown relativo 94.91% (4912.15)

Totale operazioni 2990

Posizioni corte (% won) 0 (0,00%)

Posizioni lunghe (% won) 2990 (34,88%)

Operazioni in profitto (% del totale) 1043 (34,88%)

Operazioni in perdita (% del totale) 1947 (65,12%)

Il più grande

operazioni in profitto 1170.00

operazione in perdita -360.00

Media

di profitto 30.58

perdita -16.76

Massimo

vittorie consecutive (profitto in denaro) 8 (124.50)

perdite consecutive (perdita in denaro) 20 (-45.50)

Massimo

profitto consecutivo (numero di vittorie) 2606.30 (7)

perdita consecutiva (conteggio delle perdite) -360.00 (1)

Media

vittorie consecutive 2

perdite consecutive 3

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

perché i due test sono così diversi?

cosa fa il tester in modo diverso quando testa l'EA per la seconda volta?

come posso fare in modo che il test sia lo stesso ogni volta che ricalcolo?

Grazie per la tua guida per ottenere lo stesso rapporto ogni volta che provo questo 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******************************
File:
ggl3.mq4  21 kb
 

. vorrei aiutarvi a inoltrare questo test, ma per qualche motivo non posso allegarlo a un grafico .. non riesco a capire perché no.

 
furious_angel:
. vorrei aiutarvi a testare questo, ma per qualche motivo non posso allegarlo a un grafico... non riesco a capire perché no...

Prova a compilarlo. Devi anche avere il file mqh nella cartella experts per farlo funzionare.

 
forextrades:
Prova a compilarlo. Devi anche avere il file mqh nella cartella experts per farlo funzionare.

In realtà il file mqh deve andare nella cartella "include" che è una sottocartella della cartella "experts". Almeno è così che funziona per me.

Non ho problemi ad allegarlo> ho solo problemi a far sì che lo strategy tester sia coerente con esso.

Motivazione: