Indiquer une nouvelle barre - page 4

 
Donald Gibson:

Enhanced-MQL4 ?

Jamais entendu parler de cela.


Moi non plus depuis hier ;) Et le nom correct semble être"Updated MQL4". MQ écrit :

(...) A partir de la build 600, le langage de programmation MQL4 a été complètement révisé pour atteindre le niveau de MQL5- maintenant vous pouvez développer des robots de trading en MQL4/5 en utilisant l'environnement de développement unifié MetaEditor, un style unique, des bibliothèques et des outils de débogage.

(...) Par conséquent, nous avons décidé d'y implémenter le maximum de fonctions et de caractéristiques du langage MQL5 tout en préservant les fonctionnalités de MQL4. En d'autres termes, toutes les fonctions puissantes de MQL5, y compris ООP et le compilateur de code natif, seront disponibles dans MQL4. (...)

Pour y parvenir, nous avons développé un compilateur unifié qui supporte automatiquement les deux langages MQL4 et MQL5.(...)

Le problème dans la définition est le mot "langages". Le langage est MQL, de la même manière que C++ est un langage et Basic est un langage. Updated-MQL4/MQL5 sont juste des mods de MQL spécifiques à la plateforme, ni plus ni moins, ce qui fait que la comparaison entre MQL4 (natif) et Updated-MQL4 est à peu près la même qu'avec C et C++. Et la migration de MQL4.com vers MQL5.com a rendu la confusion parfaite. Comme le montrent ces messages, la plupart des gens n'associent pas la POO à MQL4, comme je l'ai fait. Pour moi, cela a toujours été MQL5 qui supporte les deux plateformes, MT4 et MT5.

Mais quoi qu'il en soit, cela fonctionne très bien et MQLWhatever est de loin la meilleure interface en comparaison avec tous les autres trucs merdiques qui existent.

 

@Lorentzos Roussos

Alain can correct me on this but you may find gaps in instances where on the time horizon of a bar there where no ticks , so no bar will be in place

Upppsss ... Je n'ai jamais vu un tel bavardage. (Ce qui ne veut rien dire).

J'utilise mon "NewBar-indicator" pour tirer les stops automatiquement sur le haut ou le bas de la barre précédente.

