Mt4 Fin de l'assistance. - page 33

 
Il y a aussi un problème avec l'heure de début. Quelque chose n'enregistre pas le début de la barre au bon moment. Je le découvrirai plus tard.
 
Nikolai Semko:

Peter, ça ne marche pas pour moi non plus.
Votre style de programmation est étrange. Vous pouvez mettre tout cela avec toutes les variables et les boucles de OnInit et OnTimer dans une seule procédure. Si quelqu'un veut l'utiliser, parce que ce code va gêner. Que faire si nous avons 20 procédures ou plus avec le même contenu ? Après tout, elle est mise en œuvreici .


Peter ne cherche pas à s'en sortir facilement...

 
Реter Konow:
Il y a également un problème avec l'heure de début. Quelque chose n'enregistre pas le début de la barre au bon moment. Je le découvrirai plus tard.

Le début de la barre n'est pas toujours chronométré avec précision.

Parfois, les barres sont carrément sautées.
 
Nikolai Semko:

Peter, ça ne marche pas pour moi non plus.
Votre style de programmation est étrange. Vous pouvez mettre toutes ces choses avec toutes les variables et les boucles de OnInit et OnTimer dans une seule procédure. Si quelqu'un veut l'utiliser, parce que ce paquet va se mettre en travers du chemin. Que faire s'il y a 20 procédures ou plus avec le même contenu ? Après tout, c'est iciqu' il est mis en œuvre.

Sur le 1 minute, cela fonctionne, mais il ne verrouille pas le début de la barre au bon moment.

Je ne l'ai pas vérifié sur d'autres horizons temporels, car l'attente est longue.

Quant au style, il n'a plus d'importance maintenant. Nous pouvons tout retirer de la minuterie et le mettre dans une fonction séparée. Je pensais simplement à la solution elle-même, et non aux futures variantes de son intégration.

 
Vladimir Pastushak:

Le début du bar n'est pas toujours exactement à l'heure.

Oui, j'ai remarqué ça, je vais le corriger plus tard.
 
Реter Konow:

Je me disais que si une personne a vraiment 600 instruments dans l'aperçu du marché et qu'à chaque tick elle vérifie l'arrivée d'une nouvelle barre pour chaque instrument et chaque timeframe, cela peut être coûteux....

Je ne fais pas moi-même de commerce, donc je ne sais pas exactement combien de fois cette fonction doit être appelée en pratique.

La double boucle sur les symboles et les horizons temporels dans la fonction de nouvelle barre peut augmenter la charge uniquement si le nombre de symboles et d'horizons temporels est très important et que la fonction est appelée à chaque tick de centaines de symboles. Peut-être que Dmitry a raison alors.

J'ai raccourci une boucle dans la fonction.

Oublie ça.

Voici un exemple de ma classe spécifique à cette action. Bien sûr, ce n'est pas un chef-d'œuvre, mais c'est le mien, et il me comprend et fonctionne.

class CNewBar
{
protected:
  MqlRates newBarRates[];
public:
 bool newBar();
 bool newBar(ENUM_TIMEFRAMES timeframe, datetime & tOld);
};/********************************************************************/

bool CNewBar::newBar()
{
 static datetime timeLastBar;
  if(CopyRates(_Symbol, PERIOD_CURRENT, 0, 1, newBarRates) < 0)
   return(false);
  bool ret = timeLastBar != newBarRates[0].time;
   if(ret)
    timeLastBar = newBarRates[0].time;
   return(ret);
}/********************************************************************/

bool CNewBar::newBar(ENUM_TIMEFRAMES timeframe, datetime & tOld)
{
  if(CopyRates(_Symbol, timeframe, 0, 1, newBarRates) < 0)
   return(false);
    datetime tNew = newBarRates[0].time;
   bool ret = tOld != tNew;
   if(ret)
    tOld = tNew;
   return(ret);
}/********************************************************************/

Si vous voulez déterminer seulement sur le TF actuel, vous devez appeler la fonction sans paramètres.

Par conséquent, si elle est placée dans .mqh, la bibliothèque doit être jointe.

#include <путь_папка\имя_файла.mqh>
CNewBar newBar;

et il est appelé dans OnTick().

