
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
Si vous montriez un morceau de code qui génère l'entrée, vous pourriez trouver l'erreur de logique plus rapidement.
Mais il devrait y avoir une solution communément acceptée dans MQL, non ? Comment "synchroniser" l'ouverture des barres pour différents symboles ? Eh bien, apparemment, nous devrions attendre l'ouverture d'une nouvelle barre pour tous les symboles utilisés. Mais comment le faire correctement ?
Il n'y a pas besoin de synchronicités et autres inventions de vélo. Tout a déjà été inventé il y a longtemps. La présence d'une nouvelle barre formée est vérifiée uniquement pour l'instrument sur lequel l'Expert Advisor est installé à l'arrivée du premier tick. Et l'événement start() se déclenche également uniquement sur ce symbole à l'arrivée d'un nouveau tick. Je vous ai donné un morceau de code qui effectue cette vérification afin que la position suivante, en cas de requotes, ne soit pas ouverte sur la barre suivante et qu'après un échec, elle tente de s'ouvrir sur la même barre. Tout fonctionne bien pour moi, tant en mode simple qu'en mode multidevise. Dans le cas des requotes, la transaction est ouverte sur la même barre, mais seulement avec un certain retard, et donc pas toujours au prix d'ouverture de la barre, mais avec un certain décalage. C'est-à-dire qu'il y aura des différences avec le testeur, mais pas dans les barres, mais dans le prix d'ouverture.
Yuri, le début d'une nouvelle heure arrivera même si le tic-tac n'est pas venu !
Nous allons commencer une nouvelle heure même si la tique n'est pas venue !
Il est possible de calculer une nouvelle barre par un tick dans une nouvelle barre de N'IMPORTE QUEL instrument.
LeoV attend un nouveau tick de manière synchrone pour toutes les paires utilisées.
YuraZ a écrit (a) :
franchement et ce n'est pas vraiment joli... Si la tique n'est pas venue pour ces paires et que vous allez encore les manquer
Si le tick n'est pas arrivé, vous ne pouvez pas placer un ordre immédiatement, sauf si vous utilisez un script,
Et seulement si les tiques arrivent aux sociétés de courtage et qu'elles ne les transmettent pas à votre terminal (dans la journée).
C'est pourquoi, lorsque j'implémentais un Expert Advisor multi-devises, je réalisais une State Machine par Miles (ou Moore),
qui surveille les états ouverts d'ordre pour les paires nécessaires. Bien sûr, ce n'était pas toujours possible
Naturellement, il n'était pas toujours possible d'ouvrir au bon prix, mais cette approche garantissait que les ordres seraient EXACTEMENT ouverts.
facile ! il est possible de passer un ordre :-) si le tick n'est pas venu
Réfléchissez-y ! Si vous ne le faites pas, je vais vous donner un indice !
Habituellement, avec les EA multidevises, la situation est telle que s'il n'y a pas de garantie à 100% de l'arrivée de l'ordre...
alors la logique du travail du conseiller sera détruite.
A propos, n'oubliez pas que votre EA travaille sur les ticks de la paire sur laquelle il plane,
Ainsi, même s'il y avait un tick sur une autre paire, et qu'il n'y avait pas de tick sur la paire avec votre EA attaché,
alors la synchronisation sera interrompue.
N'oubliez pas des choses aussi désagréables que la perte de connexion avec les sociétés de courtage et les requotes (si vous avez affaire à un compte réel).
À propos, sur les micro-réels, j'ai souvent des situations où un ordre n'est jamais passé avant que le terminal ne soit rechargé.
Même en mode manuel. Ils attendent quelque chose, ils attendent...
C'est pourquoi j'ai abandonné depuis longtemps les systèmes basés sur les ordres par paire.
C'est trop gênant.
YuraZ a écrit (a) :
franchement et ce n'est pas vraiment joli... Si la tique n'est pas venue pour ces paires et que vous allez encore les manquer
Si le tick n'est pas arrivé, vous ne pouvez pas placer un ordre immédiatement, sauf si vous utilisez un script,
Et seulement si les tiques arrivent aux sociétés de courtage et qu'elles ne les transmettent pas à votre terminal (dans la journée).
C'est pourquoi, lorsque j'implémentais un Expert Advisor multi-devises, je réalisais une State Machine par Miles (ou Moore),
qui surveille les états ouverts d'ordre pour les paires nécessaires. Bien sûr, ce n'était pas toujours possible
Naturellement, je n'étais pas toujours en mesure d'ouvrir au prix nécessaire, mais cette approche garantissait que les ordres seraient TOUJOURS ouverts.
facile ! il est possible de passer un ordre :-) si le tick n'est pas venu
Réfléchissez-y ! Si vous ne le faites pas, je vais vous donner un indice !
Habituellement, avec les EA multidevises, la situation est telle que s'il n'y a pas de garantie à 100% de l'arrivée de l'ordre...
alors la logique du travail du conseiller sera détruite.
A propos, n'oubliez pas que votre EA travaille sur les ticks de la paire sur laquelle il plane,
Ainsi, même s'il y avait un tick sur une autre paire, et qu'il n'y avait pas de tick sur la paire avec votre EA attaché,
alors la synchronisation sera interrompue.
N'oubliez pas des choses aussi désagréables que la perte de connexion avec les sociétés de courtage et les requotes (si vous avez affaire à un compte réel).
À propos, sur les micro-réels, j'ai souvent des situations où un ordre n'est jamais passé avant que le terminal ne soit rechargé.
Même en mode manuel. Ils attendent quelque chose, ils attendent...
C'est pourquoi j'ai abandonné depuis longtemps les systèmes basés sur les ordres par paire.
Douloureusement gênant.
Vous vouliez probablement écrire TIC... mais vous venez de rédiger un ordre.
Vous comprenez qu'un EA peut entrer sur EURUSD et utiliser USDCHF.
Il suffit d'écrire
LevelOpenBUY = MarketInfo("USDCHF",MODE_ASK) ;
... = OrderSend ("USDCHF",Lot, LevelOpenBUY, ...)
Un morceau de code qui fonctionne
OpenLevel = MarketInfo( sSymbol, MODE_BID ) ;
si ( TDARELOCK == 0 )
ticket=OrderSend( sSymbol,OP_SELL,Lots,OpenLevel,3,0,0,sComment,mMagic,0,Red) ;
----
Et le TIC pour USDCHF peut ne pas être suffisant pour obtenir un tick pour n'importe quelle paire.
J'espère que MQL5 n'aura pas besoin de recevoir des ticks pour que le programme fonctionne.
ils ont promis de faire des événements, ce qui signifie que n'importe quel morceau de code peut être exécuté sur un événement
----
la deuxième question concernant les gels dans le terminal - ce problème peut être résolu en redémarrant - ceci est plus probable pour les développeurs.
J'ai vu cela aussi
Cela peut également être corrigé et il y a un exemple ici sur le forum.
---
donc si vous envoyez un ordre mais qu'il ne s'ouvre pas, vous pouvez envoyer ce bout de code pour déterminer
YuraZ писал (а):
Vous vouliez probablement écrire TIC... mais vous avez écrit l'ordre.
Je faisais référence au fait de passer une commande à 100%.
YuraZ a écrit (a) :
Vous vouliez probablement écrire TIC... Vous devez avoir voulu dire TIC
Je faisais référence au fait de passer une commande à 100%.
Mais vous comprenez que ce n'est pas seulement dans un système multi-devises
Vous n'obtenez pas une garantie de 100% dans un conseiller expert ordinaire... jamais de garantie à 100%.
parce qu'il y a des facteurs
INTERNET
VOTRE FOURNISSEUR
VOTRE FOURNISSEUR DC
votre matériel
Équipement à courant continu
etc.
---
c'est à ça que servent les arrêts... ou un ordinateur de rechange avec un fournisseur différent (si le problème est de votre côté)
---
mais s'il s'agit d'une erreur dans la logique du programme !!! alors c'est une autre affaire et elle est traitée
---
et la logique ne devrait pas s'effondrer parce que l'entrée n'a pas eu lieu à 15h00 mais à 15h05 ou 15h02.
c'est exactement ce que nous voyons avec l'auteur du fil de discussion ! il essaie d'entrer à 15:00:00:00
( les chiffres sont arbitraires)
Il ne fait pas de pips, donc entrer à 15:00 ou 15:01 - 15:07 ne devrait pas lui poser trop de problèmes.
C'est ce que je dis : on ne peut pas être lié strictement au début d'une mesure pour tous les symboles nécessaires - il suffit d'obtenir le début d'une mesure à n'importe lequel d'entre eux.
YuraZ a écrit (a) :
franchement et ce n'est pas vraiment joli... Si la tique n'est pas venue pour ces paires et que vous allez encore les manquer
Si le tick n'est pas arrivé, vous ne pouvez pas placer un ordre immédiatement, sauf si vous utilisez un script,
Et seulement si les tiques arrivent aux sociétés de courtage et qu'elles ne les transmettent pas à votre terminal (dans la journée).
C'est pourquoi, lorsque j'implémentais un Expert Advisor multi-devises, je réalisais une State Machine par Miles (ou Moore),
qui surveille les états ouverts d'ordre pour les paires nécessaires. Bien sûr, ce n'était pas toujours possible
Naturellement, je n'étais pas toujours en mesure d'ouvrir au prix nécessaire, mais cette approche garantissait que les ordres seraient TOUJOURS ouverts.
facile ! il est possible de passer un ordre :-) si le tick n'est pas venu
Réfléchissez-y ! Si vous ne le faites pas, je vais vous donner un indice !
Habituellement, avec les EA multidevises, la situation est telle que s'il n'y a pas de garantie à 100% de l'arrivée de l'ordre...
alors la logique du travail du conseiller sera détruite.
A propos, n'oubliez pas que votre EA travaille sur les ticks de la paire sur laquelle il plane,
Ainsi, même s'il y avait un tick sur une autre paire, et qu'il n'y avait pas de tick sur la paire avec votre EA attaché,
alors la synchronisation sera interrompue.
N'oubliez pas des choses aussi désagréables que la perte de connexion avec les sociétés de courtage et les requotes (si vous avez affaire à un compte réel).
À propos, sur les micro-réels, j'ai souvent des situations où un ordre n'est jamais passé avant que le terminal ne soit rechargé.
Même en mode manuel. Ils attendent quelque chose, ils attendent...
C'est pourquoi j'ai abandonné depuis longtemps les systèmes basés sur les ordres par paire.
C'est trop gênant.
Vous vouliez probablement écrire TIC... mais vous venez de rédiger un ordre.
Si votre Expert Advisor est positionné sur l'EURUSD, vous comprenez qu'il peut entrer par l'USDCHF.
il suffit d'écrire
LevelOpenBUY = MarketInfo("USDCHF",MODE_ASK) ;
... = OrderSend ("USDCHF",Lot, LevelOpenBUY, ...)
Un morceau de code qui fonctionne
OpenLevel = MarketInfo( sSymbol, MODE_BID ) ; if ( TDARELOCK == 0 ) ticket=OrderSend ( sSymbol,OP_SELL,Lots,OpenLevel,3,0,0,0,sComment,mMagic,0,Red) ;
----
le TIC pour USDCHF peut ne pas être suffisant pour obtenir un tick pour n'importe quelle paire.
J'espère que dans MQL5, il ne sera pas nécessaire de recevoir des ticks pour que le programme fonctionne.
ils promettent de créer des événements, ce qui signifie que n'importe quel morceau de code peut être écrit sur un événement.
----
la deuxième question concernant les blocages dans le terminal - ce problème peut être résolu en redémarrant - il est plus probable que cette question soit adressée aux développeurs.
J'ai vu ça aussi -
ceci est également traité et il y a un exemple ici sur le forum
---
donc si vous envoyez un ordre mais qu'il ne s'ouvre pas, vous pouvez bien sûr envoyer un morceau de code similaire pour déterminer
Le redémarrage du terminal est une bonne chose, mais que faire avec les autres conseillers experts qui sont suspendus dans d'autres fenêtres ?
et leur logique de fonctionnement est naturellement différente et ne réagit pas bien aux rechargements fréquents car les valeurs des variables se perdent,
que nous avons accumulé depuis si longtemps.
Même si le conseiller expert est basé sur l'EURUSD, vous réalisez qu'il peut entrer par l'USDCHF.
Il suffit d'écrire
LevelOpenBUY = MarketInfo("USDCHF",MODE_ASK) ;
... = OrderSend ("USDCHF",Lot, LevelOpenBUY, ...)
Mais si sur la paire principale, le dernier tick de l'heure précédente est arrivé, par exemple, à 7.50, et le premier tick de l'heure est arrivé,
à 8 h 10, et sur le symbole secondaire, le premier tic-tac de l'heure est arrivé à 8 h 00,
alors il est difficile de s'attendre à ce que le conseiller sur la paire de devises majeure passe un ordre sur la paire mineure.
à 8 heures, au mieux à 8 heures 10.
Le cas où l'EA fonctionne comme un script, c'est-à-dire qu'il ne laisse pas de répit au système, il se contente de battre en brèche,
Je ne le considère pas malgré les tics. Il est préférable d'écrire un scénario.
YuraZ a écrit (a) :
franchement et ce n'est pas vraiment joli... Si la tique n'est pas venue pour ces paires et que vous allez encore les manquer
Si le tick n'est pas arrivé, vous ne pouvez pas placer un ordre immédiatement, sauf si vous utilisez un script,
Et seulement si les tiques arrivent aux sociétés de courtage et qu'elles ne les transmettent pas à votre terminal (dans la journée).
C'est pourquoi, lorsque j'implémentais un Expert Advisor multi-devises, je réalisais une State Machine par Miles (ou Moore),
qui surveille les états ouverts d'ordre pour les paires nécessaires. Bien sûr, ce n'était pas toujours possible
Naturellement, je n'étais pas toujours en mesure d'ouvrir au prix nécessaire, mais cette approche garantissait que les ordres seraient TOUJOURS ouverts.
facile ! il est possible de passer un ordre :-) si le tick n'est pas venu
Réfléchissez-y ! Si vous ne le faites pas, je vais vous donner un indice !
Habituellement, avec les EA multidevises, la situation est telle que s'il n'y a pas de garantie à 100% de l'arrivée de l'ordre...
alors la logique du travail du conseiller sera détruite.
A propos, n'oubliez pas que votre EA travaille sur les ticks de la paire sur laquelle il plane,
Ainsi, même s'il y avait un tick sur une autre paire, et qu'il n'y avait pas de tick sur la paire avec votre EA attaché,
alors la synchronisation sera interrompue.
N'oubliez pas des choses aussi désagréables que la perte de connexion avec les sociétés de courtage et les requotes (si vous avez affaire à un compte réel).
À propos, sur les micro-réels, j'ai souvent des situations où un ordre n'est jamais passé avant que le terminal ne soit rechargé.
Même en mode manuel. Ils attendent quelque chose, ils attendent...
C'est pourquoi je refuse depuis longtemps les systèmes basés sur les ordres jumelés.
C'est trop gênant.
Vous vouliez probablement écrire TIC... mais vous venez de rédiger un ordre.
Si votre Expert Advisor est positionné sur l'EURUSD, vous comprenez qu'il peut entrer par l'USDCHF.
il suffit d'écrire
LevelOpenBUY = MarketInfo("USDCHF",MODE_ASK) ;
... = OrderSend ("USDCHF",Lot, LevelOpenBUY, ...)
Un morceau de code qui fonctionne
OpenLevel = MarketInfo( sSymbol, MODE_BID ) ; if ( TDARELOCK == 0 ) ticket=OrderSend ( sSymbol,OP_SELL,Lots,OpenLevel,3,0,0,0,sComment,mMagic,0,Red) ;
----
Le TIC pour USDCHF peut ne pas être suffisant pour obtenir un tick pour n'importe quelle paire.
J'espère que dans MQL5, il ne sera pas nécessaire de recevoir des ticks pour que le programme fonctionne.
ils promettent de créer des événements, ce qui signifie que n'importe quel morceau de code peut être écrit sur un événement.
----
la deuxième question concernant les blocages dans le terminal - ce problème peut être résolu en redémarrant - il est plus probable que cette question soit adressée aux développeurs.
J'ai vu ça aussi -
ceci est également traité et il y a un exemple ici sur le forum
---
ainsi, si vous envoyez un ordre mais qu'il ne s'ouvre pas, vous pouvez bien sûr envoyer un morceau de code similaire afin de déterminer
Le redémarrage du terminal est une bonne chose, mais que faire avec les autres conseillers experts qui sont suspendus dans d'autres fenêtres ?
et leur logique de fonctionnement est naturellement différente et ne réagit pas bien aux rechargements fréquents car les valeurs des variables se perdent,
que nous avons accumulé depuis si longtemps.
Même si le conseiller expert est basé sur l'EURUSD, vous réalisez qu'il peut entrer par l'USDCHF.
Il suffit d'écrire
LevelOpenBUY = MarketInfo("USDCHF",MODE_ASK) ;
... = OrderSend ("USDCHF",Lot, LevelOpenBUY, ...)
Mais si sur la paire principale, le dernier tick de l'heure précédente est arrivé, par exemple, à 7.50, et le premier tick de l'heure est arrivé,
à 8 h 10, et sur le symbole secondaire, le premier tic-tac de l'heure est arrivé à 8 h 00,
alors il est difficile de s'attendre à ce que l'EA qui se trouve sur la paire de devises majeure passe un ordre sur la paire mineure.
à 8 heures, au mieux à 8 heures 10.
Le cas où l'EA fonctionne comme un script, c'est-à-dire qu'il ne laisse pas de répit au système, il se contente de battre en brèche,
Je ne le considère pas malgré les tics. Il serait préférable d'écrire un scénario.
1 et vous pensez que Reconnect appelle la fonction Init () ? et redémarre l'EA ?
Vous avez tort...
En outre, il est judicieux d'économiser les variables calculées et précieuses
Si je n'ai pas de code complexe, je les stocke dans une VARIABLE GLOBALE.
si le code est complexe je l'écris sur le disque et le lis au redémarrage - si le redémarrage est une erreur je le restaure simplement
d'ailleurs, il est assez facile de déterminer si c'est ou non une erreur.
---
2 S'il y a une nouvelle heure pour une paire de devises - pas de tic pour les autres paires - alors peu importe le moment où il y a un tic.
On peut considérer qu'une NOUVELLE BAR - ou plus précisément une nouvelle heure - est arrivée.
et il est donc possible de compter les paires tardives par CLOSE en pensant qu'elles sont également couvertes.
les ticks viendront plus tard et la barre sera décalée dans le temps ! !! mais la véritable Heure est passée.
---
il est possible de passer un ordre sur une paire de devises sans tick - vous savez comment faire.
je ne dis pas qu'il sera exposé à 8h00 - ( chiffre conventionnel )
il peut être mis en place dès qu'un NOUVEAU TICK arrive sur une nouvelle barre sur n'importe quelle paire de devises.
---
>o si le dernier tick de l'heure précédente sur la paire principale est arrivé, par exemple, à 7.50, et que le premier tick de l'heure est arrivé ,
>Sur une paire secondaire, le premier tick de l'heure est arrivé à 8h00,
>Il est difficile de s'attendre à ce qu'un EA qui plane sur la paire de devises principale passe un ordre sur une paire secondaire.
>à 8h00, ou au mieux à 8h10.
en travaillant en mode multidevise, il n'est pas nécessaire de compter le temps de la paire principale ou non
il vous suffit d'attraper un tick du début d'une nouvelle barre pour n'importe quelle paire de devises - et de calculer les indicateurs par CLOSE, et non par clôture de barre.
et dans - dehors.
car l'entrée se fera sur le tick d'une nouvelle barre de n'importe quelle paire contrôlée car ce sera un signal pour une nouvelle heure ! (dans ce cas, une nouvelle heure)
si vous travaillez en multidevise, vous n'avez pas besoin de chronométrer la barre principale ou pas la barre principale
il est nécessaire d'attraper un tick du début d'une nouvelle barre - et de calculer les indicateurs par CLOSE, et non par la clôture de la barre.
et dans - dehors
car l'entrée se fera précisément sur le tick d'une nouvelle barre de n'importe quelle paire contrôlée car ce sera un signal pour une nouvelle heure ! (dans ce cas, une nouvelle heure)
Plus comme cela.......
vous n'avez pas besoin de chronométrer la paire de devises principale ou pas.
vous devez attraper le tick d'une nouvelle barre pour n'importe quelle paire de devises - et calculer les indicateurs par CLOSE et non par la clôture de la barre.
et dans - hors
car l'entrée se fera précisément sur le tick d'une nouvelle barre de n'importe quelle paire contrôlée car ce sera un signal pour une nouvelle heure ! (dans ce cas, une nouvelle heure)
Plus comme cela.......
Retravaillez le conseiller expert selon cette logique, et la probabilité du PROBLÈME sera réduite de plusieurs fois.
si vous ajoutez la prise d'une nouvelle heure sur TOUTES les paires qui sont dans une fenêtre de revue de marché surtout sur les yens alors pratiquement vous ne devriez pas avoir d'échecs.
1 Il suffit de ne pas attraper la nouvelle barre en synchronisation sur toutes les paires ! !!
2 Attraper une nouvelle barre sur l'une des paires contrôlées, commencer le recalcul de toutes les paires requises sur la fermeture actuelle ...
( en passant, vous devrez peut-être refaire certains de VOS indicateurs )
décider d'entrer - sortir - ou continuer à attendre
Retravailler le conseiller expert selon cette logique, la probabilité d'un problème sera réduite à certains moments
si vous ajoutez la prise d'une nouvelle heure sur TOUTES les paires qui sont dans la fenêtre d'aperçu du marché, en particulier sur les yens, alors pratiquement vous ne devriez pas avoir d'échecs.
1 juste ne pas attraper une nouvelle barre en synchronisation sur toutes les paires ! !!
2 Attrapez une nouvelle barre sur l'une des paires contrôlées, commencez le recalcul de toutes les paires nécessaires sur le CLOSE actuel ...
( à propos, certains de VOS indicateurs peuvent avoir besoin d'être recalculés )
et prendre la décision d'entrer - de sortir - ou de continuer à attendre
Merci veri Macha)))))))))))))