Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 846
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 GetLastError après les fonctions et si une erreur se produit, ne va-t-on pas aller dans ce bloc (tel qu'il est écrit) et les commandes ne seront pas exécutées ? Je comprends la chaîne, par exemple OrderSend() -> GetLastError -> bloc d'erreur Sleep(3000) RefreshRates() -> sortie du bloc et si les conditions demeurent OrderSend() est demandé à nouveau. Ou bien mon raisonnement et mes concepts sont erronés. Je comprends que vous voulez écrire la valeur de retour 1 ou 0 dans le bloc, mais mes fonctions sont simples et ne sont pas liées à des valeurs booléennes comme SignalBuy, si je comprends bien, les valeurs de retour devraient être retournées là.
J'ai GetLastError après les fonctions et si une erreur se produit, ne va-t-on pas aller dans ce bloc (tel qu'il est écrit) et les commandes ne seront pas exécutées ? Je comprends la chaîne, par exemple OrderSend() -> GetLastError -> bloc d'erreur Sleep(3000) RefreshRates() -> sortie du bloc et si les conditions demeurent OrderSend() est demandé à nouveau. Ou bien mon raisonnement et mes concepts sont erronés. Je comprends que vous voulez écrire la valeur de retour 1 ou 0 dans le bloc, mais mes fonctions sont simples et ne sont pas liées à des valeurs booléennes comme SignalBuy, si je comprends bien, les valeurs de retour devraient être retournées là.
J'ai besoin de conseils. Selon les conditions, la position doit être fermée et après 121 secondes, une nouvelle position doit être ouverte. Comment puis-je le faire avec Sleep(121000) ?
Bonne journée !
J'ai besoin de conseils. Selon les conditions, la position doit être fermée et après 121 secondes, une nouvelle position doit être ouverte. Comment puis-je le faire avec Sleep(121000) ?
OnTimer() à la rescousse
Je viens de réinstaller Windows 7 et je voulais installer Mt4, le problème est que les fichiers ne se téléchargent pas, que dois-je faire ?
Merci ! Je n'ai jamais utilisé OnTimer(). Cette partie du code se trouve dans void OnTick(). Serait-il donc possible de gérer la fonction OpenPosition() par OnTimer() ? Si vous pouvez, s'il vous plaît corriger le code comment insérer OnTimer() là correctement...
Le timer est démarré dans OnInit()
Pour commencer le compte à rebours, vous devez trouver l'heure de fermeture de la dernière position dans la minuterie et compter 121 sukunds à partir de cette heure. Pour passer le drapeau vous permettant d'ouvrir une nouvelle position, utilisez une variable globale dont la portée couvre l'ensemble du programme. Vous pouvez faire en sorte qu'il contienne initialement une valeur supérieure à 121, par exemple 122 (vous pouvez modifier le temps d'attente dans les paramètres).
Dans OnTick(), vérifiez cette variable. Si elle est supérieure à 121 et qu'il n'y a pas de position, vous ouvrez une position et, après avoir vérifié si elle a été ouverte avec succès, vous remettez la variable à zéro.
Dès que la position est fermée, la minuterie voit l'heure de fermeture de la position (elle le fait en continu une fois par seconde) et si de l'heure actuelle à l'heure de fermeture de la position il s'est écoulé moins de 121ème seconde, la minuterie commence à compter - chaque seconde la valeur variable est ajoutée de 1.
Approximativement. Là où il peut y avoir un bug - si la position n'a pas encore été fermée, son temps de fermeture est de zéro. Cela peut causer un problème de démarrage du compte à rebours. Vous pouvez réinitialiser la variable à -1, par exemple.
Oui, n'oubliez pas de détruire le timer dans OnDeinit() :
Le timer est démarré dans OnInit()
Pour lancer le compte à rebours, vous devez trouver dans la minuterie l'heure à laquelle la dernière position a été fermée et compter 121 secondes à partir de cette heure. Pour passer le drapeau permettant d'ouvrir une nouvelle position, utilisez une variable globale qui est extensible par l'ensemble du programme. Vous pouvez lui faire contenir initialement une valeur supérieure à 121, par exemple 122 (vous pouvez modifier le temps d'attente dans les paramètres).
Dans OnTick() vous vérifiez cette variable. S'il est supérieur à 121 et qu'il n'y a pas de position, ouvrez une position et, après avoir vérifié si elle a été ouverte avec succès, remettez la variable à zéro.
Dès que la position est fermée, la minuterie voit l'heure de fermeture (elle le fait en continu une fois par seconde) et si de l'heure actuelle à l'heure de fermeture de la position il s'est écoulé moins de 121ème seconde, la minuterie commence à compter - chaque seconde la valeur variable est ajoutée par 1.
Approximativement. Là où il peut y avoir un bug - si la position n'a pas encore été fermée, son temps de fermeture est de zéro. Cela peut causer un problème de démarrage du compte à rebours. Vous pouvez réinitialiser la variable à -1, par exemple.
Oui, n'oubliez pas de détruire le timer dans OnDeinit() :
Je l'ai, merci. J'espérais le faire en une seule ligne, mais je vais probablement devoir travailler un peu plus longtemps.
Je vois, merci. J'espérais le faire en une seule ligne, mais je suppose que ça va demander plus de travail.