[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 267
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Merci, là sur le lien, il y a une solution logicielle au problème, et je ne sais pas quoi faire. Qu'est-ce que cela a à voir et comment puis-je résoudre ce problème ? Pourquoi l'EA a bien fonctionné pendant un mois, et maintenant il y a un problème ? Si l'erreur était dans le code ? Il s'avère que ce fil de discussion n'est pas destiné aux débutants s'il me charge de répondre à des questions. Je suis frustré.
J'ai écrit une telle chose dans mon EA juste après le début :
Essayez-le, peut-être que certains éléments vous seront utiles à vous aussi.
1. ok. Int start() a été déclaré. J'ai toujours rendu zéro. J'ai aussi vu les commandes return(-1) et même return(-2) dans le code. Quelle est la bonne façon de choisir ce code ?
2. La question naturelle qui se pose est donc la suivante : est-il possible de déclarer start() de l'EA/indicateur/script non pas de type int(), mais de n'importe quel autre type et ensuite de renvoyer quoi au terminal ? En d'autres termes, que fait le terminal avec la valeur renvoyée par return() ?
1. Comment décidez-vous du retour à une fonction normale ?
2. Vous pouvez avoir n'importe quel type, tout comme une fonction normale. Le terminal ne fait rien avec les valeurs retournées. Il les ignore.
Fonctions spéciales
1. comment décidez-vous du retour à une fonction normale ?
2. Vous pouvez avoir n'importe quel type, tout comme une fonction normale. Le terminal ne fait rien avec les valeurs retournées. Il les ignore.
1. Pour décider ce qu'une fonction ordinaire doit retourner, je dois savoir pourquoi le code principal a besoin d'une telle valeur. Par exemple, si je veux prendre la décision d'ouvrir un ordre d'achat lorsqu'il y a un signal, je vais écrire une fonction qui renvoie le nombre d'ordres d'achat déjà ouverts. En fonction de leur nombre, le code prendra une décision en suivant la logique intégrée dans le code. Je ne sais pas quelle logique est intégrée dans le code de retour. Aujourd'hui, je parcourais un article sur la création d'un sémaphore et je suis tombé sur un code de retour (-2). Surpris, j'ai posé une question ici. C'est tout. ( https://www.mql5.com/ru/articles/1412 - article ici).
2. le terminal ignore les valeurs retournées. C'est vrai ? Si c'est le cas, alors une nouvelle question légitime se pose, pourquoi dans la création d'un EA/indicateur/script, le développeur met dans un modèle exactement int, car il serait plus raisonnable d'y mettre void - alors le terminal ne doit rien ignorer - nous gagnerions 1 tact de temps processeur ? Peut-être qu'il y a une certaine logique dans QUOI retourner des fonctions int init(), int deinit() et int start() ? Je pense que Roche l'a déjà expliqué à quelqu'un quelque part - il s'est souvenu d'une description du moment où il faut renvoyer zéro et du moment où il faut renvoyer (-1). C'est justement cette explication que je cherchais. Dommage que je n'aie pas pu le trouver...
P.S.
L'auteur de l'article utilise la déclaration (-2) pour ses propres besoins. Mais le fait est que parfois la fonction start() se termine par un code retournant une valeur différente de zéro. Et ce n'est pas une seule personne qui le fait. C'est exactement cette logique que nous voulons comprendre.
Fonctions spéciales
On dirait que c'est là dans le texte.
Les fonctions prédéfinies peuvent avoir des paramètres. Cependant, lorsque ces fonctions sont appelées par le terminal client, aucun paramètre n'est passé en externe, mais les valeurs par défaut sont utilisées.
Il s'agit des paramètres entrant dans la fonction, et non des paramètres renvoyés par celle-ci.
Il s'agit d'un compteur de commandes. Eh bien, il se peut, par exemple, que vous vouliez savoir dans le code s'il y a des ordres d'achat sur le marché pour une certaine paire de devises et avec un certain nombre magique, par exemple. Si c'est le cas, par exemple, un autre ordre d'achat ne peut être ouvert. Le compteur de commandes est donc nécessaire pour prendre une décision.
J'ai écrit ça dans mon EA juste après le début :
Essayez-le, vous pourriez en trouver certains utiles.
comment ces lignes peuvent être comprises :
volume des commandes de retour
if(buys>0) return(buys) ;
sinon retour(-vendues) ;
} ?
Écrire un scénario :
Jetez-le sur le tableau et regardez le journal :
2012.07.20 12:04:11 111 NZDUSD,M15: removed
2012.07.20 12:04:11 111 NZDUSD,M15: uninit reason 0
2012.07.20 12:04:11 111 NZDUSD,M15: Попытка ретурна 136
2012.07.20 12:04:11 111 NZDUSD,M15: loaded successfully
(ici 111 est le nom du script). Nous voyons la ligne " uninit reason 0 " - apparemment le terminal attendait le zéro !
Essayez la même chose avec (-1) :
Le résultat est le même :
2012.07.20 12:08:19 111 NZDUSD,M15 : supprimé
2012.07.20 12:08:19 111 NZDUSD,M15 : raison uninit 0
2012.07.20 12:08:19 111 NZDUSD,M15 :Tentative de retour -1
2012.07.20 12:08:19 111 NZDUSD,M15 : chargé avec succès
Le terminal semble se soucier de savoir si le zéro est renvoyé ou non.
P.S.
En général, sur le web, je suis tombé sur cette réponse :
retour 0 - le programme a terminé son travail sans erreur
return 1 - ou un nombre supérieur, le programme a terminé son travail avec une erreur et renvoie le code d'erreur pour un traitement ultérieur.
Dans tout système d'exploitation, un programme renvoie toujours un code d'erreur.
Le seul problème est que notre retour ne renvoie pas le code au système d'exploitation, mais au terminal. Cela laisse la question ouverte.
Écrire un scénario :
Jetez-le sur le tableau et regardez le journal :
(ici 111 est le nom du script). Nous voyons la ligne " uninit reason 0 " - apparemment le terminal attendait le zéro !
Essayez la même chose avec (-1) :
Le résultat est le même :
Apparemment, le terminal se soucie de savoir si un zéro est renvoyé ou non.uninit reason est le code de raison de l'arrêt de l'Expert Advisor.
https://docs.mql4.com/ru/constants/uninit