Auto-apprentissage du langage MQL5 à partir de zéro - page 71
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
Igor, le désir d'apprendre le langage MQL5 ne se perd pas, au contraire, il ne fait qu'augmenter. Je suis déchiré, pourquoi je suis si bête et ne peux pas comprendre les choses simples avec cet opérateur de boucle. L'essentiel est que, sans l'opérateur de boucle, le code fonctionne parfaitement, mais avec la boucle, c'est un désordre complet. Je vais quand même aller au fond des choses. Cependant, j'ai beaucoup moins de temps pour l'auto-apprentissage depuis que la période de quarantaine est terminée et j'ai de rares moments pour étudier la langue au travail. La plupart du temps, j'étudie la langue le soir et tard dans la nuit.
Je dois résoudre deux tâches pour pouvoir enfin écrire le code du Trailing Stop :
Vladimir, vous vous lancez dans des trucs bizarres. On vous a donné un modèle : https://www.mql5.com/ru/forum/352460/page58#comment_18726492. Vous l'avez ignoré et avez décidé d'aller de l'avant avec votre esprit. Cette voie est difficile et peut prendre des années. En chemin, étudiez C, C++, Rust, C#, le polymorphisme, l'héritage, le déréférencement des pointeurs, la conversion dynamique des types : Vérifier ou conduire. Vous devez prendre le chemin le plus court vers le but. Si vous voulez du suivi, écrivez du suivi. Vous n'avez pas besoin d'étudier le C et le C++ pour le faire. Tout cela en tant qu'option si vous en avez envie.
La situation de la boucle for est illustrative. C'est une construction puissante qui doit être appliquée au bon endroit. Vous avez un filet et un algorithme auxiliaire. C'est pour cela qu'il n'y a pas d'énumération de postes, il n'y a pas de mages, donc vous n'avez pas cette boucle. Bien sûr, tout fonctionnera sans elle, mais la boucle ne fait que vous donner l'impression d'être du pétrole. Mais vous vous entêtez à l'utiliser, cela semble être une fin en soi : utiliser le plus et le plus possible, avoir le plus possible.
Vladimir, tu t'encroûtes un peu. On vous a donné un modèle : https://www.mql5.com/ru/forum/352460/page58#comment_18726492. Vous l'avez ignoré et avez décidé d'aller de l'avant avec votre esprit. Ce chemin est difficile et peut prendre des années. En chemin, étudiez C, C++, Rust, C#, le polymorphisme, l'héritage, le déréférencement des pointeurs, la conversion dynamique des types : Vérifier ou conduire. Vous devez prendre le chemin le plus court vers le but. Si vous voulez du suivi, écrivez du suivi. Vous n'avez pas besoin d'étudier le C et le C++ pour le faire. Tout cela en tant qu'option si vous en avez envie.
La situation de la boucle for est illustrative. C'est une construction puissante qui doit être appliquée au bon endroit. Vous avez un filet et un algorithme auxiliaire. C'est pour cela qu'il n'y a pas d'énumération de postes, il n'y a pas de mages, donc vous n'avez pas cette boucle. Bien sûr, tout fonctionnera sans elle, mais la boucle ne fait que vous donner l'impression d'être du pétrole. Mais vous vous entêtez à l'utiliser, si bien qu'elle semble être une fin en soi : vous pouvez utiliser autant de tout et n'importe quoi à garder en stock que possible.
Bonjour, Vasily !
Merci d'avoir rejoint le sujet au bon moment et de m'avoir orienté sur la bonne voie, comme toujours. Maintenant, laissez-moi tout expliquer dans un seul ordre :
Vasily, je vous suis extrêmement reconnaissant pour vos conseils et vos critiques constructives ! J'exprime également ma gratitude à tous les participants de ce thème qui m'ont aidé dans mon auto-apprentissage du langage de programmation MQL5 à partir de zéro.
L'auto-apprentissage se poursuit. A suivre.
Salutations, Vladimir.
Bonjour à tous !
Si je voulais ajouter quelque chose d'intéressant, je pense que l'idée d'une "auto-formation à MQL5 à partir de zéro" n'est pas tout à fait juste. Si une personne est 0 en programmation, elle doit d'abord apprendre à programmer. Si le but est d'apprendre à programmer en MQL à partir de zéro, une personne doit d'abord apprendre àprogrammer en C, au moins les bases, et ensuite apprendre à écrire en MQL, car MQL est en fait du C, mais il est spécialisé pour une certaine tâche, une personne ne comprend pas comment les boucles fonctionnent, et essaie déjà d'écrire des programmes. C'est comme essayer d'apprendre le latin sans connaître le russe...
Une autre chose est que le C n'est pas un langage très convivial pour apprendre la programmation, il est simple, mais il est trop concis, il est difficile pour un débutant de lire et de comprendre du code sans avoir une compréhension de base des algorithmes, des types de données, de l'algèbre booléenne. En C, trois caractères à la suite peuvent signifier plusieurs chaînes de caractères dans un autre langage.
Pour apprendre à programmer simplement à partir de zéro, pour la base, pour apprendre à parler à un ordinateur dans un (peu importe) langage, je recommanderais de commencer avec Pascal, le livre le plus facile pour commencer avec lui (2-3 semaines à l'aise), puis C (là après Pascal max semaine avec assiduité, maîtriser la syntaxe, je veux dire les compétences de base du langage !) et ensuite se lancer dans des langages spécialisés comme MQL, parce que MQL est du C, qui a un peu de torsion et de simplification, puisqu'il est conçu pour une seule tâche et que le compilateur connaît l'évidence. Et le C est à son tour une sorte de Pascal compressé en RAR, mais le Pascal est presque anglais =).
Maintenant, à propos des boucles :
Lorsque j'ai appris la programmation, l'analogie avec les sommes en algèbre m'a aidé, où vous spécifiez la valeur initiale de n, la valeur finale de n et la formule avec ce n à calculer.
Bonjour Andrey ! Je suis tout à fait d'accord avec vous concernant la base. Je ne l'ai pas et ne l'ai jamais eu. Mais comme le dit le proverbe, Moscou ne s'est pas construite en une fois ! Merci pour vos conseils et astuces !
Salutations, Vladimir.
Oui. Je suis d'accord - ses codes sont bons aussi! Tu t'énerves pour rien. Prenez votre temps pour trier le code sans vous précipiter et c'est tout. Tout est élémentaire ici - sélectionner et chaluter : (combien plus facile - juste votre sujet de choisir la position NEED... :-))
En plus de cela, les fichiers d'inclusion - cela signifie qu'ils sont dans votre code en tant que fonctions également et c'est tout.
Merci, Roman, pour les codes et les liens ! J'aborde les codes avec calme et ne me presse sûrement pas !
Sincèrement, Vladimir.
Bonne journée et bonne humeur à tous !
Je continue à étudier le langage de programmation MQL5 . Aujourd'hui, comme promis, je publie pour que tout le monde puisse voir le code du modèle Expert Advisor conçu pour écrire un stop suiveur. En raison du fait que le code du modèle EA s'est avéré assez lourd, nous avons donc dû réduire les commentaires autant que possible. La version complète de l'Expert Advisor avec des commentaires détaillés sur chaque ligne de code, dans une présentation accessible à un étudiant de 1ère année d'une école de programmation, sera publiée ultérieurement sous la forme d'un fichier avec le nom de travail Trailing_Stop.mq5 donc afin de ne pas produire une autre "chaussure" sur le site.
Avant de publier le code, l'EA a été testé dans le testeur de stratégie . Aucun problème n'a été identifié. L'EA utilise un système de comptabilisation des positions nettes. Ce système comptable implique qu'à un moment donné, il ne peut y avoir qu'une seule position ouverte sur le compte pour le même symbole (instrument financier).
À l'heure actuelle, l'EA a la capacité de :
De plus, l'EA dispose d'un modèle préinstallé, gracieusement fourni par Vasily Sokolov, qui sera rempli de code pendant le processus d'auto-apprentissage.
UN AVERTISSEMENT!!!
L'Expert Advisor est développé selon le plan d'auto-apprentissage pour un compte de démonstration et à des fins éducatives uniquement ! Non destiné au trading sur un compte réel et à faire des bénéfices !
Cordialement, Vladimir.
Bonne journée et bonne humeur à tous !
Je continue à étudier le langage de programmation MQL5. Hier, j'ai écrit le code du Stop Loss au Breakeven pour les positions de vente et d'achat. Je colle le code sans aucun commentaire pour l'instant. Je publierai la version complète de l'Expert Advisor avec une description détaillée de chaque ligne de code, sous une forme accessible aux élèves de 1ère année de l'école de programmation, plus tard dans le fichier avec le titre de travail Trailing_Stop.mq5. Avant de publier le code, nous avons vérifié les performances du conseiller expert dans le testeur de stratégie. Aucun problème n'a été trouvé.
Salutations, Vladimir.
Bonne journée et bonne humeur à tous !
Je continue à étudier le langage de programmation MQL5. Aujourd'hui, comme promis, je colle le code du modèle de mon Expert Advisor conçu pour écrire un trailing stop. Comme le code du modèle EA est assez lourd, j'ai dû réduire les commentaires au maximum. La version complète de l'Expert Advisor avec des commentaires détaillés sur chaque ligne du code, sous une forme accessible à un élève de 1ère année d'école de programmation, sera publiée ultérieurement comme un fichier avec le nom de travail Trailing_Stop.mq5, afin de ne pas produire un autre gâchis.
...
Très bien. L'idée principale est bien saisie. J'aime particulièrement le processus de développement :
Bonne journée et bonne humeur à tous !
Je continue à étudier le langage de programmation MQL5. Hier, j'ai écrit le code pour le Stop Loss au Breakeven pour les positions d'achat et de vente.
C'est-à-dire que tout est correct. Vous ne devez pas résoudre le problème d'un seul coup et en un seul endroit. Vous devriez le résoudre progressivement, comme vous l'avez fait. Tout d'abord, vous décrivez la logique de base de la fonction OnTick et des fonctions de base telles que OpenBUY, OpenSELL, TickUP, TickDown.
Ensuite, lorsque ce code de base est débogué, compilé et fonctionne dans les limites de ses capacités, vous commencez à décrire les autres fonctions. Cela peut être fait le jour suivant ou même une semaine plus tard. Cela signifie que vous ne devez pas modifier le code principal. Je pense que vous pouvez voir pourquoi.
Vous devez maintenant affiner ce mode de développement : continuez à écrire des fonctions, en reliant par leur intermédiaire des fonctionnalités au code existant. Le programme existant devrait fonctionner correctement. La complexité ne doit pas augmenter. Les fonctions à ajouter doivent renvoyer des résultats simples et clairs. Leurs noms doivent être aussi simples et clairs pour vous. Si vous n'y parvenez pas, c'est peut-être parce que vous devez écrire non pas une, mais deux, voire trois fonctions pour résoudre le problème. Au début, le cadre général de l'application sera difficile à définir. C'est pourquoi il est préférable de demander conseil à des collègues plus expérimentés. Avec le temps, vous apprendrez à développer de tels modèles par vous-même.
Au fil du temps,vous devrez utiliser de plus en plus de constructions linguistiques dans les fonctions pour les adapter à vos besoins.À ce stade, vous élargirez progressivement et surtout de manière organique votre connaissance des constructions du langage, vous apprendrez les boucles, les tableaux et même à travailler avec des pointeurs.
En fait, vous avez déjà appris la partie la plus difficile de la programmation, même si vous n'avez pas encore consolidé le matériel que vous avez appris. Il ne vous reste plus qu'à le répéter plusieurs fois pour le consolider. A partir de là, il n'y aura rien de fondamentalement nouveau, tout est identique : Modèle général -> Description des noms des fonctions et de leurs paramètres-> Rédaction du contenu de ces fonctions -> Disposition de ces fonctions dans l'unité centrale. C'est tout. Il ne reste plus qu'à perfectionner cette compétence et à faire preuve de constance. Les diverses constructions supplémentaires que vous commencez à utiliser, comme les boucles et les tableaux, ne sont que des détails, parfois astucieux, mais rien de plus que des détails.
Comme il n'y a pas de limite à la perfection, je vais ajouter quelques commentaires supplémentaires sur le code :
J'ai souligné en jaune deux endroits non triviaux.
1) Notez que le code est répété dans le premier if et dans le else suivant. La seule différence réside dans la dernière ligne et l'action finale (OpenBUY, OpenSell).
2) Les conditions pour entrer dans l'autre bloc ne sont pas évidentes. Ils ne sont pas visibles en raison de l'abondance de ? En fait, ils ne dépendent que de la dernière ligne :
C'est un signe certain qu'une fonction manque ici.
Nous devons écrire une fonction qui retourne vrai si le temps pour ouvrir la position correspond à celui donné (je l'écrirai plus tard).
Très bien. Le point principal est correctement saisi. J'ai particulièrement apprécié le processus de développement :
C'est-à-dire que tout va bien. Il n'est pas nécessaire de résoudre le problème d'un seul coup et en un seul endroit. Vous le faites progressivement, comme cela s'est produit dans votre cas. Tout d'abord, vous décrivez la logique de base de la fonction OnTick et des fonctions de base telles que OpenBUY, OpenSELL, TickUP, TickDown.
Ensuite, lorsque ce code de base est débogué, compilé et fonctionne dans les limites de ses capacités, vous commencez à décrire les autres fonctions. Cela peut être fait le lendemain ou même une semaine plus tard. Cela signifie que vous ne devez pas modifier le code principal. Je pense que vous pouvez voir pourquoi.
Vous devez maintenant affiner ce mode de développement : continuez à écrire des fonctions, en reliant par leur intermédiaire des fonctionnalités au code existant. Le programme existant devrait fonctionner correctement. La complexité ne doit pas augmenter. Les fonctions à ajouter doivent renvoyer des résultats simples et clairs. Leurs noms doivent être aussi simples et clairs pour vous. Si vous n'y parvenez pas, il se peut que vous deviez écrire non pas une, mais deux, voire trois fonctions pour résoudre le problème.
Pour qu'une fonction puisse accomplir les tâches prévues,vous devrez éventuellement utiliser de plus en plus de constructions linguistiques dans ces fonctions. C'est à ce moment-là que vous allez progressivement et surtout organiquement étendre votre connaissance des constructions du langage, apprendre les boucles, les tableaux et même travailler avec des pointeurs.
Bonjour, Vasily ! Merci beaucoup pour vos suggestions et votre soutien opportuns. Vos commentaires sur le rôle des fonctions et les principes de construction du code de programme m'ont vraiment aidé à apprendre le langage de programmation MQL5 :
Maintenant que les informations dans ma tête sont structurées, il est plus facile de comprendre le code écrit non seulement par moi, mais aussi par d'autres programmeurs. J'espère que ce sujet sera une bonne aide pour ceux qui commencent à apprendre le langage de programmation MQL5 depuis le début.
Salutations, Vladimir.