if(newBar.newBar())
 Print("Новый бар на текущем ТФ");

Si nous devons définir d'autres TF, nous déclarons des variables pour chaque période et symbole, si nécessaire, au niveau des variables globales ou statiques.

static datetime oldD1 = 0, oldH1 = 0;

if(newBar.newBar(PERIOD_H1, oldH1) && newBar.newBar(PERIOD_D1, oldD1)
 Print("Открылся новый день и новый час");

Cette approche est efficace lorsque l'on travaille sur un TF autre que celui requis et protège des problèmes de changement accidentel du graphique sur lequel travaille le Conseiller Expert.

 
Nikolai Semko:

Peter, ça ne marche pas pour moi non plus. Bien que l'algorithme soit assez rapide, c'est une perte de temps. Mais ça ne marche pas encore. Pas le temps d'y penser.
Vous avez un style de programmation étrange. Vous pouvez mettre tout cela avec toutes les variables et les boucles de OnInit et OnTimer dans une seule procédure. Si quelqu'un veut l'utiliser, tous ces trucs vont le gêner. Que faire s'il y a 20 procédures ou plus avec le même contenu ? Il est mis en œuvreici .


Peut-être ne savez-vous pas ce que signifie "rapide" ?

 
Alexey Viktorov:

Oh, crache le morceau...

Voici un exemple de ma classe spécifique pour cette action. Bien sûr, ce n'est pas un chef-d'œuvre, mais c'est le mien et il fonctionne pour moi.

Si vous voulez déterminer seulement sur le TF actuel, alors la fonction sans paramètres est appelée.

Par conséquent, s'il est placé dans .mqh, la bibliothèque doit être connectée.

et il est appelé dans OnTick().

Si je veux déterminer d'autres TF, alors au niveau des variables globales ou statiques, des variables sont déclarées pour chaque période et symbole, si nécessaire.

Cette approche est efficace lorsque l'on travaille sur un TF autre que celui requis et protège des problèmes liés au changement accidentel du graphique TF sur lequel le conseiller expert opère.


Vous n'avez aucune idée de l'idiotie que vous avez démontrée, c'est juste absurde. Mais je ne vous montrerai pas exactement à quel endroit, car vous tous n'êtes pas intéressés par mon opinion))).

 
Alexey Viktorov:

Oh, crache le morceau...

Voici un exemple de ma classe spécifique pour cette action. Bien sûr, ce n'est pas un chef-d'œuvre, mais c'est le mien et il fonctionne pour moi.

Si vous voulez déterminer seulement sur le TF actuel, alors la fonction sans paramètres est appelée.

Par conséquent, si elle est placée dans .mqh, la bibliothèque doit être jointe.

et il est appelé dans OnTick().

S'il est nécessaire de déterminer d'autres TF, alors au niveau des variables globales ou des variables statiques sont déclarées pour chaque période et, si nécessaire, pour le symbole.

Cette approche est efficace lorsque l'on travaille sur un TF autre que celui souhaité et protège des problèmes de changement accidentel du graphique sur lequel travaille le Conseiller Expert.

Et qu'en est-il des autres symboles ? La tâche consistait à identifier le changement d'une TF sur n'importe quel symbole à partir du rapport de marché pour n'importe quelle TF.

Regards.
 
Alexey Viktorov:

Oh, crache le morceau...

Voici un exemple de ma classe spécifique pour cette action. Bien sûr, ce n'est pas un chef-d'œuvre, mais c'est le mien et il fonctionne pour moi.

Si vous voulez déterminer seulement sur le TF actuel, alors la fonction sans paramètres est appelée.

Par conséquent, si le fichier est placé dans .mqh, la bibliothèque doit être incluse.

et il est appelé dans OnTick().

Si je veux déterminer d'autres périodes, alors au niveau des variables globales ou des variables statiques sont déclarées pour chaque période et symbole, si nécessaire.

Cette approche est efficace lorsque l'on travaille sur un TF autre que celui souhaité et protège des problèmes de changement accidentel du graphique sur lequel travaille le Conseiller Expert.

Votre solution fonctionne-t-elle bien ? Si c'est le cas, alors tout va bien.

Et dans le cas de centaines d'instruments, n'y aura-t-il pas de chevauchement ?

Raison: