Excellent EA en backtest ! - page 116

 
Beno:
J'ai lu ce fil de discussion du début à la fin pour essayer de trouver une solution.

Cyberia Trader1.85g jpy.mq4 version Je l'ai chargé et j'ai le visage mais je n'ai eu aucun ordre du tout. J'utilise la paire USD/CHF sur 30 minutes. Le fait de ne pas avoir d'ordres rend vraiment difficile tout test préalable. Le système fonctionne depuis 4 jours et toujours pas d'ordres.

Une aide serait la bienvenue, merci.

merci

Beno

Je vous aiderais si je savais comment faire mieux que 70% mais je ne le fais pas. Je fonctionne sur le graphique d'une heure, essayez cela.

 
Aaragorn:
Merci pour ce bout de code. Je l'ai regardé et je peux voir qu'il crée et lit des fichiers. Je ne le vois pas ajouter quoi que ce soit à la fin d'un fichier qu'il a déjà créé. Peut-être que c'est le cas et que je ne le vois pas et peut-être qu'il ne le fait pas et qu'il n'y a rien à voir. J'aimerais connaître un morceau de code qui ajouterait des données à la fin pour pouvoir voir comment il le fait.

Jetez un coup d'œil à ce fil :

https://www.mql5.com/en/forum/175496

 

J'ai beaucoup travaillé sur ce code et je l'ai laissé plutôt en désordre... mais...

mes efforts pour que cela s'imprime dans un fichier se sont avérés infructueux pour le moment.

Je suppose que je vais demander à ceux qui veulent aider à la collecte de données de tenter de le faire manuellement.

J'ai configuré l'EA ci-joint pour imprimer dans le journal les logiques minimales du CT. Il ne s'agit pas de saisir des indicateurs, mais peut-être que le simple fait de regarder les logiques des TC nous donnera quelque chose sur quoi travailler.

Pour recueillir ces données, vous devez exécuter l'EA dans le backtester tel qu'il est, mais pendant qu'il fonctionne, vous devez surveiller l'onglet journal. Puisque le journal ne peut pas contenir plus que les données de quelques ordres sans commencer à tronquer et à laisser tomber les données de l'extrémité inférieure. vous devrez arrêter le test très rapidement lorsque vous atteignez environ tous les 5 - 7 ordres successifs. Ensuite, copiez et collez les données dans un bloc-notes et redémarrez le testeur en regardant quand il arrive à l'endroit où vous avez fait le copier/coller précédent. Vous devez faire attention à capturer toutes les données lorsque vous collez, ce qui ressemble à ceci pour un ordre...

2006.11.10 10:22:52 2004.03.05 03:02 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: close #56 buy 0.42 EURUSDm at 1.2188 sl: 1.2171 tp: 1.2285 at price 1.2210

2006.11.10 10:22:52 2004.03.05 03:02 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: Recorded Winning Long 56 Opened: 1.2188 Closed: 1.221

2006.11.10 10:22:52 2004.03.04 18:40 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: Ticket: 56 DV: -0.0051 CCI: 57.9346 Long order is opened @: 1.2188 StopLoss= 1.2171 TakeProfit= 1.2285

2006.11.10 10:22:52 2004.03.04 18:40 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: Buy @ Minute 40

2006.11.10 10:22:52 2004.03.04 18:40 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: open #56 buy 0.42 EURUSDm at 1.2188 sl: 1.2171 tp: 1.2285 ok

2006.11.10 10:22:52 2004.03.04 18:40 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: BuyPossibilityMid:0.0004

2006.11.10 10:22:52 2004.03.04 18:40 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: SellPossibilityMid:0.0004

2006.11.10 10:22:52 2004.03.04 18:40 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: UndefinedPossibilityMid:0.0009

2006.11.10 10:22:52 2004.03.04 18:40 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: BuySucPossibilityMid:0.002

2006.11.10 10:22:52 2004.03.04 18:40 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: SellSucPossibilityMid:0.0021

2006.11.10 10:22:52 2004.03.04 18:40 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: UndefinedSucPossibilityMid:0.0021

2006.11.10 10:22:52 2004.03.04 18:40 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: BuyPossibilityQuality:8

2006.11.10 10:22:52 2004.03.04 18:40 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: SellPossibilityQuality:8

2006.11.10 10:22:52 2004.03.04 18:40 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: UndefinedPossibilityQuality:19

2006.11.10 10:22:52 2004.03.04 18:40 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: BuySucPossibilityQuality:7

2006.11.10 10:22:52 2004.03.04 18:40 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: SellSucPossibilityQuality:7

2006.11.10 10:22:52 2004.03.04 18:40 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: UndefinedSucPossibilityQuality:14

2006.11.10 10:22:52 2004.03.04 18:40 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: UndefinedPossibilityMid*UndefinedPossibilityQuality:0.0164

2006.11.10 10:22:52 2004.03.04 18:40 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: BuyPossibilityMid*BuyPossibilityQuality:0.0032

2006.11.10 10:22:52 2004.03.04 18:40 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: SellPossibilityMid*SellPossibilityQuality:0.0034

2006.11.10 10:22:52 2004.03.04 18:40 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: Hour: 18 Minute: 40

exécutez ceci sur un graphique d'une heure et capturez les données. puis envoyez-moi le fichier .txt notepad par email peut-être si islandhome commençait au premier ordre et faisait les 500 premières transactions de 2005 et AZBOfin commençait avec la transaction 500 de 2005 et faisait les 500 suivantes ?

ah ! bollay that. let me try what coder's guru just posted.

 
codersguru:
Jetez un œil à ce fil de discussion :https://www.mql5.com/en/forum/175496

Vous venez peut-être de m'épargner beaucoup d'ennuis...

Pourriez-vous regarder l'EA que j'ai posté et voir où j'essaie d'imprimer au fichier à 4 endroits dans le code. Deux fois quand il ouvre des ordres et ensuite dans des fonctions séparées quand il ferme des ordres. Vous voyez ce que j'essaie d'extraire de tout cela ? Pourriez-vous m'aider à coder ceci de façon à ce qu'il enregistre les informations de chaque ordre, la logique du programme quand il s'ouvre et le résultat quand l'ordre se ferme ?

Si je fais ce fileflush après chaque commande, cela effacera-t-il quelque chose ? Je ne comprends toujours pas le fonctionnement de la purge.

 

Eureka ! Oh mec, merci au gourou du codeur, joli sauvetage !

Maintenant, je suis toujours un peu perplexe ici ... remarquez le fichier .txt, il n'imprime pas une ligne de résultat pour chaque ordre. pourquoi il saute cela pour certains ordres, je me demande ?

Puis-je supposer que s'il n'imprime pas la ligne de résultat, c'est qu'il s'agit d'une position perdante ?

 

Vous ne serez jamais en mesure de déchiffrer ces données dans ce format, vous avez besoin d'être en rangées, essayez d'incorporer ceux-ci.

J'ai toujours un problème avec le système qui dit qu'il y a trop de fichiers ouverts... mais voici la façon dont votre fichier doit être formaté pour que vous puissiez le visualiser dans Excel.

//LOGIC FOR HEADER OF FILE - creates the header labels for the rows in the CSV file

string fileName = Symbol() + "-" + TimeToStr(LocalTime(), TIME_DATE) + " " + TimeHour(LocalTime()) + "-" + TimeMinute(LocalTime()) + ".csv";

File = FileOpen(fileName, FILE_CSV|FILE_WRITE, ',');

if (FileWrite(File, Symbol(),"DATETIME","Lots","Bid","SlipPage","StopLoss","TakeProfit","MagicNumber",

"SellPossibilityMid*SellPossibilityQuality",

"BuyPossibilityMid*BuyPossibilityQuality",

"UndefinedPossibilityMid*UndefinedPossibilityQuality",

"UndefinedSucPossibilityQuality",

"SellSucPossibilityQuality",

"BuySucPossibilityQuality",

"UndefinedPossibilityQuality",

"SellPossibilityQuality",

"BuyPossibilityQuality",

"UndefinedSucPossibilityMid",

"SellSucPossibilityMid",

"BuySucPossibilityMid",

"UndefinedPossibilityMid",

"SellPossibilityMid",

"BuyPossibilityMid",

"Decision" ) < 0)

{

PrintError();

return (Error);

}

//LOGIC FOR APPEND OF FILEWRITE - Writes the rows of data

//Record statistics at time of Order - Added by DudeWorks

void RecordTickets ()

{

if (Error > 0)

return (Error); //stop on error

FileSeek(File,0,SEEK_END);

if (FileWrite(File, Symbol(),TimeToStr(CurTime(),TIME_DATE|TIME_SECONDS),Lots,Bid,SlipPage,StopLoss,TakeProfit,MagicNumber,

SellPossibilityMid*SellPossibilityQuality,

BuyPossibilityMid*BuyPossibilityQuality,

UndefinedPossibilityMid*UndefinedPossibilityQuality,

UndefinedSucPossibilityQuality,

SellSucPossibilityQuality,

BuySucPossibilityQuality,

UndefinedPossibilityQuality,

SellPossibilityQuality,

BuyPossibilityQuality,

UndefinedSucPossibilityMid,

SellSucPossibilityMid,

BuySucPossibilityMid,

UndefinedPossibilityMid,

SellPossibilityMid,

BuyPossibilityMid,

Decision) < 0)

{

PrintError();

return (Error);

}

FileFlush(File);

return(0);

}

 
DudeWorks:
Vous ne serez jamais capable de déchiffrer ces données dans ce format, vous avez besoin qu'elles soient en lignes, essayez d'incorporer celles-ci.

J'ai toujours un problème avec le système qui me dit qu'il y a trop de fichiers ouverts... mais voici comment votre formulaire doit être formaté pour que vous puissiez le visualiser dans Excel.

//LOGIC FOR HEADER OF FILE - creates the header labels for the rows in the CSV file

string fileName = Symbol() + "-" + TimeToStr(LocalTime(), TIME_DATE) + " " + TimeHour(LocalTime()) + "-" + TimeMinute(LocalTime()) + ".csv";

File = FileOpen(fileName, FILE_CSV|FILE_WRITE, ',');

