ChartNavigate pendant l'initialisation - page 2

 
Ihor Herasko:

Et s'il n'y a pas de tiques, des week-ends ? Il faudra alors connecter une minuterie.

Et il ne reste qu'une seule question à résoudre : comment déterminer si ChartNavigate a été exécuté avec succès ? Le fait qu'elle renvoie vrai, c'est juste "pour les tics", cela n'aide pas dans le travail réel.

Je dois vérifier le code que j'ai posté ci-dessus dans mon Expert Advisor...

 
Vladimir Karputov:

Je dois vérifier le code que j'ai posté ci-dessus dans l'EA...

Qu'est-ce que l'EA a à voir avec ça ?

 
Ihor Herasko:

Qu'est-ce que cela a à voir avec le conseiller ?

Nous devrions vérifier...

//+------------------------------------------------------------------+
//|                                                  Test EA.mq5.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- input parameters
input bool redraw=true;
input ENUM_CHART_POSITION position=CHART_BEGIN;
//---
long count=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   count=0;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   count++;
//Comment(count);
   if(count==9 || count==19)
     {
      ResetLastError();
      if(position==CHART_BEGIN)
        {
         if(ChartNavigate(ChartID(),CHART_BEGIN,100))
            Print("Успешно. redraw ",redraw,". position ",EnumToString(position));
         else
            Print("Ошибка №",GetLastError(),". redraw ",redraw,". position ",EnumToString(position));
        }
      if(position==CHART_END)
        {
         if(ChartNavigate(ChartID(),CHART_END,-100))
            Print("Успешно. redraw ",redraw,". position ",EnumToString(position));
         else
            Print("Ошибка №",GetLastError(),". redraw ",redraw,". position ",EnumToString(position));
        }
      if(redraw)
         ChartRedraw();
     }
//--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
   long first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
//--- добавим символ переноса строки 
   string comm="\r\n";
//--- дополним коментарий 
   comm=comm+"Первый бар на графике имеет номер "+IntegerToString(first_bar)+"\r\n";
//--- выведем комментарий 
   Comment(comm);
  }
//+------------------------------------------------------------------+
Dossiers :
Test_EA.mq5  6 kb
 

Vladimir Karputov:

Voici l'indicateur - j'ai spécifiquement mis un délai de neuf ticks, deux types de mouvement graphique et un drapeau de redessin forcé (on/off).

Vous n'êtes pas un débutant. Pourquoi vous induisez en erreur ? Pourquoi ignorez-vous les propos de Renat Fatkhullin ?

Dans votre code (comme ici, donc ici) on est obligé de redessiner le graphique à chaque tick en créant des commentaires à chaque tick.


C'est-à-dire, que l'indicateur dans les paramètres d'entrée soit activé ou désactivé.


Et l'inclusion de votre drapeau dans les paramètres d'entrée, dans ce cas, ne provoque qu'un redécoupage supplémentaire viaChartRedraw().

C'est-à-dire qu'au lieu d'être utile, elle crée une charge supplémentaire sur ceux qui existent déjà en créant des commentaires

P./S. :

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

Erreurs, bugs, questions

Renat Fatkhullin, 2017.12.05 02:51

...

Dans MT5, la fonction Commentaire provoque explicitement le redécoupage du graphique...

La différence est juste ça.


Si dans MT4 après avoir appelé Comment vous mettez ChartRedraw() de force, le comportement n'est toujours pas le même que dans MT5. ChartRedraw() dans Metatrader 4 ignore la valeur du commentaire et décide lui-même de mettre à jour ou non le graphique à partir de la dernière image. Bien sûr, en l'absence de centaines de cotations par seconde qui entraîneraient une désactivation des données du graphique, ChartRedraw décide "pourquoi dessiner un graphique inchangé" et saute le dessin du cadre.

Metatrader 5 a également le même système, mais il y a beaucoup plus de cas où le tirage inconditionnel est prioritaire.

Les terminaux sont des applications graphiques et peuvent fournir des centaines d'images par seconde et fonctionner en mode d'affichage allégé pour des raisons de performances.


D'où des conclusions supplémentaires lors de l'exécution des benchmarks :

  • il ne faut pas considérer un appel à ChartRedraw comme un véritable dessin de graphique.

  • vous devez toujours savoir et prouver les affirmations "pourquoi un graphique sera redessiné" et "est-ce que j'invalide l'image interne du marché pour que le terminal décide de redessiner le graphique".

  • vous ne devez pas tirer de conclusions multiples dans MT5 pendant les benchmarks, vous devez toujours réfléchir à la manière dont vous affectez le rendu

  • MT5 dispose d'un système plus correct de modification des objets sur le graphique et il est nécessaire de bien comprendre les conséquences des commandes de lecture/écriture du mélange.
    il est recommandé de ne pas mélanger les commandes de lecture et d'écriture, et d'effectuer la lecture et l'écriture en masse séparément.

  • Le redessin fréquent des graphiques dans les benchmarks entraîne une forte dépendance des résultats à la carte graphique.
    en fait, certains tests peuvent finir par tester la carte graphique plutôt que les algorithmes ou les fonctions. le test sur un ordinateur portable et un ordinateur de bureau peut montrer des résultats plusieurs fois différents simplement à cause d'une carte graphique 3 à 5 fois plus lente.

