Auto-apprentissage du langage MQL5 à partir de zéro - page 58
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
J'ai créé un modèle standard. C'est là que j'ai commencé à écrire le code, et c'est ici que j'ai commencé à poster les fragments qui ont déjà été écrits. Je n'avais pas pensé au cadre algorithmique avec mes propres fonctions, merci pour l'astuce ! Merci également pour l'astuce concernant le compte de compensation !
Il existe une telle technique d'alphabétisation - elle permet d'écrire très rapidement et de manière intelligible.
En général, dans un style littéraire, écrivez dans les commentaires ce que vous allez faire (juste la séquence principale directe)
// тралим стоп-лосс единственного ордера по сигналу от тиков
// прим.) трал - подтягиваем стоп-лосс следом за ценой,
void TrallOnTick() {
// берём рыночный ордер (для 5-ки позицию)
// смотрим сколько пунктов от текущей цены до стоп-лосс
// если больше чем требуемая дистанция
// переносим стоп-лосс
}
En gros, tout. Ensuite, après chaque commentaire, vous écrivez un code de 3-5 lignes (un peu en général). L'ensemble de votre fonction, du début à la fin, doit tenir dans l'écran que vous voyez. Si vous en obtenez davantage, cela signifie que les fragments doivent être séparés en fonctions/méthodes distinctes.
Quand une chose aussi élémentaire commence à fonctionner dans le testeur, on peut généraliser, ajouter des conditions de la vie réelle, changement de pas ou de fréquence par exemple, prendre en compte les conditions du marché, il n'y a pas de limite à la perfection...
abstrait, il existe une technique d'alphabétisation qui vous permet d'écrire très rapidement et clairement.
En général, dans un style littéraire, écrivez dans les commentaires ce que vous allez faire (uniquement la séquence principale directe)
// тралим стоп-лосс единственного ордера по сигналу от тиков
// прим.) трал - подтягиваем стоп-лосс следом за ценой,
void TrallOnTick() {
// берём рыночный ордер (для 5-ки позицию)
// смотрим сколько пунктов от текущей цены до стоп-лосс
// если больше чем требуемая дистанция
// переносим стоп-лосс
}
En gros, tout. Ensuite, après chaque commentaire, vous écrivez un code de 3-5 lignes (un peu en général). L'ensemble de votre fonction, du début à la fin, doit tenir dans l'écran que vous voyez. Si vous en obtenez davantage, cela signifie que les fragments doivent être séparés en fonctions/méthodes distinctes.
Quand une chose aussi élémentaire commence à fonctionner dans le testeur, on peut généraliser, ajouter des conditions de la vie réelle, changement de pas ou de fréquence par exemple, prendre en compte les conditions du marché, il n'y a pas de limite à la perfection...
Bonjour Maxim ! Vous êtes très utile avec votre conseil ! Je suis assis ici et je me demande comment remplir un modèle standard d'EE.
Salutations, Vladimir.
Chers experts en programmation !
Veuillez expliquer deux questions :
Peut-être ai-je une mauvaise compréhension de l'application du nombre magique dans la programmation tout court.
Sincèrement, Vladimir.
Lorsqu'un ordre est accepté pour être exécuté, toutes ses caractéristiques (symbole, heure, type d'ordre, ticket) sont attribuées par le terminal (demandé par l'utilisateur et attribué par le terminal) et non par l'utilisateur ; il en va de même pour la position, qui stocke des informations sur ses ordres, mais il peut y en avoir beaucoup. Et le chiffre magique est un identifiant d'utilisateur. Citation :
Lorsque nous créons une nouvelle demande en attente, nous devons la marquer d'une manière ou d'une autre - afin que le programme puisse savoir que cet ordre particulier a été placé par NAMI sur cette demande en attente particulière - c'est-à-dire que nous devons identifier et associer de manière unique un ordre ou une position à une demande en attente particulière.
NAMI est absent dans la signification. Et puis Artem met la classification des commandes dans le numéro de Magik. Pourquoi pas, les 2 premiers chiffres indiquent quelque chose, par exemple le type de commande, les 4 chiffres suivants indiquent la date de la commande.
Concernant l'algorithme de quelque chose. Définir initialement les conditions initiales. Il y a des commandes sur notre symbole et nous ne les prenons pas en compte ou nous les prenons en compte. Sans conditions initiales, il faut retravailler lors de la création de l'algorithme, et encore plus le code peut être éternel)
abstrait, il existe une technique d'alphabétisation qui vous permet d'écrire très rapidement et clairement.
En général, dans le style alphabétisation-programmation, écrivez dans les commentaires ce que vous allez faire (juste la séquence principale directe) ...
... En gros, tout. Ensuite, après chaque commentaire, vous écrivez un code de 3 à 5 lignes (pas beaucoup en général). L'ensemble de la fonction, du début à la fin, doit tenir dans l'écran que vous voyez. Si vous en obtenez davantage, cela signifie que vous devez séparer les fragments en fonctions/méthodes distinctes.
Maxim, vérifiez si j'ai bien compris votre conseil ou s'il y a quelque chose que je dois ajouter ? Je veux dire la partie test, parce que je n'ai pas encore écrit les codes.
Salutations, Vladimir.
Maxim, voyez si j'ai bien compris votre conseil ou si je dois ajouter quelque chose ? Je veux dire la partie test, à part les codes.
Sincèrement, Vladimir.
Conditions initiales. Nous calculons qu'il y a une position sur notre symbole et nous la voyons sur le graphique.
Si nous avons une position, il n'y en a qu'une, soit acheter, soit vendre. Nous commençons donc par rechercher des positions sur notre symbole. Demander / obtenir des caractéristiques. Détermination du type de position - achat ou vente. Et ainsi de suite dans le texte.
Lorsqu'un ordre est accepté pour être exécuté, toutes ses caractéristiques (symbole, heure d'émission, type d'ordre, ticket) sont attribuées par le terminal (demandées par l'utilisateur et attribuées par le terminal), et non par l'utilisateur. Il en va de même pour la position, celle-ci stocke des informations sur ses ordres, mais il peut y en avoir plusieurs. Et le chiffre magique est un identifiant d'utilisateur. Citation :
Lorsque nous créons une nouvelle demande en attente, nous devons la marquer d'une manière ou d'une autre - afin que le programme puisse savoir que cet ordre particulier a été placé par NAMI sur cette demande en attente particulière - c'est-à-dire que nous devons identifier et associer de manière unique un ordre ou une position à une demande en attente particulière.
NAMI est absent dans la signification. Et puis Artem met la classification des commandes dans le numéro de Magik. Pourquoi pas, les 2 premiers chiffres indiquent quelque chose, par exemple le type de commande, les 4 chiffres suivants indiquent la date de la commande.
Concernant l'algorithme de quelque chose. Définir initialement les conditions initiales. Il y a des commandes sur notre symbole et nous ne les prenons pas en compte ou nous les prenons en compte. Sans les conditions initiales, il faut retravailler lors de la création de l'algorithme, et encore plus, le code peut prendre une éternité)
Merci, Valeriy, pour cette réponse détaillée. Beaucoup de choses sont devenues plus claires. Je pense la même chose de l'algorithme, mais Vassily a déjà expliqué pourquoi nous n'avons pas besoin de Magic Number dans cet EA.
Salutations, Vladimir
Merci, Valery, pour cette réponse détaillée. Ça s'est beaucoup éclairci. J'ai la même opinion sur l'algorithme, mais Vasiliy a déjà expliqué pourquoi nous n'avons pas besoin de Magic Number dans cet EA.
Sincèrement, Vladimir.
Nous avons ouvert un graphique et il y a une position sur le symbole graphique, nous ne savons pas ce que c'est et nous voulons l'ouvrir au seuil de rentabilité et ensuite trawler le SL pour réduire les pertes au cas où le prix s'inverse.
Avec les corrections de Valery, le modèle d'EE avec commentaires a pris un nouveau look.
Salutations, Vladimir.
Vladimir, tu n'as pas besoin de l'exploiter longtemps. Passons à l'action. J'ai rédigé pour vous un modèle du suivi souhaité :
Il suffit de remplir les fonctions avec la logique correspondant à leur nom. Comme vous pouvez le constater, le modèle est élémentaire. Et structurellement similaire au TDR.
Notez que ce code compile, c'est-à-dire que du point de vue du compilateur, il est correct. Il faut toujours tendre vers cet état : c'est-à-dire apporter de petites modifications pendant le développement, de sorte qu'après les avoir effectuées, le code puisse compiler. Essayez également de faire en sorte que le compilateur signale "0 erreur, o avertissements". Il est clair que vous ne pouvez pas exécuter le programme avec des erreurs, mais les avertissements du compilateur doivent être perçus comme la prière de notre Père : s'il y a un avertissement, il faut le corriger. Ce modèle est réalisé avec "0 erreur, o avertissements" - conservez ce statut jusqu'à la fin du développement.
Une fois que nous avons compris la logique et que nous avons compris le compilateur, tout ce qu'il nous reste à faire est d'équiper les fonctions de la logique dont nous avons besoin.
Le deuxième paramètre, la valeur de la piste, sera pour l'instant déplacé dans la prochaine version. Cela nécessitera des calculs supplémentaires. C'est pourquoi il n'est pas présent dans ce modèle. Le chalut sera ajusté à chaque tic.
Vladimir, tu n'as pas besoin de l'exploiter longtemps. Passons à l'action. J'ai rédigé pour vous un modèle du suivi souhaité :
Il suffit de remplir les fonctions avec la logique correspondant à leur nom. Comme vous le voyez, le modèle est élémentaire. Et structurellement similaire au TDR.
Notez que ce code compile, c'est-à-dire que du point de vue du compilateur, il est correct. Il faut toujours tendre vers cet état : c'est-à-dire apporter de petites modifications pendant le développement, de sorte qu'après les avoir effectuées, le code puisse compiler. Essayez également de faire en sorte que le compilateur signale "0 erreur, o avertissements". Il est clair que vous ne pouvez pas exécuter le programme avec des erreurs, mais les avertissements du compilateur doivent être perçus comme la prière de notre Père : s'il y a un avertissement, il faut le corriger. Ce modèle est réalisé avec "0 erreur, o avertissements" - conservez ce statut jusqu'à la fin du développement.
Une fois que nous avons compris la logique et que nous avons compris le compilateur, il ne nous reste plus qu'à doter les fonctions de la logique nécessaire.
Le deuxième paramètre, la valeur de la piste, sera pour l'instant déplacé dans la prochaine version. Cela nécessitera des calculs supplémentaires. C'est pourquoi il n'est pas présent dans ce modèle. Le chalut sera mis à jour à chaque tic-tac.
Vasiliy, je tiens bien sûr à vous remercier pour tout le travail que vous avez accompli, mais cela ne m'aide pas à comprendre d'où viennent ces fonctions et opérateurs et, surtout, pourquoi ils sont là. Il aurait été plus correct d'aller jusqu'à l'écriture de ce code, ce que vous m'avez suggéré. Je voulais vraiment arriver à ce point moi-même et maintenant je le veux.
Je comprends que vous, comme beaucoup d'autres, en ayez assez que j'épelle constamment toutes les lignes de code et que je piétine sur place, mais le problème est que je ne comprends toujours pas comment tout est construit, de l'algorithme à l'écriture du code. Je dois ajouter la méconnaissance de l'anglais au problème, car je dois copier et coller presque tous les messages d'erreur et d'avertissement du compilateur, ainsi que d'autres mots anglais dans Google Translator. D'ailleurs, si quelqu'un a essayé d'exécuter les micro, voire nano-codes que j'ai postés dans ce fil, ils ont tous passé la compilation avec "0 erreur, 0 avertissement".
Maintenant, j'ai besoin d'un peu de temps pour réaliser, ou plutôt pour comprendre pourquoi ces fonctions et opérateurs sont apparus. Donc, en résumé, c'est une horreur silencieuse. Et je suis un mauvais élève quand je ne comprends pas les choses élémentaires.
Merci à vous et à tous les autres programmeurs de tolérer ma lenteur d'esprit. Bien que je réalise que votre patience n'est pas illimitée.
Sincèrement, Vladimir.