if (FileWrite(File, Symbol(),"DATETIME","Lots","Bid","SlipPage","StopLoss","TakeProfit","MagicNumber",

"SellPossibilityMid*SellPossibilityQuality",

"BuyPossibilityMid*BuyPossibilityQuality",

"UndefinedPossibilityMid*UndefinedPossibilityQuality",

"UndefinedSucPossibilityQuality",

"SellSucPossibilityQuality",

"BuySucPossibilityQuality",

"UndefinedPossibilityQuality",

"SellPossibilityQuality",

"BuyPossibilityQuality",

"UndefinedSucPossibilityMid",

"SellSucPossibilityMid",

"BuySucPossibilityMid",

"UndefinedPossibilityMid",

"SellPossibilityMid",

"BuyPossibilityMid",

"Decision" ) < 0)

{

PrintError();

return (Error);

}

//LOGIC FOR APPEND OF FILEWRITE - Writes the rows of data

//Record statistics at time of Order - Added by DudeWorks

void RecordTickets ()

{

if (Error > 0)

return (Error); //stop on error

FileSeek(File,0,SEEK_END);

if (FileWrite(File, Symbol(),TimeToStr(CurTime(),TIME_DATE|TIME_SECONDS),Lots,Bid,SlipPage,StopLoss,TakeProfit,MagicNumber,

SellPossibilityMid*SellPossibilityQuality,

BuyPossibilityMid*BuyPossibilityQuality,

UndefinedPossibilityMid*UndefinedPossibilityQuality,

UndefinedSucPossibilityQuality,

SellSucPossibilityQuality,

BuySucPossibilityQuality,

UndefinedPossibilityQuality,

SellPossibilityQuality,

BuyPossibilityQuality,

UndefinedSucPossibilityMid,

SellSucPossibilityMid,

BuySucPossibilityMid,

UndefinedPossibilityMid,

SellPossibilityMid,

BuyPossibilityMid,

Decision) < 0)

{

PrintError();

return (Error);

}

FileFlush(File);

return(0);

}

ce n'est pas un problème pour moi.

La fonction d'importation de données externes d'Excel les place dans des lignes de façon très agréable. Dites-lui simplement qu'elles sont délimitées par des " ;" Le défi que j'aimerais relever avec le formatage est qu'il n'imprime pas une ligne de résultat pour les positions perdantes. Cela signifie que les données dans les lignes ne sont pas les mêmes pour chaque ordre, ce qui rend difficile la conception d'un identifiant qui reconnaît les entrées perdantes. Pour l'instant, je peux séparer les données gagnantes du reste, peut-être que c'est suffisant, je pense que je peux travailler avec ce que j'ai, mais je n'ai pas encore de données d'indicateur dans ce domaine.

 

Regardez ça... J'ai donné à cette chose sa propre fonction pour sauvegarder la ligne de résultat de la transaction perdante et elle ne veut toujours pas imprimer la ligne ???? oy, allez, une ligne, c'est trop demander ?

void RecordLongLOutcomes()

{

//OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);

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

{

if(OrderType()==OP_BUY)

{

if(OrderOpenPrice() + Spread >= OrderClosePrice())

{

datetime blorderOpen=OrderOpenTime();

handle = FileOpen("Cyberia.txt",FILE_READ|FILE_WRITE);

if(handle!=-1)

{

FileSeek(handle,0,SEEK_END);

FileWrite(handle,"Losing Long OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",blorderOpen);

FileWrite(handle," ");

Print("Recorded Losing Long ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);

FileFlush(handle);

FileClose(handle);

}

else

{

int err1;

err1=GetLastError();

Print("error(",err1,"): ",ErrorDescription(err1));

return(0);

}

}//if win or lose

}//if buy

}//if symbol and magic number

return (0);

}//record long outcomes[/PHP]

what gives???

see this? this works fine...

[PHP]void RecordLongOutcomes()

{

//OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);

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

{

if(OrderType()==OP_BUY)

{

if(OrderOpenPrice() + Spread < OrderClosePrice())

{

datetime borderOpen=OrderOpenTime();

handle = FileOpen("Cyberia.txt",FILE_READ|FILE_WRITE);

if(handle!=-1)

{

FileSeek(handle,0,SEEK_END);

FileWrite(handle,"Winning Long OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",borderOpen);

FileWrite(handle," ");

Print("Recorded Winning Long ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);

FileFlush(handle);

FileClose(handle);

}

else

{

int err;

err=GetLastError();

Print("error(",err,"): ",ErrorDescription(err));

//return(0);

}

}//if win or lose

}//if buy

}//if symbol and magic number

RecordLongLOutcomes();

return (0);

}//record long outcomes

C'est le même code ! (pratiquement) Ce langage mql est étonnamment capricieux !

 

Bonjour Aaragorn

S'il vous plaît télécharger le meilleur fichier d'ensemble

pour cyber

tnx

bye

 
nanoc:
Bonjour Aaragorn

Veuillez télécharger le meilleur fichier d'ensemble

pour cyber

tnx

bye

c'est dans ce...

https://www.mql5.com/en/forum/174700/page71