Ces erreurs sont commises en permanence par tout le monde.


 

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

ChartNavigate pendant l'initialisation

Vladimir Karputov, 2018.06.25 18:52

Je dois vérifier...

...
void OnTick()
  {
//---
   count++;
//Comment(count);
   if(count==9 || count==19)
     {
      ResetLastError();
      if(position==CHART_BEGIN)
        {
         if(ChartNavigate(ChartID(),CHART_BEGIN,100))
            Print("Успешно. redraw ",redraw,". position ",EnumToString(position));
         else
            Print("Ошибка №",GetLastError(),". redraw ",redraw,". position ",EnumToString(position));
        }
      if(position==CHART_END)
        {
         if(ChartNavigate(ChartID(),CHART_END,-100))
            Print("Успешно. redraw ",redraw,". position ",EnumToString(position));
         else
            Print("Ошибка №",GetLastError(),". redraw ",redraw,". position ",EnumToString(position));
        }
      if(redraw)
         ChartRedraw();
     }
//--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
   long first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
//--- добавим символ переноса строки 
   string comm="\r\n";
//--- дополним коментарий 
   comm=comm+"Первый бар на графике имеет номер "+IntegerToString(first_bar)+"\r\n";
//--- выведем комментарий 
   Comment(comm);
  }
//+------------------------------------------------------------------+

P./S. : En plus de votre deuxième code : avant de mettre à jour la saisie et la publication du texte via le même commentaire, vérifiez si les données ont changé. Dans le cas contraire, il est préférable de reporter la mise à jour et la publication du texte.

Dans ce cas, il s'agit de savoir si le numéro de la première barre du graphique a changé.

 
Vladimir Karputov:

Je vais devoir vérifier...

Mmm. Je ne sais pas vraiment de quoi il s'agit. OK, alors. Je l'ai installé. Je l'ai vérifié en mode CHART_BEGIN et CHART_END et il fonctionne comme prévu. Après le redémarrage, c'est bon.

Ou bien en êtes-vous arrivé au point où vous devez utiliser une béquille : vérifiez le numéro de la première barre du graphique après ChartNavigate et, si ce n'est pas le bon, relancez ChartNavigate.

Oui, la sortie, bien sûr, j'y ai pensé aussi. Mais il est fastidieux de se rappeler constamment de telles fiches du terminal. Après tout, il est tout à fait possible qu'il s'agisse d'un bug.

 
Dina Paches:

P./S. : En plus de votre deuxième code : avant de mettre à jour une entrée de texte et de la publier via le même commentaire, vérifiez si les données ont changé. Dans le cas contraire, il est préférable de reporter la mise à jour et la publication du texte.

Dans ce cas, il s'agit de savoir si le numéro de la première barre du graphique a changé.

Merci pour l'information, bien sûr, mais nous ne parlons pas de performance ici. Le problème dont nous discutons se situe sur un plan légèrement différent, il s'agit juste de codes de test pour vérifier si le problème s'est manifesté ;))

 
Ihor Herasko:

Merci, bien sûr, pour l'information, mais nous ne parlons pas de performance ici. Le problème dont nous discutons se situe sur un plan légèrement différent, il s'agit juste de codes de test pour vérifier si le problème apparaît ;))

Vous êtes les bienvenus. Mais voyez aussi mon autre post auquel celui que vous avez cité est un post-scriptum.

P./S. : Ne dévalorisez pas, s'il vous plaît. Je n'utiliserai pas de tels codes sur le mien, sachant ce que cela implique. Mon équipement n'est pas fourni par le gouvernement

 
Ihor Herasko:

Mmm. Je ne sais pas vraiment de quoi il s'agit. OK, alors. Je l'ai installé. Vérifié en mode CHART_BEGIN et CHART_END, tout fonctionne comme annoncé. Après le redémarrage, c'est bon.

Ou bien en êtes-vous arrivé au point où vous devez utiliser une béquille : vérifiez le numéro de la première barre du graphique après ChartNavigate et, si ce n'est pas le bon, relancez ChartNavigate.

Oui, la sortie, bien sûr, j'y ai pensé aussi. Mais il est fastidieux de se rappeler constamment de telles fiches du terminal. Après tout, il est tout à fait possible qu'il s'agisse d'un bug.

J'avais l'habitude d'avoir une navigation fonctionnelle. Maintenant, je dois le vérifier exprès.


Ajouté : ne pas faire attention aux commentaires :)

 
Vladimir Karputov:

Ma navigation fonctionnait. Maintenant, je dois le vérifier exprès.


Ajouté : Ignorer le commentaire :)

Pourquoi ? Ai-je écrit ou rapporté des bêtises ?

Raison: