[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 291

 
alsu >> :

Vous confondez la notion de "bibliothèque" (dont les fonctions sont extraites à l'aide de #import) et de "fichier d'en-tête d'inclusion" (#include).


Les bibliothèques se trouvent dans le dossier libraries, leurs sources ont l'extension *.mq4, comme les indicateurs et les Expert Advisors. Elles sont compilées dans le fichier *.ex4 (à partir duquel les fonctions prêtes sont ensuite importées dans d'autres programmes, comme ceci

Afin de compiler correctement la bibliothèque, vous devez en règle générale écrire d'abord la directive de bibliothèque #property.

Les fichiers d'en-tête Include sont utilisés pour inclure des morceaux de code prêts à l'emploi dans divers programmes. Ils sont stockés dans le dossier includes, portent l'extension *.mqh et sont inclus dans le texte (c'est-à-dire dans le texte) du programme à l'aide de la directive #include <...> ; ils ne doivent pas être compilés séparément, car ils sont compilés avec le programme principal.

Au fait, auparavant la bibliothèque était générée par un modèle avec #property library, et maintenant elle ne l'est plus. Quelqu'un sait-il pourquoi ils ont changé le modèle ou ont simplement oublié de l'inclure ?

PS si ce n'était pas pour alsu je n'aurais pas compris ce que le questionneur voulait savoir, je me fais vieux.

 
Urain >> :

Au fait, avant la bibliothèque était générée en utilisant un modèle avec #property library, mais maintenant elle ne l'est plus, qui sait pourquoi ils ont changé le modèle ou juste oublié de l'inclure ?

PS si je n'avais pas alsu je ne comprendrais pas ce qu'il veut savoir.

vous pouvez modifier manuellement le modèle :)

 
alsu >> :

vous pouvez modifier manuellement le modèle :)

Oui oui je sais, mais de mon temps j'ai tué 2 jours pour trouver l'erreur, et c'est une grosse affaire dans la nouvelle construction un modèle différent.

 
Urain >> :

>> ...si ce n'était pas pour alsu, je ne saurais pas ce que le questionneur voulait savoir, je me fais vieux.

Vieux briscards expérimentés, regardez le code de la bibliothèque du "demandeur" et expliquez-moi ce que l'auteur voulait dire quand il l'a écrite ?

 

Désolé.

Beaucoup de choses ont été écrites, mais je ne comprends toujours pas la réponse à ma question. Je vais essayer une fois de plus d'expliquer ce que je ne peux pas faire.

Supposons que j'ai réalisé une EA dans laquelle j'ai inséré la directive #include<...> et que j'ai ensuite réalisé un fichier d'en-tête include avec un morceau de code.

J'ai compilé le conseiller expert et l'ai inclus dans une transaction. Tout fonctionne. Basé sur la citation de Sergei Kovalev :

"...Une autre chose que vous pouvez ajouter est que le fichier ex4 est autosuffisant - pour qu'il fonctionne,
n'a pas besoin d'inclure les codes sources des fonctions de l'utilisateur.
Le fichier ex4 peut être copié, partagé avec d'autres commerçants et y être utilisé.

"Il est complet quelle que soit sa technologie.

J'ai pris mon EA et l'ai copié et transféré sur un autre ordinateur, à un autre trader. Après cela, l'Expert Advisor ne veut pas fonctionner et écrit qu'il n'y a pas de fonction à laquelle je fais référence #include<...>, c'est-à-dire qu'il ne voit pas le fichier d'en-tête include et ne peut pas compiler.

Voici un exemple de l'Expert Advisor et du fichier d'en-tête include. Voyez quelle est l'erreur exacte sur la question.

//+------------------------------------------------------------------+
//| Kibliot.mq4 |
//| Droits d'auteur © 2009, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#lien de propriété "http://www.metaquotes.net"

#include <PointZigZag.mqh>

//+------------------------------------------------------------------+
//| fonction de démarrage de l'expert |
//+------------------------------------------------------------------+
int start()
{PointZigZag() ;
Comment("Prod.-y21 = ",y21," ", "Pok.-x21 = ",x21) ;
retour(0) ;
}

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

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

//+------------------------------------------------------------------+
//| PointZigZag.mqh |
//| Droits d'auteur © 2009, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp.
#lien de propriété "http://www.metaquotes.net"

