Excellent EA en backtest ! - page 114

 
DudeWorks:
Voici également un exemple d'écriture de fichier, tout droit sorti de l'éditeur MT...

Cela vous permettra d'enregistrer dans un fichier csv, que vous pourrez modifier à votre guise.

int handle;

datetime orderOpen=OrderOpenTime();

handle=FileOpen("c:\cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle>0)

{

FileWrite(handle, Close[0], Open[0], High[0], Low[0], TimeToStr(orderOpen));

FileClose(handle);

}

Je suis sur IBFX live, je peux faire des tests en direct pour vous sur des micro-lots. Cependant, j'ai d'autres transactions en direct sur le compte, donc je devrais retirer les résultats du CT séparément.

Envoyez-moi un message pour obtenir une adresse e-mail

Je dois faire en sorte que tout cela soit imprimé dans le fichier ainsi que les indicateurs que j'évalue.... actuellement, il ne fait que les imprimer dans le journal.

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, SlipPage, StopLoss, Bid - (TakeProfit * Point), "NeuroCluster-testing-AI-LS1", MagicNumber, 0, Green);

if(ticket > 0)

{

if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))

{

int handle;

datetime orderOpen=OrderOpenTime();

handle=FileOpen("C:\cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle>0)

{

FileWrite(handle,"Hour: ",TimeHour(CurTime())," Minute: ",TimeMinute(CurTime()));

FileWrite(handle,"SellPossibilityMid*SellPossibilityQuality:", SellPossibilityMid*SellPossibilityQuality);

FileWrite(handle,"BuyPossibilityMid*BuyPossibilityQuality:", BuyPossibilityMid*BuyPossibilityQuality);

FileWrite(handle,"UndefinedPossibilityMid*UndefinedPossibilityQuality:", UndefinedPossibilityMid*UndefinedPossibilityQuality);

FileWrite(handle,"UndefinedSucPossibilityQuality:", UndefinedSucPossibilityQuality);

FileWrite(handle,"SellSucPossibilityQuality:", SellSucPossibilityQuality);

FileWrite(handle,"BuySucPossibilityQuality:", BuySucPossibilityQuality);

FileWrite(handle,"UndefinedPossibilityQuality:", UndefinedPossibilityQuality);

FileWrite(handle,"SellPossibilityQuality:", SellPossibilityQuality);

FileWrite(handle,"BuyPossibilityQuality:", BuyPossibilityQuality);

FileWrite(handle,"UndefinedSucPossibilityMid:", UndefinedSucPossibilityMid);

FileWrite(handle,"SellSucPossibilityMid:", SellSucPossibilityMid);

FileWrite(handle,"BuySucPossibilityMid:", BuySucPossibilityMid);

FileWrite(handle,"UndefinedPossibilityMid:", UndefinedPossibilityMid);

FileWrite(handle,"SellPossibilityMid:", SellPossibilityMid);

FileWrite(handle,"BuyPossibilityMid:", BuyPossibilityMid);

FileClose(handle);

}

Je ne sais pas exactement comment faire... mais est-ce correct ? Cela ne génère pas de fichier.

2006.11.08 11:21:54 2006.10.06 12:08 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1 : error(4101) : mauvais nom de fichier

2006.11.08 11:21:54 2006.10.06 12:08 Cyberia Trader1.9 R2.2 AlertEuro : le chemin de fichier absolu "C:\cyberia_log.csv" n'est pas autorisé

? ???

qu'est-ce qui ne va pas ?

 

ok c'est mieux....

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, SlipPage, StopLoss, Bid - (TakeProfit * Point), "NeuroCluster-testing-AI-LS1", MagicNumber, 0, Green);

if(ticket > 0)

{

if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))

{

datetime sorderOpen=OrderOpenTime();

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle!=-1)

{

FileWrite(handle,"Hour: ",TimeHour(CurTime())," Minute: ",TimeMinute(CurTime()));

FileWrite(handle,"SellPossibilityMid*SellPossibilityQuality:", SellPossibilityMid*SellPossibilityQuality);

FileWrite(handle,"BuyPossibilityMid*BuyPossibilityQuality:", BuyPossibilityMid*BuyPossibilityQuality);

FileWrite(handle,"UndefinedPossibilityMid*UndefinedPossibilityQuality:", UndefinedPossibilityMid*UndefinedPossibilityQuality);

FileWrite(handle,"UndefinedSucPossibilityQuality:", UndefinedSucPossibilityQuality);

FileWrite(handle,"SellSucPossibilityQuality:", SellSucPossibilityQuality);

FileWrite(handle,"BuySucPossibilityQuality:", BuySucPossibilityQuality);

FileWrite(handle,"UndefinedPossibilityQuality:", UndefinedPossibilityQuality);

FileWrite(handle,"SellPossibilityQuality:", SellPossibilityQuality);

FileWrite(handle,"BuyPossibilityQuality:", BuyPossibilityQuality);

FileWrite(handle,"UndefinedSucPossibilityMid:", UndefinedSucPossibilityMid);

FileWrite(handle,"SellSucPossibilityMid:", SellSucPossibilityMid);

FileWrite(handle,"BuySucPossibilityMid:", BuySucPossibilityMid);

FileWrite(handle,"UndefinedPossibilityMid:", UndefinedPossibilityMid);

FileWrite(handle,"SellPossibilityMid:", SellPossibilityMid);

FileWrite(handle,"BuyPossibilityMid:", BuyPossibilityMid);

FileClose(handle);

}

else

{

int err;

err=GetLastError();

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

return(0);

}

ok cela génère un fichier mais le fichier ne contient qu'une seule entrée et pas TOUTES les commandes....oy

 
DudeWorks:
Je vais le coder pour toi, donne-moi jusqu'à ce soir, dis-moi ce que tu veux jeter d'autre.

En plus de la logique cybernétique ci-dessus...

Je pense tester l'indicateur powers bears et bulls, le cci, les 3 valeurs de l'adx, le macd et le stochastique, le rsi, et un 1MA basé sur la clôture en cours dans la barre actuelle.(la MA de la clôture) S'il y a d'autres indicateurs que vous pensez qui pourraient fonctionner pour être évalués, allez-y et déposez-les aussi. Vous comprenez l'idée que je veux juste générer un profil, donc plus il y a d'angles, mieux c'est... jusqu'à un certain point, je suppose.

Il y a une autre chose que je dois ajouter. Un travail que j'ai effectué sur un autre EA qui enregistre la valeur des fonds propres du compte à l'ouverture d'un ordre, puis la compare à la valeur des fonds propres du compte à la fermeture de l'ordre et détermine si la transaction était gagnante ou perdante... J'ai besoin que ce vidage de données inclue également le résultat des transactions de ce type afin que nous sachions dans quelle catégorie placer la transaction lorsque nous l'analysons.

Je pense que je vais retravailler cela en fonction du prix d'ouverture de l'ordre et du prix de fermeture de l'ordre, car plusieurs transactions peuvent modifier l'équité du compte... attendez une minute.....

J'ai déjà fait la moitié du chemin, j'ai déjà mis cela dans le code, il faut juste le peaufiner un peu plus...

/////////////record outcomes/////////////////

void RecordLongOutcomes()

{

if(Bid<OrderOpenPrice())

{

OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES) ;

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

}

return (0) ;

}

void RecordShortOutcomes()

{

if(Ask>OrderOpenPrice())

{

OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES) ;

Print(" Loser Short ",OrderTicket()," Opened : ",OrderOpenPrice()," Closed : ", Bid) ;

}

return(0) ;

}

 

donc ce que nous travaillons ici...aussi la même idée que j'ai eu il y a un moment mais j'étais trop paresseux pour le faire... c'est d'enregistrer toutes les variables et les valeurs des indicateurs au moment de chaque commande afin que nous puissions voir exactement ce qui se passe à chaque commande pour déterminer les corrélations.

J'ai été curieux de savoir quelles étaient les possibilités au moment où il a finalement donné un signal d'ordre, ce qui devrait vraiment afficher...

Cependant, la largeur de chaque ligne pourrait être assez large, mais je pense que nous pouvons y arriver si nous faisons en sorte que nous n'enregistrons que les indicateurs qui sont effectivement sélectionnés.

La largeur du fichier MT4 est de 64 champs je pense... donc c'est beaucoup pour jouer avec.

J'ai envoyé mon email à vous

 
DudeWorks:
Donc, ce vers quoi nous tendons ici... c'est la même idée que j'ai eue il y a quelque temps mais j'étais trop paresseux pour la faire... c'est d'enregistrer toutes les variables et les valeurs des indicateurs au moment de chaque commande afin que nous puissions voir exactement ce qui se passe à chaque commande pour déterminer les corrélations.

J'ai été curieux de savoir quelles étaient les possibilités quand il a finalement donné un signal d'ordre, donc cela devrait vraiment afficher...

Cependant, la largeur de chaque ligne pourrait être assez grande, mais je pense que nous pouvons y arriver si nous faisons en sorte de n'enregistrer que les indicateurs qui sont effectivement sélectionnés.

La largeur du fichier MT4 est de 64 champs je pense... donc c'est suffisant pour jouer avec.

Je vous ai envoyé mon email

Précisément ! La précision est en effet ce que nous recherchons dans nos filtres et cela pourrait nous révéler comment le faire fonctionner.

ok super, je vais vous envoyer mon projet Patient à explorer mais ne laissez pas cela vous distraire de l'obtention de cette décharge de données, ok ?

Je suis heureux d'avoir un développeur avec plus d'expérience autour de moi quand je suis coincé. Je suis encore un novice, avec peu d'expérience.

Quant à la sortie. Rien de ce que vous sortirez de cette plateforme ne dépassera les dimensions d'Excel. Ce dont j'ai besoin, c'est qu'il soit facilement identifiable, de sorte que lorsque je l'importe dans Excel, je puisse voir avec quoi je travaille, plutôt qu'avec un tas de chiffres non documentés, tous mélangés et séparés par des délimiteurs. J'ai besoin d'étiquettes de données pour chaque valeur. Il s'agit de 15 champs CT plus 8 indicateurs, CCI, RSI, 1MA, bearspower, bullspower, adx (trois valeurs) plus le macd et les stochastics si vous en calculez 6, alors le total des champs est de 29 plus les résultats de la victoire (voir le post précédent) ou de la défaite =30 l'ouverture et la fermeture et le temps ajoutent 3 Grand Total=33 comme je le compte.

33 champs par ordre. Cela devrait révéler quelque chose, non ? Une autre petite faveur, si vous pouvez faire en sorte que la date s'imprime (s'imprime dans un fichier) d'une manière qu'un humain peut comprendre pour la date au lieu de l'intergervalue que l'ordinateur utilise, cela aiderait aussi.

 

Quelque chose à ce sujet m'a donné le message d'erreur...

'invalid ticket for OrderClose function' jusqu'à ce que je désactive l'OrderSelect.

mais je pense que vous pouvez voir ce que j'essaie d'en tirer.

/////////////record outcomes/////////////////

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_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle!=-1)

{

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

FileClose(handle);

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

}

else

{

int err;

err=GetLastError();

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

return(0);

}

}

else

{

datetime buyorderOpen=OrderOpenTime();

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle!=-1)

{

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

FileClose(handle);

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

}

else

{

int err1;

err=GetLastError();

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

return(0);

}

}//if win or lose

}//if buy

}//if symbol and magic number

return (0);

}//record long outcomes

void RecordShortOutcomes()

{

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

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

{

if(OrderType()==OP_SELL)

{

if(OrderOpenPrice() - Spread > OrderClosePrice())

{

datetime borderOpen=OrderOpenTime();

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle!=-1)

{

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

FileClose(handle);

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

}

else

{

int err3;

err3=GetLastError();

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

return(0);

}

}

else

{

datetime sellorderOpen=OrderOpenTime();

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle!=-1)

{

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

FileClose(handle);

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

}

else

{

int err4;

err4=GetLastError();

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

return(0);

}

}//if win or lose

}//if buy

}//if symbol and magic number

return (0);

}//record short outcomes
 

Le code que je viens d'ajouter pour enregistrer les résultats fonctionne bien, sauf pour le filewrite().

Je suis en train de générer le fichier mais il n'a qu'une seule entrée qui semble être la commande finale exécutée par le testeur, donc je pense que ce qui se passe pour moi est qu'il écrase chaque entrée plutôt que de l'ajouter à la fin du fichier. Si je savais comment résoudre ce problème, je pourrais probablement récupérer ces données maintenant.

 
Aaragorn:
ok cela génère un fichier mais le fichier ne contient qu'une seule entrée et pas TOUTES les commandes....oy

Le fichier est écrasé à chaque fois que vous l'ouvrez. Une solution est d'ouvrir le fichier dans la fonction init() et de le fermer dans la fonction deinit().

 
tururo:
Le fichier est écrasé à chaque fois que vous l'ouvrez. Une solution consiste à ouvrir le fichier dans la fonction init() et à le fermer dans la fonction deinit().

Je ne suis pas sûr de comprendre comment utiliser les drapeaux de lecture et d'écriture.

Je les vois dans des exemples comme celui-ci...

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';') ;

ou

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';') ;

et si c'est possible ?

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_READ|FILE_WRITE, ';') ;

vous voyez que je ne comprends pas comment ajouter à la fin exactement.

Je ne suis pas sûr de savoir comment l'ouvrir dans le init()

PUIS

ajouter chaque nouvelle commande à la fin

PUIS

le fermer dans le deinit()

J'imagine que c'est quelque chose comme

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_READ, ';') ;

dans l'init et ensuite

FileWrite(handle, "Order Open Time : ",sorderOpen) ;

FileWrite(handle, "SellPossibilityMid*SellPossibilityQuality :", SellPossibilityMid*SellPossibilityQuality) ;

FileWrite(handle, "BuyPossibilityMid*BuyPossibilityQuality :", BuyPossibilityMid*BuyPossibilityQuality) ;

FileWrite(handle, "UndefinedPossibilityMid*UndefinedPossibilityQuality :", UndefinedPossibilityMid*UndefinedPossibilityQuality) ;

FileWrite(handle, "UndefinedSucPossibilityQuality :", UndefinedSucPossibilityQuality) ;

FileWrite(handle, "SellSucPossibilityQuality :", SellSucPossibilityQuality) ;

FileWrite(handle, "BuySucPossibilityQuality :", BuySucPossibilityQuality) ;

FileWrite(handle, "UndefinedPossibilityQuality :", UndefinedPossibilityQuality) ;

FileWrite(handle, "SellPossibilityQuality :", SellPossibilityQuality) ;

FileWrite(handle, "BuyPossibilityQuality :", BuyPossibilityQuality) ;

FileWrite(handle, "UndefinedSucPossibilityMid :", UndefinedSucPossibilityMid) ;

FileWrite(handle, "SellSucPossibilityMid :", SellSucPossibilityMid) ;

FileWrite(handle, "BuySucPossibilityMid :", BuySucPossibilityMid) ;

FileWrite(handle, "UndefinedPossibilityMid :", UndefinedPossibilityMid) ;

FileWrite(handle, "SellPossibilityMid :", SellPossibilityMid) ;

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

et ensuite dans le deinit

FileClose(handle) ;

est-ce correct ?

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

//| We initialize the adviser |

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

int init()

{

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

SavedBlockSell = BlockSell;

SavedBlockBuy = BlockBuy;

AccountStatus();

GetMarketInfo();

ModelingPeriod = ValuePeriod * ValuesPeriodCount; // Period of simulation in minutes

if (ValuePeriod != 0 )

ModelingBars = ModelingPeriod / ValuePeriod; // Quantity of steps in the period

CalculateSpread();

return(0);

}

Je reçois une erreur qui dit "trop de fichiers ouverts" ?