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
Il n'y aura plus de ticks avec l'heure connue la plus récente.
Le OnTimer en millisecondes garantit que tous les ticks antérieurs à cet événement de temporisation se sont écoulés. Autrement dit, les ticks sont à jour pour tous les symboles.
Si l'on parle du fait qu'un indicateur « espion » puisse, pour des raisons techniques, retenir un « ancien » tick et l'envoyer après un tick plus récent concernant un autre instrument, alors cela peut probablement se produire. Sinon, je ne vois pas de problèmes directement dans le code.
Je ne pense pas que le minuteur garantisse davantage que tous les ticks se soient écoulés AVANT le nouvel « événement » (compte à rebours d’une unité de temps). Le minuteur fonctionne en heure locale, tandis que les horodatages des ticks indiquent l'heure du serveur. Il est donc préférable de ne pas s'appuyer sur le minuteur pour synchroniser les instruments.
D'accord, pour les ticks, c'est acceptable, compte tenu de la complexité de la synchronisation, même si nous pouvons définir un intervalle de temps en millisecondes et ajuster les ticks en fonction de celui-ci.
Mais c'est la même chose pour les cours d'ouverture, alors que l'heure d'ouverture est identique pour tous les symboles.
Et à cause de ce comportement, il est impossible de tester correctement un certain nombre de systèmes.
Illustration du problème.
La capture d'écran présente toutes les données nécessaires pour reproduire le phénomène sur MetaQuotes-Demo. On voit clairement que les ticks ne sont pas synchronisés via OnTick, alors qu'ils le sont via OnTimer (qui est terriblement lent).
Avec OnTick, les ticks ne sont pas synchronisés, tandis qu'avec OnTimer (qui ralentit considérablement le système), ils le sont.
Il semble que la seule façon d’accélérer les calculs en mode synchronisé soit le mode mathématique, à l’instar d’EAToMath.
Ou bien enregistrer à l'avance dans un fichier ces données issues d'un passage unique.
Et dans votre expert, utiliser les données de ce fichier pour la synchronisation dans OnTick. Cela fonctionnera rapidement et correctement.
Illustration du problème.
La capture d'écran contient toutes les données nécessaires pour reproduire le phénomène sur MetaQuotes-Demo. On voit clairement que les ticks ne sont pas synchronisés via OnTick, alors qu'ils le sont via OnTimer (qui ralentit considérablement le système).
Vous avez donc utilisé votre code avec une condition d’entrée de position basée sur « == ». J’ai indiqué plus haut que la condition devait être strictement « > », sans l’opérateur d’égalité. Pour effectuer des transactions synchronisées aux derniers cours connus jusqu’au 01/10/2025 à 01:00:00.081 sur tous les instruments, vous devez commencer à surveiller les ticks avant cette date, c’est-à-dire prendre comme constante de démonstration, par exemple, >1759280400080. Pour chaque algorithme, il faut modifier la logique : il ne suffira pas de simplement remplacer un type de gestionnaire par un autre.
PS. Par « synchronisation », j’entends le trading aux derniers cours connus. Pour une synchronisation au milliseconde près, des vérifications supplémentaires sont bien sûr nécessaires, mais la probabilité que de telles situations se produisent (coïncidence des ticks de différents instruments au milliseconde près) est faible, ce qui implique de passer à côté de signaux potentiels. Je ne suis pas certain qu’une telle synchronisation présente un intérêt pratique.
Pour effectuer des transactions synchronisées aux derniers cours connus jusqu’au 01/10/2025 à 01:00:00.081 sur tous les instruments, vous devez commencer à surveiller les ticks avant cette date, c'est-à-dire prendre comme constante de démonstration, par exemple, >1759280400080.
La méthode la plus simple pour la synchronisation consiste à créer un ensemble composé des durées des ticks des symboles utilisés.
Il est difficile de réaliser cette synchronisation à la volée, en un seul passage.
La difficulté réside dans l'incertitude quant au décalage. On ne sait pas quel symbole sera le de référence.
Je suis prêt à examiner votre proposition dans le code.
Pour un cas de test complet, j’aimerais bien comprendre le problème concret : est-ce qu’on négocie uniquement sur des ticks dont l’heure coïncide à la milliseconde près ?
Pour un exemple artificiel comportant une seule et unique transaction à un moment connu à l'avance, avec des ticks synchronisés sur tous les instruments, on pourrait imaginer un algorithme optimal artificiel, mais à quoi bon ?
Mais les cours d'ouverture sont les mêmes, alors que l'heure d'ouverture est identique pour tous les titres.
Il faudrait préciser l'énoncé. En ce qui concerne les cours d'ouverture, si l'algorithme exige la présence de barres pour tous les symboles, on attend que iTime(,,0) coïncide pour tous les symboles. Pour les barres, cette approche ne pose généralement pas de problème logique, car les barres (même en M1) sont rarement absentes ; en revanche, pour les secondes et les intervalles plus courts, les décalages de synchronisation peuvent être fréquents. Que faire dans ces cas-là ?
Je pense qu’en pratique, il convient de considérer comme synchronisation la présence de n’importe quel cours datant de moins d’un certain délai d’expiration défini, plutôt que l’égalité stricte des horodatages des ticks.
Il faudrait préciser le problème. En ce qui concerne les cours d'ouverture, si l'algorithme exige la présence de barres pour tous les symboles, nous attendons que la valeur de iTime(,,0) coïncide pour tous les symboles. Dans cette approche, il n'y a généralement pas de problème logique concernant les barres, car celles-ci (même en M1) sont rarement absentes
Il s’agit ici du mode « testeur » aux cours d’ouverture.
: pour les secondes et les intervalles plus courts, les décalages de synchronisation peuvent être fréquents. Que faire dans ces cas-là ?
Utiliser la dernière valeur connue.