ChartNavigate pendant l'initialisation - page 5

 
Ihor Herasko:

Non, je ne le suis pas. Parce que c'est exactement le but. Laissez-moi vous en dire un peu plus sur ce dont il s'agit. Le trader utilise le graphique comme s'il s'agissait d'un testeur. L'indicateur cache une partie du graphique réel à droite de l'heure supposée actuelle (en fait, cette heure se trouve quelque part dans l'historique). En appuyant sur F12, on affiche la bougie suivante dans le graphique en ligne, etc. Ainsi, c'est en redémarrant le terminal avec l'indicateur attaché qu'il ne remet pas la position du graphique à l'endroit où le trader a terminé ses études. En conséquence, il/elle reçoit un graphique vide car le terminal réinitialise le graphique à la dernière bougie réelle. Et ce malgré le fait que le terminal a été déchargé dans un endroit complètement différent.

Une observation intéressante. Je l'ai vérifié moi-même - hélas, rien n'a changé. J'ai toujours les prix les plus bas sur le rechargement.

Je suggère que nous "synchronisions nos montres". Je teste tout cela sur la version 1861. Quelle est votre construction ?

Vous devriez peut-être ajouter ces lignes au début

   ChartSetInteger(0, CHART_AUTOSCROLL, false);
   ChartSetInteger(0, CHART_SHIFT, false);
   ChartNavigate(0, CHART_END, 0);

et ensuite le déplacer ?

Ou simplement ne pas le déplacer. Il fonctionne également sans problème.

ChartNavigate(0, CHART_CURRENT_POS, 0)

A quelle barre j'ai fermé le terminal, et à laquelle il s'est ouvert.

Toutefois, cette variante permet de conserver le graphique sur la fenêtre inactive également. Hélas. Le graphique reste en place même sans ce code.

 
Alexey Viktorov:

Peut-être ajouter des lignes comme celle-ci au début

et le déplacer ensuite ?

Oui, la version complète a tout. Si vous travaillez sans redémarrer le terminal, tout va bien. Mais le redémarrage entraîne de tels problèmes. Et même les solutions de béquille ne sont pas toujours utiles. Je vais enquêter davantage.

 
Ihor Herasko:

Oui, la version complète a tout. Si vous travaillez sans redémarrer le terminal, tout va bien. Mais le redémarrage conduit à des problèmes comme celui-ci. Et même les solutions de béquille ne sont pas toujours utiles. Je vais enquêter davantage.

Mais j'ai aussi fait des expériences en redémarrant le terminal. Quel peut être le problème ? J'ai téléchargé la mise à jour, mais je l'ai annulée pour le moment. Vous devriez peut-être vous mettre à jour aussi ?
 
Alexey Viktorov:
Mais j'ai également essayé de redémarrer le terminal. Quel pourrait être le problème ? J'ai téléchargé la mise à jour, mais jusqu'à présent j'ai annulé la mise à jour. Vous devriez peut-être vous mettre à jour aussi ?

Mis à jour à 1865 construire. Le problème reste entier.

De plus, il s'est avéré que même après le chargement complet des données sur le graphique et l'utilisation de ChartNavigate(), le graphique s'affiche à l'endroit requis pendant un certain temps, mais avec un nouveau tick, il revient toujours à la toute dernière barre. Le bouton autoscroll est désactivé et aucun autre indicateur n'est utilisé.

Si vous déplacez le graphique manuellement, rien de tel ne se produit. Je suis perdu pour l'instant. Je me pencherai sur la question demain, lorsque j'aurai un regard neuf, pour voir si j'ai fait une erreur.

 
MetaTrader 5 x64 build 1870 started (MetaQuotes Software Corp.)
Windows 10 (build 17134) x64, IE 11, UAC, Intel Core i3-3120 M  @ 2.50 GHz, Memory: 4720 / 8077 Mb, Disk: 301 / 464 Gb, GMT+2
C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

Script. Ce n'est qu'avecCHART_CURRENT_POS qu'il est stable. Avec CHART_BEGIN et "Shift" positif, ainsi qu'avec CHART_END et "Shift" négatif, le graphique soit ne bouge pas, soit saute (défilement automatique) vers les derniers prix : il semble que le bouton autoscroll soit activé.

//+------------------------------------------------------------------+
//|                                                       Test_1.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
#property script_show_inputs
//--- input parameters
input ENUM_CHART_POSITION  InpPosition = CHART_CURRENT_POS;    // Chart Position  
input int                  InpShift    = -1;                   // Shift
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   ResetLastError();
//--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
   int chart_first_visible_bar=ChartFirstVisibleBar();
   if(chart_first_visible_bar==-1)
      return;
//--- 
   string comm="До: Первый бар на графике имеет номер "+IntegerToString(chart_first_visible_bar);
//--- выведем комментарий 
   Print(comm);
   if(ChartNavigate(ChartID(),InpPosition,InpShift))
      Print("ChartNavigate ",EnumToString(InpPosition),",",InpShift," успешно");
   else
      Print("Ошибка №",GetLastError(),", ",EnumToString(InpPosition));
//--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
   chart_first_visible_bar=ChartFirstVisibleBar();
   if(chart_first_visible_bar==-1)
      return;
//--- 
   comm="После: Первый бар на графике имеет номер "+IntegerToString(chart_first_visible_bar);
//--- выведем комментарий 
   Print(comm);
  }
//+------------------------------------------------------------------------------+ 
//| Gets the index of the first visible bar on chart.                            | 
//| Indexing is performed like in timeseries: latest bars have smallest indices. | 
//+------------------------------------------------------------------------------+ 
int ChartFirstVisibleBar(const long chart_ID=0)
  {
//--- prepare the variable to get the property value 
   long result=-1;
//--- reset the error value 
   ResetLastError();
//--- receive the property value 
   if(!ChartGetInteger(chart_ID,CHART_FIRST_VISIBLE_BAR,0,result))
     {
      //--- display the error message in Experts journal 
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- return the value of the chart property 
   return((int)result);
  }
//+------------------------------------------------------------------+

1

Dossiers :
 
Ihor Herasko:

Mis à jour à 1865 construire. Le problème reste entier.

De plus, il s'est avéré que même après le chargement complet des données sur le graphique et l'utilisation de ChartNavigate(), le graphique s'affiche à l'endroit requis pendant un certain temps, mais avec un nouveau tick, il revient toujours à la toute dernière barre. Le bouton autoscroll est désactivé et aucun autre indicateur n'est utilisé.

Si vous déplacez le graphique manuellement, rien de tel ne se produit. Je suis perdu pour l'instant. Demain, je l'examinerai à nouveau avec un regard neuf pour voir si je n'ai pas fait une erreur quelque part.

J'ai proposé de mettre à jour non pas dans l'espoir que tout se mette en place, mais pour avoir les mêmes constructions.

Igor, faites-vous des expériences avec la version complète de l'indicateur ou avec la version expérimentale ?

Je viens de recharger le terminal avec la version 1865 et tout va bien. J'écris ce message, je regarde périodiquement le graphique, je change les fenêtres du graphique... Mais le graphique décalé reste immobile malgré les tics et les commutations entrants.

Voici le code complet

#property indicator_chart_window
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   ChartSetInteger(0, CHART_AUTOSCROLL, false);
   ChartSetInteger(0, CHART_SHIFT, false);
   ChartNavigate(0, CHART_END, 0);
   if(ChartNavigate(0, CHART_END, -100))
      Comment("Успешно");
   else
      Comment("Ошибка №", GetLastError());   
  //ChartRedraw(ChartID());
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
{
 Comment("");
}/********************************************************************/
Pour une raison quelconque, je ne crois pas qu'un terminal fonctionne de cette façon et qu'un autre fonctionne de cette façon.
 
Alexey Viktorov:

J'ai suggéré une mise à jour non pas dans l'espoir que tout se mette en place, mais pour que les constructions soient les mêmes.

Igor, faites-vous des expériences avec la version complète de l'indicateur ou avec une version expérimentale ?

Je viens de recharger le terminal avec la version 1865 et tout va bien. J'écris ce message, je regarde périodiquement le graphique, je change les fenêtres du graphique... Mais le graphique décalé reste immobile malgré les tics et les commutations entrants.

Voici le code complet

Je ne crois pas qu'un terminal fonctionne de cette façon et pas l'autre.

Essayez de regarder un symbole qui n'a aucune histoire.

 
Artyom Trishkin:

Essayez de chercher un symbole qui n'a pas d'histoire du tout.

Comment faire ?

Selon la description dans le premier message du fil de discussion, il s'agit d'un indicateur, il s'accroche à un graphique ouvert - ce qui signifie que l'historique est déjà chargé. N'est-ce pas ? Accrocher l'indicateur, fermer le terminal, démarrer le terminal, --- où peut aller l'histoire ? Si c'était déjà là...

Deuxièmement, j'ai ouvert le symbole EURMXN. Sans regarder dans le terminal, pouvez-vous dire ce que c'est ? )))

 
Alexey Viktorov:

Comment faire ?

Selon la description dans le premier message du fil de discussion, il s'agit d'un indicateur, il s'accroche à un graphique ouvert - ce qui signifie que l'historique est déjà chargé. N'est-ce pas ? Accrocher l'indicateur, fermer le terminal, démarrer le terminal, --- où peut aller l'histoire ? Si c'était déjà là...

La deuxième était d'ouvrir le symbole EURMXN. Sans regarder dans le terminal, pouvez-vous dire ce que c'est ? )))

Non, je ne peux pas...

Ce que je voulais dire, c'est que le chargement de données historiques fait probablement glisser le graphique vers sa fin.

Essayez ceci : mettez l'indicateur sur une échelle de temps en minutes, fermez le terminal et ouvrez-le après une heure - le terminal commence à charger les minutes manquantes - que va-t-il se passer sur le graphique ? Est-ce que ça va changer ?

 

Quelle nouvelle ! !!

J'avais les graphiques de la période H1, H4 ouverts et je les ai utilisés pour tester. Maintenant j'ai commencé à expérimenter sur M1, M5, M30... ça ne marche pas ! !!

En passant à H1 ou H4 il n'y a pas de problème même s'il y a une nouvelle heure. Cela a été testé soit hier ou tôt aujourd'hui, soit hier et aujourd'hui... ce n'est pas le sujet, mais j'ai été pris dans le changement de l'heure.

Raison: