P./S. : Imprimer au lieu de Commenter dans votre code ne serait pas seulement une procédure plus douce. Les résultats de l'impression dans OnInit() sont plus faciles à comparer, copiez-les et attachez-les ici.
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 vos expériences sur la version complète de l'indicateur ou sur la version expérimentale ?
A la fois là et là. Mais je ne peux toujours pas dire avec certitude quel est le problème : s'il s'agit d'un bug ou non. Je dois trouver des conditions suffisamment reproductibles.
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 ? )))
C'est facile :
Un modèle avec l'indicateur est enregistré sous default.tpl.
Le symbole graphique est ouvert, qui n'a jamais été ouvert auparavant.
Par conséquent, l'indicateur démarre d'abord, puis les données sont chargées. J'ai rassemblé tous les événements en un seul paquet.
A la fois là et là. Mais je ne peux toujours pas dire avec certitude si c'est un bug ou non. Nous devons trouver des conditions suffisamment reproductibles.
Votre formulation est un peu malheureuse. Ce que j'ai cité concerne les conditions reproductibles.
Une autre chose est que oui, probablement ce que j'ai décrit dans les blocs I et IIn' est pas un bug, mais des particularités du chargement des données lorsque le terminal est redémarré .
Et dans la construction de la 1870e, il y avait des différences de relecture par rapport à ce que j'ai obtenu dans la 1861e.
Les combinaisons de messages (succès et erreur 4111) ont un peu changé. Par exemple, si auparavant il y avait une telle reproduction stable :
test 20180626 (GBPUSD,M5) Alert: Успешно
test 20180626 (GBPUSD,H1) Alert: Ошибка №4111
Maintenant, avec le même code, les messages d'erreur semblent être plus prononcés :
test 20180626 (EURNZD,M5) Alert: Ошибка №4111
test 20180626 (EURNZD,H1) Alert: Ошибка №4111
test 20180626 (EURNZD,M5) Alert: Ошибка №4111
test 20180626 (EURNZD,H1) Alert: Ошибка №4111
test 20180626 (EURNZD,M5) Alert: Ошибка №4111
test 20180626 (EURNZD,H1) Alert: Ошибка №4111
test 20180626 (EURNZD,M5) Alert: Успешно
test 20180626 (EURNZD,H1) Alert: Ошибка №4111
Et le bloc IIIde ce post n'est plus reproductible dans le 1870e.
Il n'a pas non plus pu reproduire dans les années 1870 ce qui est décrit ici: https://www.mql5.com/ru/forum/260815/page5#comment_7901728 Dernière - peut-être cela dépend-il d'une manière ou d'une autre du système d'exploitation (à titre d'hypothèse). Par exemple, ce code de Vladimir fonctionne bien pour moi, sans aucun problème.
J'ai rencontré un problème avec la fonction ChartNavigate. Je fais quelque chose de mal ou il y a vraiment un problème avec la fonction. Répondez si vous l'avez utilisé assez souvent.
Donc, le cœur du problème : ChartNavigate ne déplace pas le graphique. Lors du démarrage du terminal Si vous appelez cette fonction dans OnInit(). Surtout plusieurs fois que j'ai lu la documentation. Il n'est dit nulle part que la fonction ne peut pas être appelée à l'initialisation.
Code indicateur pour la lecture :
Étapes pour jouer :
Désactiver la lecture automatique des graphiques.
Fixez l'indicateur au tableau. ChartNavigate se déclenchera en déplaçant le graphique à la position souhaitée.
Déchargez le terminal.
Chargez le terminal. ChartNavigate ne fonctionnera pas en affichant le graphique sans décalage.
OK, si la fonction donnait une erreur. Mais ce n'est pas le cas. Tous les appels sont réussis, mais c'est lorsque le terminal est rechargé que le graphique n'est pas décalé.
Essayez les trois variantes de l'indicateur et voyez le résultat de chacune d'elles.
1. ChartNavigate à la fin des autres commandes graphiques
//+------------------------------------------------------------------+//| TryToSetChartSettings_Indicator.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"#property indicator_chart_window//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- отключим автопрокруткуChartSetInteger(0,CHART_AUTOSCROLL,false);
//--- установим отступ правого края графикаChartSetInteger(0,CHART_SHIFT,true);
//--- отобразим в виде свечейChartSetInteger(0,CHART_MODE,CHART_CANDLES);
//--- установить режим отображения тиковых объемовChartSetInteger(0,CHART_SHOW_VOLUMES,CHART_VOLUME_TICK);
//--- Прокрутим от правого края графика на 1000 баров влевоChartNavigate(0,CHART_END,-1000);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
2. ChartNavigate one - aucune autre commande vers le graphique
//+------------------------------------------------------------------+//| TryToSetChartSettings_Indicator.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"#property indicator_chart_window//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
/*
//--- отключим автопрокрутку
ChartSetInteger(0,CHART_AUTOSCROLL,false);
//--- установим отступ правого края графика
ChartSetInteger(0,CHART_SHIFT,true);
//--- отобразим в виде свечей
ChartSetInteger(0,CHART_MODE,CHART_CANDLES);
//--- установить режим отображения тиковых объемов
ChartSetInteger(0,CHART_SHOW_VOLUMES,CHART_VOLUME_TICK);
*///--- Прокрутим от правого края графика на 1000 баров влевоChartNavigate(0,CHART_END,-1000);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
3. ChartNavigate avant les autres commandes du graphique
//+------------------------------------------------------------------+//| TryToSetChartSettings_Indicator.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"#property indicator_chart_window//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- Прокрутим от правого края графика на 1000 баров влевоChartNavigate(0,CHART_END,-1000);
//--- отключим автопрокруткуChartSetInteger(0,CHART_AUTOSCROLL,false);
//--- установим отступ правого края графикаChartSetInteger(0,CHART_SHIFT,true);
//--- отобразим в виде свечейChartSetInteger(0,CHART_MODE,CHART_CANDLES);
//--- установить режим отображения тиковых объемовChartSetInteger(0,CHART_SHOW_VOLUMES,CHART_VOLUME_TICK);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
Et essayez trois variantes de l'indicateur, voyez le résultat de chacune d'elles.
1. ChartNavigate à la fin des autres commandes de graphiques
Attaché au graphique M1 avec le défilement automatique activé. L'autoscroll est désactivé, le graphique s'est déplacé de 1000 barres vers la gauche.
J'ai rechargé le terminal sans déconnecter l'indicateur du tableau. Le graphique montre la bougie actuelle, sans décalage de 1000 barres vers la gauche. Le défilement automatique reste indisponible.
J'ai répété l'étape 2 7 fois de suite. 3 fois, la transition vers la gauche de 1000 bougies est complète, 4 fois - la transition n'est pas complète.
Dans ces cas, j'ai remarqué le message "Waiting for refresh". On peut donc en conclure que le terminal fait défiler de force le graphique vers les dernières cotations lors du chargement de l'historique. Et comme cela se produit après OnInit(), nous obtenons un résultat inattendu.
2. ChartNavigate seul - aucune autre commande vers le graphique
Comme le défilement automatique n'est pas automatiquement désactivé dans cette version, je l'ai désactivé manuellement et j'ai connecté l'indicateur. Le graphique s'est déplacé de 1000 barres vers la gauche.
J'ai redémarré le terminal sans déconnecter l'indicateur du tableau.
Dans 2 cas sur 7, le défilement a été effectué. Et dans l'un d'eux, cela s'est produit en trois étapes : affichage de l'historique attendu, affichage de la bougie actuelle et affichage de l'historique attendu. Il semble que OnInit() ait été exécuté deux fois : une fois avant le chargement de l'historique et la seconde fois - après.
3. ChartNavigate avant les autres commandes du graphique.
J'ai activé le défilement automatique et j'ai joint l'indicateur. Le graphique s'est mis à trembler et est revenu à la bougie actuelle. Comme on pouvait s'y attendre, l'autoscrolling est désactivé après une commande de déplacement de 1000 barres.
Redémarrer le terminal sans déconnecter l'indicateur du graphique (le graphique affiche la bougie actuelle).
Dans les 7 cas, le graphique a affiché la bougie actuelle, le défilement n'a même pas clignoté.
Si nous redémarrons le terminal sans aucun indicateur sur le graphique, avec le défilement automatique désactivé et l'affichage quelque part dans les profondeurs de l'histoire, alors à chaque redémarrage nous obtenons l'affichage de l'endroit où le terminal a été éteint. Il s'avère que quelque part pendant l'exécution des commandes de navigation, il y a un déplacement vers la bougie actuelle.
Ci-joint le graphique M1 avec autoscroll activé. Le défilement automatique a été désactivé, le graphique s'est déplacé de 1000 barres vers la gauche.
J'ai rechargé le terminal sans déconnecter l'indicateur du tableau. Le graphique montre la bougie actuelle, sans décalage de 1000 barres vers la gauche. Le défilement automatique reste indisponible.
J'ai répété l'étape 2 7 fois de suite. 3 fois, la transition vers la gauche de 1000 bougies est complète, 4 fois - la transition n'est pas complète.
Lorsque je n'ai pas perfectionné la commande "Waiting for refresh" apparaît. On peut donc en conclure que le terminal fait défiler de force le graphique vers les dernières cotations lors du chargement de l'historique. Et comme cela se produit après OnInit(), nous obtenons un résultat inattendu.
J'oublie toujours que votre message/suggestion est lu à l'envers. C'est comme dans une vieille blague :
1917, octobre. Une dame, la petite-fille de le décembriste, est assise dans sa propre maison sur Nevsky. Entendant un bruit dans la rue, elle demande à son concierge de découvrir ce qui se passe sur . - Jeune fille, la révolution est là ! - Le concierge revient. -Oh, c'est merveilleux ! - Mon grand-père rêvait d'une révolution ! Allez découvrir ce que veulent les révolutionnaires, mon cher ami ! - Ils ne veulent pas d'hommes riches, madame", dit le concierge à son retour. - C'est étrange, dit la dame pensivement, mais mon grand-père voulait qu'il n'y ait pas de pauvres !
J'oublie toujours que votre message/suggestion sera lu à l'envers.
Qu'est-ce que tu veux dire ? Vous avez écrit que vous devez tester le fonctionnement des trois indicateurs. Puisque le sujet porte sur le rechargement du terminal et l'utilisation de ChartNavigate, ce sont les tests qui ont été effectués.
le problème est exactement que ChartNavigate ne se déclenche pas toujours au démarrage du terminal? C'est là le problème.
Et aussi lorsque je modifie mon profil. En outre, si le ChartNavigate( chart_id, CHART_BEGIN, shift ) obtient par exemple CHART_FIRST_VISIBLE_BAR, alors le résultat sera comme si ChartNavigate avait fonctionné. Si le conseiller expert est supprimé, alors la prochaine fois que vous démarrez le conseiller expert (celui-ci ou un autre), le résultat de l'obtention de CHART_FIRST_VISIBLE_BAR dans ce graphique ressemblera à CHARTNavigate failed.
Le résultat : un fonctionnement extrêmement incohérent de ChartNavigate déjà en combinaison avec CHART_FIRST_VISIBLE_BAR
J'ai dans ce post: https://www.mql5.com/ru/forum/260815/page4#comment_7890492 détaillé les conditions dans lesquelles le problème peut être reproduit. Cela a pu être reproduit sur la base de vos affirmations. Ce que j'ai écrit ici
C'est-à-dire qu'une légère modification des conditions a conduit à une reproduction régulière du problème.
Vous n'avez pas remarqué ceci
P./S. : Imprimer au lieu de Commenter dans votre code ne serait pas seulement une procédure plus douce. Les résultats de l'impression dans OnInit() sont plus faciles à comparer, copiez-les et attachez-les ici.
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 vos expériences sur la version complète de l'indicateur ou sur la version expérimentale ?
A la fois là et là. Mais je ne peux toujours pas dire avec certitude quel est le problème : s'il s'agit d'un bug ou non. Je dois trouver des conditions suffisamment reproductibles.
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 ? )))
C'est facile :
A la fois là et là. Mais je ne peux toujours pas dire avec certitude si c'est un bug ou non. Nous devons trouver des conditions suffisamment reproductibles.
Votre formulation est un peu malheureuse. Ce que j'ai cité concerne les conditions reproductibles.
Une autre chose est que oui, probablement ce que j'ai décrit dans les blocs I et II n' est pas un bug, mais des particularités du chargement des données lorsque le terminal est redémarré .
Et dans la construction de la 1870e, il y avait des différences de relecture par rapport à ce que j'ai obtenu dans la 1861e.
Les combinaisons de messages (succès et erreur 4111) ont un peu changé. Par exemple, si auparavant il y avait une telle reproduction stable :
Maintenant, avec le même code, les messages d'erreur semblent être plus prononcés :
Et le bloc IIIde ce post n'est plus reproductible dans le 1870e.
Il n'a pas non plus pu reproduire dans les années 1870 ce qui est décrit ici: https://www.mql5.com/ru/forum/260815/page5#comment_7901728 Dernière - peut-être cela dépend-il d'une manière ou d'une autre du système d'exploitation (à titre d'hypothèse). Par exemple, ce code de Vladimir fonctionne bien pour moi, sans aucun problème.
J'ai rencontré un problème avec la fonction ChartNavigate. Je fais quelque chose de mal ou il y a vraiment un problème avec la fonction. Répondez si vous l'avez utilisé assez souvent.
Donc, le cœur du problème : ChartNavigate ne déplace pas le graphique. Lors du démarrage du terminal Si vous appelez cette fonction dans OnInit(). Surtout plusieurs fois que j'ai lu la documentation. Il n'est dit nulle part que la fonction ne peut pas être appelée à l'initialisation.
Code indicateur pour la lecture :
Étapes pour jouer :
Essayez les trois variantes de l'indicateur et voyez le résultat de chacune d'elles.
1. ChartNavigate à la fin des autres commandes graphiques
2. ChartNavigate one - aucune autre commande vers le graphique
3. ChartNavigate avant les autres commandes du graphique
Et essayez trois variantes de l'indicateur, voyez le résultat de chacune d'elles.
1. ChartNavigate à la fin des autres commandes de graphiques
2. ChartNavigate seul - aucune autre commande vers le graphique
3. ChartNavigate avant les autres commandes du graphique.
J'oublie toujours que votre message/suggestion est lu à l'envers. C'est comme dans une vieille blague :
1917, octobre. Une dame, la petite-fille de
le décembriste, est assise dans sa propre maison sur Nevsky. Entendant un bruit dans la rue, elle demande à son concierge de découvrir ce qui se passe sur
.
- Jeune fille, la révolution est là ! - Le concierge revient.
-Oh, c'est merveilleux ! - Mon grand-père rêvait d'une révolution !
Allez découvrir ce que veulent les révolutionnaires, mon cher ami !
- Ils ne veulent pas d'hommes riches, madame", dit le concierge à son retour.
- C'est étrange, dit la dame pensivement, mais mon grand-père voulait qu'il n'y ait pas de pauvres !
J'oublie toujours que votre message/suggestion sera lu à l'envers.
Qu'est-ce que tu veux dire ? Vous avez écrit que vous devez tester le fonctionnement des trois indicateurs. Puisque le sujet porte sur le rechargement du terminal et l'utilisation de ChartNavigate, ce sont les tests qui ont été effectués.
Pourquoi, si le problème est que ChartNavigate ne fonctionne pas toujours au démarrage du terminal ? C'est exactement ça.
le problème est exactement que ChartNavigate ne se déclenche pas toujours au démarrage du terminal? C'est là le problème.
Et aussi lorsque je modifie mon profil. En outre, si le ChartNavigate( chart_id, CHART_BEGIN, shift ) obtient par exemple CHART_FIRST_VISIBLE_BAR, alors le résultat sera comme si ChartNavigate avait fonctionné. Si le conseiller expert est supprimé, alors la prochaine fois que vous démarrez le conseiller expert (celui-ci ou un autre), le résultat de l'obtention de CHART_FIRST_VISIBLE_BAR dans ce graphique ressemblera à CHARTNavigate failed.
Le résultat : un fonctionnement extrêmement incohérent de ChartNavigate déjà en combinaison avec CHART_FIRST_VISIBLE_BAR