extern int intDepth = 12 ; //------- variables ZigZag
extern intNextDeviation = 5 ; //------- variables ZigZag.
extern intBackstep = 3 ; //------- variables ZigZag
extern inttern ShiftBars = 2 ; //------- variables ZigZag
//------- variables ZigZag ------------------------------------------
double y3, y2, y1, zz;//
int x3, x2, x1, sh;//
double x31, x21, x11 ; // Point d'inflexion du zigzag
double y31, y21, y11 ; // Point d'inflexion du zigzag
double TimeZZ, TimeOO ;
//------------------------------------------------------------------------------

double PointZigZag()
{y3=0;y2=0;y1=0 ;
sh=ShiftBars ;
while (y3==0)
{zz=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, sh) ;
si (zz!=0 && zz!=EMPTY_VALUE)
{if (y1==0) { x1=sh ; y1=zz ; }
else if (y2==0) { x2=sh ; y2=zz ; }
else if (y3==0) { x3=sh ; y3=zz ; }}sh++ ;
}
si (High[x1]>High[x2])
{x11=Haut [x1] ; x21=Bas [x2] ; x31=Haut [x3] ;
y11=0;y21=0;y31=0;TimeZZ=Time[x2];
}sélection
{y11=Low[x1] ; y21=High[x2] ; y31=Low[x3] ;
x11=0;x21=0;x31=0;TimeZZ=Time[x2];}

}

//+------------------------------------------------------------------+
 
veuillez corriger la ligne d'erreur que le compilateur donne sous forme inchangée
 
gvi2504 >> :

Désolé.

Beaucoup de choses ont été écrites, mais je ne comprends toujours pas la réponse à ma question. Je vais essayer une fois de plus d'expliquer ce que je ne peux pas faire.

Supposons que j'aie réalisé un EA dans lequel j'ai inséré la directive #include<...> puis réalisé un fichier d'en-tête include avec un morceau de code.

J'ai compilé le conseiller expert et l'ai inclus dans une transaction. Tout fonctionne. Basé sur la citation de Sergei Kovalev :

"...Je peux également ajouter que le fichier ex4 est autosuffisant - pour qu'il fonctionne,
n'a pas besoin d'inclure les codes sources des fonctions utilisateur.
Le fichier ex4 peut être copié, partagé avec d'autres commerçants et y être utilisé.

"Il est complet quelle que soit sa technologie.

J'ai pris mon EA et l'ai copié et transféré sur un autre ordinateur, à un autre trader. Après cela, l'Expert Advisor ne veut pas fonctionner et écrit qu'il n'y a pas de fonction référencée par moi #include<...>, c'est-à-dire qu'il ne voit pas le fichier d'en-tête include et ne peut pas compiler.

Voici un exemple de l'Expert Advisor et du fichier d'en-tête include. Regardez quelle est l'erreur exacte dans la question.


La directive exige que le fichier à inclure soit également situé sur un autre ordinateur dans le répertoire include, et en général, ne vous embêtez pas, écrivez tout sur la même feuille, attribuez un morceau de code comme une fonction, mettez-le à la fin de la feuille pour qu'il ne traîne pas et pas d'allumage et d'extinction, pourquoi vous compliquer la vie. Les directives #include et #import sont nécessaires (imho) pour écrire un programme complexe de plus de 1000 lignes et composé de plusieurs dizaines de programmes séparés, sinon elles sont plus déroutantes qu'utiles.

 
alsu >> :
Veuillez corriger la ligne d'erreur que le compilateur génère

Le compilateur écrit la ligne suivante

PointZigZag.mqh' - Impossible d'ouvrir le fichier programme D:\Program Files\MetaTrader2\experts\Kibliot.mq4 (10, 1)

 
gvi2504 >> :

Le compilateur écrit la ligne suivante

PointZigZag.mqh' - Impossible d'ouvrir le fichier programme D:\Program Files\MetaTrader2\experts\Kibliot.mq4 (10, 1)

voir la réponse ci-dessus - mettre le fichier include PointZigZag.mqh dans le dossier include

 
alsu >> :

voir la réponse ci-dessus - mettre le fichier include PointZigZag.mqh dans le dossier include

Sur tous les ordinateurs où le fichier Kibliot.mq4 est censé être compilé.