(En fait, c'est un peu plus difficile, car je considère "Innenstaebe et Aussenstaebe" (eng. "mouvements intérieurs et extérieurs" ? ??). Aucune idée de la traduction correcte.

Mais je vais l'utiliser uniquement sur les marchés liquides qui ont au moins vingt - jusqu'à quelques centaines de ticks par minute.

Je ne pense pas pouvoir trouver une période de dix minutes sans tick.

Quoi qu'il en soit, le programme devrait être capable de gérer cela.

Merci !

Willbur

 
Willbur:

@Lorentzos Roussos

Upppsss ... Je n'ai jamais vu un tel bavardage. (Ce qui ne veut rien dire).

J'utilise mon "NewBar-indicator" pour tirer les stops automatiquement sur le haut ou le bas de la barre précédente.

(En fait, c'est un peu plus difficile, car je considère "Innenstaebe et Aussenstaebe" (eng. "mouvements intérieurs et extérieurs" ? ??). Aucune idée de la traduction correcte.

Mais je ne l'utiliserai que sur les marchés liquides qui ont au moins vingt - jusqu'à quelques centaines de ticks par minute.

Je ne pense pas pouvoir trouver une période de dix minutes sans tick.

Quoi qu'il en soit, le programme devrait être capable de gérer cela.

Merci !

Willbur

Vous utilisez iTime, s'il n'y a pas de nouvelle barre, il ne se déclenchera pas de toute façon, vous êtes en sécurité.
 
vous utilisez iTime , s'il n'y a pas de nouvelle barre il ne se déclenchera pas de toute façon.vous êtes en sécurité <br / translate="no">

Qu'est-ce que vous voulez dire par "Vous utilisez iTime" ? J'ai compris que "iTime" est juste une variable dans votre programme - vous pouvez la nommer "Bert" ou "Clarly" si vous voulez ? !?

- - - - -

Aujourd'hui, j'ai fait quelques tests. Et j'ai trouvé certains des écarts que vous avez mentionnés.

Par exemple S&P500 à 20:34 il y a une barre, pour 20:35 et 20:36 je n'ai reçu aucun ticks et aucune barre du serveur (ActiveTrades). Les ticks suivants sont arrivés à 20:37.

Par la suite, il n'y a pas de barres dans le graphique pour ces périodes. (voir le graphique M1 ci-joint).

Je n'ai pas vérifié, mais je pense qu'il n'y a pas non plus de barres dans la fonction CopyRates() pour cette heure.



Je pense que vous devriez vérifier votre code à ce stade.

Je devine, il va indiquer les trois premiers tick de la barre 20:37 comme de nouvelles barres.

(TimeCurrent() saute de 20:34 à 20:37 ! Vous devez ajouter PeriodeSeconds() trois fois pour y arriver).

void OnTick()  
{
//---   if(TimeCurrent()>=projection)   
    {Print("New Bar "+TimeToString(projection,TIME_DATE|TIME_MINUTES));   
     projection=projection+PeriodSeconds();   
    }

Willbur


 

Bonjour à tous,

Au cas où quelqu'un cherche encore...voici un extrait de mon code pour s'assurer qu'une seule transaction est ouverte par barre.

  if (iBars(Symbol(),0) == BarsCurr)DisableTrading = 1;
  
  for(i=0;i<OrdersTotal();i++)
  {
  if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == True && OrderMagicNumber() == MagicNumber) DisableTrading = 1;
  }

  for(i=OrdersTotal();i>0;i--)
  {
  if (OrderSelect (i,SELECT_BY_POS,MODE_HISTORY) == True && OrderMagicNumber() == MagicNumber)
  {
  if ((OrderClosePrice() >= Open[0] && OrderClosePrice() <= Close[0]) && (OrderOpenPrice() >= Open[0] && OrderOpenPrice()<= Close[0]))
  {
  DisableTrading = 1;
  }
   }
      }

Le ibars peut être remplacé par bars et le disabletrading = 1 signifie ne rien faire. La partie barres peut être mieux comprise en utilisant ce qui est affiché normalement. Mettez BarsCurr = 0 à la partie initialisation et BarsCurr = Bars à la partie ordre d'achat/vente de votre code.

J'ai cependant un problème, j'essaie d'implémenter un ordre de fermeture par inversion de signal...des idées ?

 

Le débat sur la reconnaissance des NewBars s'étant un peu allongé, je vais résumer brièvement les résultats.

Environnement technique :

Si un changement (nouveau trade ou nouvelle détermination de prix) est détecté par le serveur, ce dernier envoie un signal au terminal. Le programme du terminal déclenche la routine OnTick ().

Avec ce signal, nous obtenons les informations suivantes :

Time Current () - l'heure du serveur à laquelle le tick a été envoyé.

Information sur le dernier tick - SymbolInfoTick()
- Heure du serveur lorsque le tick est apparu
- Demande
- Offre
- Dernier prix (pas avec tous les fournisseurs)
- un drapeau qui indique ce qui a été modifié.

Informations sur la barre actuelle
- CopyRates()
- un "nom" pour la barre, par exemple "10:20:00".
- Ouvert-Haut-Bas-Clôture

Reconnaissance d'une nouvelle barre (ex. Période = M1)

Parce que le serveur n'envoie un signal que si quelque chose a changé,
les barres portant le nom "hh.mm:00" peuvent apparaître plus tard que "hh:mm:00".

Cela peut provoquer des situations particulières pour les symboles ayant peu de liquidité.

Les solutions traitant de la durée de la période ne détectent pas cela :

TimeCurrent() bars "name"
Dernier Tick 10:10:07 10.10:00
Prochain Tick 10:11:30 10:11:00

Pas avec ça (Zéro ticks dans une période) :

TimeCurrent() bars "name"
Dernier tick 10:10:30 10:10:00
Next Tick 10:13:40 10:13:00 La barre 10:12:00 est manquante !

Très rarement, j'ai vu des situations (lors d'une très forte charge sur le serveur ?) dans lesquelles l'heure du serveur est déjà passée à la période suivante alors que les barres ne le sont pas.

TimeCurrent() barres "nom
Dernier Tick 10:10:00 10:09:00
Tick suivant 10:10:00 10:10:00

Conclusion :

Il est bon d'utiliser la fonction TimeCurrent() afin de supprimer les CopyRates() inutiles.

Une fois que le TimeCurrent() atteint la nouvelle période, il faut vérifier si la barre bascule également.

Ceci me ramène au code qu'Alain a amené en discussion très tôt :

https://www.mql5.com/en/forum/22983

Willbur

Improve your time execution by removing Bars function calls
Improve your time execution by removing Bars function calls
  • www.mql5.com
After a basic profiling I get the following results :.
 

@emeka Mbanefo

mon manuel ne mentionne pas de fonction nommée "iBars".

Etes-vous sûr que c'est du code MQL5 ?

Willbur

 
Willbur:

@emeka Mbanefo

mon manuel ne mentionne pas une fonction nommée "iBars".

Etes-vous sûr que c'est du code MQL5 ?

Willbur

Ah, ce n'est pas pour mql5. C'est pour mql4, je pense. Pourtant, l'iBars est un jeu pour moi. Ses barres sont une fonction générale, comme je l'ai déjà dit.

J'attends toujours de l'aide pour le code d'inversion de signal.

Merci.

 
emeka Mbanefo:

Ah, ce n'est pas pour mql5. C'est pour mql4, je pense. Quand même, les iBars, c'est moi qui m'amuse. Ses barres sont une fonction générale, comme je l'ai déjà dit.

J'attends toujours de l'aide pour le code d'inversion de signal.

Merci.

  • S'il vous plaît ne pas détourner d'autres sujets avec un contenu sans rapport.
  • Ce sujet est sur mql5, comme déjà indiqué.
  • Ce sujet concerne la détection d'une nouvelle barre, et non le trading d'une seule barre.
  • iBars n'est pas fiable pour détecter les nouvelles barres.
Indicate a new bar
Indicate a new bar
  • www.mql5.com
Another idea could be the check wether the number of bars has been incremented.
Raison: