[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 309
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
C'est vrai : il est de bon ton de ranger ses propres déchets...
Mais dans ce contexte, comment savoir si les "déchets" doivent être nettoyés maintenant ou vice-versa : ce ne sont pas des déchets, ce sont les données nécessaires aux calculs ultérieurs.
Si je comprends bien, deinit() devrait être utilisé pour nettoyer la poubelle, mais... il est exécuté non seulement lorsque le graphique d'un instrument commercial est supprimé, lorsque le conseiller expert en est retiré, mais aussi lorsque le TF est modifié. Dans ce cas, toutes les données accumulées pour la TF seront perdues et le conseiller expert recommencera à travailler avec un tableau nul lorsqu'il reviendra à l'horizon temporel précédent. La même chose se produira si nous modifions l'un des paramètres de l'Expert Advisor.
Il s'avère que dans certaines situations, le "ramassage des ordures" est un processus logique complexe, et non un simple changement de la taille du tableau.
Ce n'est pas difficile. Dans la boucle, initialiser le tableau avec des valeurs. Ensuite, nous travaillons avec le tableau résultant. Lorsque le travail est terminé, nous le rendons de longueur zéro. En cas de doute, vous pouvez le faire à la fin du code, juste avant return(0).
Veuillez suggérer le code ci-dessous pour lire le fichier journal. Lit automatiquement le fichier journal actuel par date et le sort sur l'imprimante.
Où :
Le dossier est en cours d'assemblage à partir de pièces. Mais je n'ai pas besoin de tout le fichier, juste de la dernière ligne. Aidez-nous à corriger, s'il vous plaît.
Ce n'est pas difficile. Dans la boucle, le tableau est initialisé avec des valeurs. Puis nous avons travaillé avec le tableau résultant. Lorsque le travail est terminé, nous en faisons un tableau de longueur nulle. En cas de doute, vous pouvez le faire à la fin du code, juste avant return(0).
J'ai été mal compris.
Dans le contexte de cette conversation (si j'ai bien compris les prémisses de cette conversation), la boucle est l'EA elle-même. Après tout, à chaque fois qu'un tic-tac se produit, le tableau augmente ou reste le même selon qu'une nouvelle valeur doit y être écrite ou non.
Comment pouvons-nous savoir que le travail est terminé, et non pas, par exemple, qu'une personne a modifié le calendrier ? Même par accident... Dans ce cas, deinit() sera appelé et toutes les données seront perdues. Le conseiller expert commencera à les stocker (écrire dans un tableau dynamique) à nouveau, sur la base des valeurs obtenues dans le nouveau cadre temporel(un nouveau cycle).
C'est ce que je veux dire.
Je n'ai pas été compris.
Dans le contexte de notre discussion (si j'ai bien compris la prémisse de cette discussion), le cycle est le travail du conseiller expert lui-même. Après tout, à chaque tic, le tableau est soit augmenté, soit inchangé, selon qu'une nouvelle valeur doit y être écrite ou non.
Comment pouvez-vous savoir si un travail est terminé et si ce n'est pas simplement une personne qui modifie les délais, par exemple ? Même par accident... Dans ce cas, deinit() sera appelé et toutes les données seront perdues. Le conseiller expert commencera à les accumuler (les écrire dans un tableau dynamique) à nouveau, sur la base des valeurs obtenues dans le nouveau cadre temporel(un nouveau cycle).
Mon point de vue est le suivant.
J'ai remarqué une particularité du terminal. Comme le calcul du profit de l'ordre ne tient pas compte de l'OrderSwap(), je veux qu'il ferme l'ordre en une seule fois.
Cela signifie que nous devons utiliser cette formule pour clôturer l'ordre avec un bénéfice :
(OrderProfit()+OrderSwap()+OrderCommission())>0
Je n'ai jamais travaillé avec la commission et la commission n'est pas utilisée sur la démo, c'est pourquoi je ne peux pas la vérifier sur le compte.
Mes calculs sont-ils corrects ?
Si vous entrez dans les détails, vous pouvez utiliser cette fonction. Il vous indiquera la raison de la désinitialisation.
C'est vrai... :)
Je l'ai oublié. Maintenant, avec mon habitude d'utiliser "foolproof", nous allons l'utiliser...
ObjectGetValueByShift() pour vous aider.
Et comment vous allez travailler avec elle - vous seul le savez...
Merci, gentil monsieur !
Puis-je modifier la taille du lot d'un ordre en attente ?
Non, tu ne peux pas.
tout ce que vous pouvez changer est expliqué ici https://docs.mql4.com/ru/trading/OrderModify