Symboles personnalisés. Erreurs, bogues, questions, suggestions. - page 25

 
jaffer wilson:

Cela ne fonctionne pas de mon côté.

Voici les détails de ma version MT5.


Essayez de modifier l'erreur de temps du système.

//+------------------------------------------------------------------+
//|                                           SpeedupSystemTimer.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property description "Уменьшает погрешность системного таймера до 1 ms"

#import "winmm.dll"
   int timeBeginPeriod(uint per);
#import

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
void OnInit()
{
   timeBeginPeriod(1);
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
{
   ExpertRemove();
}
//+------------------------------------------------------------------+
 
Roman :


Essayez de modifier l'erreur de temps du système.

J'ai essayé. Veuillez vérifier le dossier. Et la vidéo. Vous le découvrirez. Je demande même au modérateur de voir le fichier joint.

La même chose se produit avec le personnage personnalisé.

Dossiers :
 
jaffer wilson:

J'ai essayé. Veuillez vérifier le dossier. Et la vidéo. Vous allez le découvrir. Je demande même au modérateur de voir le fichier joint.

La même chose se produit avec le personnage personnalisé.

Lire dans la documentation sur TimeCurrent()

 
Roman :

Lisez dans la documentation à propos de TimeCurrent()

Je suppose que vous n'avez pas exécuté le fichier. S'il vous plaît, vous pouvez l'exécuter une fois de votre côté. Mon programme utilise TimeCurrent () pour obtenir l'heure actuelle lorsque les secondes deviennent égales ou inférieures à zéro. Ceci appellera la fonction SetTime ().

Ensuite, si le temps restant est de 50 secondes, il ne vérifiera pas TimeCurrent (), il diminuera les secondes. Je pense que cela devrait être visible lorsque OnTimer () est appelé. Mais il n'est pas visible. Veuillez le vérifier une fois.

 
jaffer wilson:

Je suppose que vous n'avez pas exécuté le fichier. S'il vous plaît, vous pouvez l'exécuter une fois de votre côté. Mon programme utilise TimeCurrent () pour obtenir l'heure actuelle lorsque les secondes deviennent égales ou inférieures à zéro. Ceci appellera la fonction SetTime ().

Ensuite, si le temps restant est de 50 secondes, il ne vérifiera pas TimeCurrent (), il diminuera les secondes. Je pense que cela devrait être visible lorsque OnTimer () est appelé. Mais il n'est pas visible. Veuillez le vérifier une fois.

J'ai exécuté votre fichier, mais les gestionnaires dans votre code ont été priorisés.
Les deux indicateurs fonctionnent de manière presque identique, étant donné les spécificités de TimeCurrent()


Ajouté.
Je ferais mieux d'attirer l'attention des développeurs sur le délai OnTimer() de ce post.

Dossiers :
 
Roman:

Je préfère attirer l'attention des développeurs sur le délai OnTimer() de ce post.

La précision de la minuterie en millisecondes n'est pas garantie. Et ne sera pas garanti en raison des limitations matérielles.
 
Roman:

Je préfère attirer l'attention des développeurs sur le délai OnTimer() de ce post.

16 millisecondes, c'est la précision de tout ce qui contient des millisecondes. Ce sujet a déjà été abordé quelque part.
Avec les microsecondes, la précision est bonne, mais la vitesse est plus lente.
 
Nikolai Semko:
16 millisecondes, c'est la précision de tout ce qui contient des millisecondes. Ce sujet a déjà été abordé quelque part.
Avec les microsecondes, la précision est bonne, mais la vitesse est plus lente.

Il est clair que la précision du système est de ~16 millisecondes.
Dans l'exemple, il a été fixé à un niveau supérieur à 16, EventSetMillisecondTimer(20) ;
C'est le gestionnaire OnTimer(), qui fonctionne par incréments de 20 millisecondes.
Mais le compteur qui est affiché dans le commentaire semble se bloquer pendant plusieurs millisecondes.
Je ne sais pas pourquoi - soit le gestionnaire OnTimer() ralentit, soit le traitement de la file d'attente des événements graphiques.

 
Roman:

Il est clair que la précision du système est de ~16 millisecondes.
Dans l'exemple, il a été fixé à un niveau supérieur à 16, EventSetMillisecondTimer(20) ;
C'est le gestionnaire OnTimer(), qui fonctionne par incréments de 20 millisecondes.
Mais le compteur qui est affiché dans le commentaire semble se bloquer pendant plusieurs millisecondes.
Je ne sais pas pourquoi - soit le gestionnaire OnTimer() ralentit, soit le traitement de la file d'attente des événements graphiques.

Trouvé

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Comment créer une fonction pour traiter chaque milliseconde ?

Nikolai Semko, 2018.09.13 04:45

Oui, c'est comme ça. (seulement pas la fréquence, mais la période. Fréquence maximale = 64 Hz)

Juste pour ajouter une précision :

Le pas de période pour le timer = 15,625 millisecondes.

C'est-à-dire qu'avec la commande EventSetMillisecondTimer(1) et avec la commande EventSetMillisecondTimer(10) la période réelle sera de 15.625 ms.

avec la commande EventSetMillisecondTimer(21) et avec la commande EventSetMillisecondTimer(30), la période réelle sera de 31,25 ms.

Avec la commande EventSetMillisecondTimer(95) et la commande EventSetMillisecondTimer(105), la période réelle sera de 109,375 ms.

etc.

GetTickCount() change toutes les 1/(2^6)=1/64 secondes (15625 microsecondes).
 
Nikolai Semko:

trouvé

La valeur de GetTickCount() change toutes les 1/(2^6)=1/64 secondes (15625 microsecondes).

Merci, maintenant je vois la raison.
Changement d'étape de la minuterie du système, toujours un multiple de 15.625

Ajouté.
Mais j'ai modifié la période du timer système win api function timeBeginPeriod(1)
c'est-à-dire que dans idea le timer système est maintenant incrémenté de 1 milliseconde.
Et le pas de la minuterie du système devrait être de 1 milliseconde, non ?
Pourquoi le compteur dans le commentaire reste-t-il figé ?