Remplacement des fonctions des fichiers MT4. - page 10

 

Remplacement de fichier

Je veux tester un EA qui utilise des signaux externes dans le Strategy Tester et le fil de discussion indique que le traitement des fichiers natifs ne fonctionne pas dans le Strategy Tester. J'ai donc essayé d'utiliser la dll fournie dans ce fil de discussion. L'entrée que je veux traiter est dans un fichier ressemblant à ceci :

2007-01-02;EURUSD;2.InstPipDown;;Yes

2007-01-02;USDJPY;1.InstPipUp;;Yes

2007-01-02;USDCHF;1.InstPipUp;;Yes

2007-01-03;EURUSD;2.InstPipDown;;Yes

2007-01-03;EURUSD;4.PipMax1Down;;Yes

2007-01-03;GBPUSD;4.PipMax1Down;;Yes

2007-01-04;USDJPY;8.PipRevBear;;Yes

2007-01-05;EURUSD;5.PipMax2Up;;Yes

2007-01-05;USDJPY;1.InstPipUp;;Yes

Je crée moi-même le fichier afin de pouvoir utiliser d'autres types de délimiteurs.

Comment puis-je utiliser la dll pour obtenir un "enregistrement" à la fois ? Je peux faire le parsing pour les champs individuels.

Comment puis-je savoir si j'ai atteint EOF ?

J'ai essayé quelques variantes mais j'obtiens des résultats incohérents et parfois des déchets. L'écriture de données comme dans l'exemple fonctionne bien mais je veux lire des données.

 

Eh bien, la persévérance est reine !

Après plusieurs heures, j'ai découvert ceci :

Le gestionnaire de fichiers refuse d'ouvrir un fichier que j'ai créé avec un autre programme. Open renvoie -1. Si j'utilise le fichier qui a été créé par la démo (mt4.log) et que je copie mon contenu dedans, Open fonctionne. Je ne comprends pas pourquoi. Étrange

J'ai fait en sorte que mes "enregistrements" aient une longueur fixe et je lis la longueur de l'"enregistrement" plus 2 pour tenir compte des "CRLF" à la fin de chaque enregistrement. J'ai obtenu la longueur du fichier, divisé par la longueur de l'enregistrement et bouclé pour obtenir tous mes enregistrements dans un tableau :

Voici le code :

int init()

{

string inArr[500] ;

int file ;

int filesize ;

int records ;

int i ;

file = gFileOpen("c:\mt4.log",READ) ;

// Imprimer(fichier) ;

filesize = gFileSize(file) ;

// Print(taille du fichier) ;

records = filesize/25 ;

// Print(records) ;

for(i=1;i<=records;i++)

{

inArr = gFileRead(file,25) ;

}

gFileClose(fichier) ;

Print(inArr[filesize-1]) ; //Check the last one

return(0) ;

}

 

indicateur avec sortie de fichier

Bonjour aux traders et aux programmeurs.

J'ai besoin d'aide pour le codage d'un nouvel indicateur.

l'indicateur devrait être capable d'écrire un fichier avec des informations pertinentes, mais il devrait seulement écrire après l'ouverture d'une nouvelle bougie. pas à chaque tick.

Ce que j'essaie de faire est d'écrire, à chaque nouvelle bougie, l'OHCL des 1000 dernières barres pour entraîner un PNN. Cela devrait être fait en dehors de RAPID-I.

et avec d'autres informations pour apprendre quelle est la probabilité de clôture d'une bougie.

J'ai besoin d'aide. Ce serait un grand projet, mais il y a tellement de choses simples que je suis trop stupide (ou paresseux) pour faire :-)

PriNova

 

datetime timeprev=0 ; avant init()

et

if(timeprev==Time[0])

retour(0) ;

timeprev=Time[0] ; juste en dessous de start()

et c'est tout.

 

C'était une réponse très rapide.

merci elitecamper

 

Pourquoi la fonction move a été supprimée de la bibliothèque

CodersGuru,

Je ne peux pas vous dire à quel point vous êtes précieux pour moi. Vous méritez une grande partie des éloges que je reçois de mes clients, car sans vous je ne serais pas en mesure de faire mon travail pour les aider.

Y a-t-il une raison pour laquelle la fonction Déplacer n'a pas été implémentée comme indiqué dans votre tutoriel ?

Merci encore beaucoup pour votre service

John McGlaughlin

 

gFileRead

Bonjour,

En regardant le code source de mtguru1.dll j'ai trouvé que la fonction gFileRead() ne devrait pas fonctionner. Ai-je tort ?

gFileRead() utilise une variable locale pour stocker la chaîne de caractères lue dans le fichier. Lorsque la fonction revient, elle renvoie un pointeur vers cette variable, mais ce pointeur peut être valide car la variable locale pbuffer sort de sa portée.

Ainsi, d'un point de vue de l'EA MQL4, une instruction comme celle-ci devrait planter :

string buffer = gFileRead( handle, 50 ) ;

et si cela fonctionne, c'est étrange...

P.S. : J'ai posté ceci dans le mauvais fil, avant. https://www.mql5.com/en/forum/172885.

 

Errata Corrige :

.... mais ce pointeur peut être valide ....

mais ce pointeur NE PEUT PAS être un pointeur valide

 

Exécuter un fichier exe

Bonjour,

Je veux faire une chose simple (c'est ce que je pensais). Je veux simplement ouvrir (lancer) un programme externe depuis un EA. (pas dans l'EA)

Donc, juste à titre d'exemple. Disons que je veux ouvrir Microsoft Word lorsqu'une certaine chose se produit dans l'EA.

Je l'ai déjà fait mais je ne trouve pas le script, j'ai passé 2 heures à chercher sur le web. La prochaine fois, j'enregistrerai le code dans un endroit sûr !

 

Une question ?

J'ai obtenu cette erreur "2008.10.21 01:54:34 Fundamental Trader DailyFX_MQL4 v0.02 : handle 2 does not exist in FileClose" (2008.10.21 01:54:34).

Comment puis-je faire ?