Horloge temps réel MQL4 (seconde par seconde)

 

Je crois savoir que la fonction Start() fonctionne tic-tac par tic-tac.

Existe-t-il un moyen d'utiliser les données en temps réel de l'horloge de l'ordinateur et de les mettre à jour toutes les secondes ? Pas tic par tic mais toutes les secondes ?

Si oui, veuillez m'aider.

Merci

 

expliquer

 

MQL4 utilise TimeLocal(); TimeCurrent() qui sont basés sur le tick par tick même iTime....

Ce que je veux vraiment, c'est être capable d'afficher sur mon graphique une horloge en temps réel qui se mettra à jour toutes les secondes, probablement en utilisant l'horloge de mon ordinateur ou un serveur distant.

 

TimeCurrent() n'est pas basé sur les tics.

Mais la fonction de démarrage est basée sur les tics. Vous pouvez utiliser une boucle sans fin en combinaison avec sleep. Il y a un article publié ici sur mql4.com expliquant les avantages et les solutions.

Puisque mt4 est entièrement basé sur les tics, je n'aime pas implémenter une logique sensible au temps. Dans le passé, j'ai combiné ces deux éléments dans mes indicateurs Custom Timeframe. C'est juste un travail simple mais vous pouvez vous faire une idée. Si vous voulez une montre mise à jour chaque seconde alors mon travail est inutile pour vous. https://www.mql5.com/en/code/10080

//z

 

L'idée est de faire en sorte qu'une montre se mette à jour toutes les secondes et non pas d'appeler des fonctions dans le Start() de votre programme, par exemple

if(TimeCurrent()>(t+TimeInSeconds))

D'après votre explication, je peux utiliser une boucle while dans la fonction init() et ensuite, si je l'appelle dans la fonction start(), ce sera toujours tic par tic !

 

vous aurez besoin de quelque chose comme ceci votre fonction de démarrage. La boucle est exécutée au premier tick. Après cela, ce sera tick independ.

while(true){
 updateWatch();
 Sleep(1000);
} 
 

zzuegg ; ceci sera une boucle sans fin et limitera l'indicateur metatrader à faire une seule chose... compter.

Donc, si vous choisissez d'utiliser la fonction sleep en combinaison avec le TimeCurrenet appelé à partir d'une fonction pour ajouter une seconde tous les Sleep(1000) ; ce programme ne sera pas en mesure de faire autre chose.

Il ne fera que compter.... donc vous vous limiterez à une seule fonction.

 

et oui metatrader n'aime pas les boucles sans fin ; il se plante comme je l'ai expérimenté maintenant lol il devrait avoir une pause quelque part :)

 

Vous n'êtes pas limité à une seule fonction. Vous pouvez faire tout ce que vous voulez à l'intérieur de la boucle. Vous pouvez avoir besoin de quelques recalculs pour garantir un temps d'exécution de 1sec. mais en général cela fonctionne.

Je ne l'ai jamais fait avec des indicatos, mais dans les EA ça marche.

Une autre option est d'utiliser un programme externe pour envoyer de faux ticks à votre terminal dans un intervalle de 1sec. par cela vous avez garanti que la fonction de départ est appelée au moins une fois par seconde. En combinaison avec mon code des Custom Timeframe Candles vous devriez obtenir votre résultat.

 
while( !(IsTesting() || IsStopped()) ){
    updateWatch();
    RefreshRates();
    if (...)  doTrading();
    Sleep(1000);
} 


et oui metatrader n'aime pas les boucles sans fin ; il se plante comme je l'ai expérimenté maintenant lol il doit y avoir une pause quelque part :)
Pas de boucles sans fin dans les indicateurs. Pour les scripts et les EAs, c'est ok si vous mettez à jour les internes d'abord (comme dans l'exemple ci-dessus).
 

Utilisez MQL5

Raison: