ChartNavigate pendant l'initialisation - page 4

 
Ihor Herasko:

P./S. : Juste au cas où, je voudrais préciser que je n'ai pas commencé à voir ce qui se passe si le terminal est chargé après une longue période (c'est-à-dire lorsque de nombreuses nouvelles barres sont censées apparaître après le déchargement du terminal).

 
Alexey Viktorov:

Dina, est-ce que ça marche pour toi ? J'ai lutté pendant 2 ou 3 heures (juste aujourd'hui, sans compter les tests d'hier) pour essayer d'obtenir une version non fonctionnelle de OnInit, mais en vain. Tout fonctionne toujours comme il se doit. Si je place l'indicateur sur deux graphiques et que je redémarre le terminal, il ne fonctionne que sur le graphique qui était actif au moment de la fermeture et de l'ouverture du terminal. Sur le second, le graphique non actif ne fonctionne pas. Mais ceci, à mon avis, est compréhensible, il n'y a pas de rendu de graphique et pas de graphique lui-même, malgré le fait que les données soient reçues.

Oui, Alexei, ça marche. J'ai écrit à ce sujet ici. Apparemment, il s'est visuellement perdu dans mes citations d'autres postes.

 
Dina Paches:

Dites-moi, avant de décharger le terminal, réinitialisez-vous le graphique aux prix les plus récents ?

Non, je ne le fais pas. Parce que c'est le but. Laissez-moi vous expliquer en détail pourquoi tout cela est nécessaire. Un 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 parce que 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.

Pourquoi je demande :

J'ai utilisé votre code pour voir comment il fonctionnerait dans ma situation. Au début, je pensais que je reproduisais le problème que vous décrivez. Plus tard, j'ai compris que ce n'était pas le cas. Si le graphique est restauré aux derniers prix avant d'être déchargé, il fonctionne selon le code lorsque le terminal est chargé. Si je ne reviens pas aux derniers prix avant le déchargement, le graphique restera là où il était avant le déchargement.

Observation intéressante. J'ai vérifié de mon côté et hélas, rien n'a changé. J'ai toujours les prix les plus bas sur le rechargement.

Je vous suggère de "synchroniser votre montre". Je teste tout cela sur la version 1861. Quelle est votre construction ?

 
Alexey Viktorov:

Dina, est-ce que ça marche pour toi ? J'ai lutté pendant 2 ou 3 heures (juste aujourd'hui, sans compter les tests d'hier) pour essayer d'obtenir une version non fonctionnelle de OnInit, mais en vain. Tout fonctionne toujours comme il se doit. Si je place l'indicateur sur deux graphiques et que je redémarre le terminal, il ne fonctionne que sur le graphique qui était actif au moment de la fermeture et de l'ouverture du terminal. Sur le second, le graphique non actif ne fonctionne pas. Mais ceci, à mon avis, est compréhensible, il n'y a pas de rendu de graphique et pas de graphique lui-même, malgré le fait que les données soient reçues.

Mettez-le sur deux graphiques. Malheureusement, les deux fonctionnent de la même manière - les prix les plus récents sont affichés lors du rechargement.

Quel est votre modèle ?

 
Ça s'est avéré être encore plus amusant que je ne le pensais. J'ai déplacé le code vers OnCalculate (en faisant un déclenchement unique, pour ne pas l'appeler à chaque tick ), mais l'image n'a pas changé. C'est-à-dire que même dans OnCalculate au démarrage du terminal ChartNavigate ne fonctionne pas...
 
Alexey Viktorov:

... Une seule particularité a été remarquée : si je place l'indicateur sur deux graphiques et que je redémarre le terminal, il ne fonctionnera que sur le graphique qui était actif au moment où j'ai fermé et ouvert le terminal. Sur le second, le graphique non actif ne fonctionne pas. Mais ceci, à mon avis, est compréhensible, il n'y a pas de rendu de graphique et pas de graphique lui-même, malgré le fait que les données soient reçues.

Je n'ai pas pensé à l'essayer de cette façon moi-même. Maintenant j'ai fait de telles expériences (aussi avec l'aide du code d'Igor).

En faisant cela, j'ai réussi à me retrouver avec... que je reproduisais le problème qu'il décrivait.

 
Ihor Herasko:

...

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

J'ai aussi 1861. Mais grâce à Alexey Viktorov, j'ai réussi à reproduire le problème décrit par vous lors de l'installation via OnInit(). /* avant cela, il s'avère, comme j'ai vu vos posts/.

Ordre des actions : Comme vous l'avez décritici.

I. Mais avant de décharger le terminal, j'ai changé les graphiques pour les prix les plus frais.

Et j'ai configuré l'indicateur sur deux graphiques d'une paire, avec des délais différents (GBPUSD M5 et GBPUSD H1).

Mes résultats sont les résultats de ces expériences :

1. j'ai d'abord configuré l'indicateur sur le graphique GBPUSD M5, puis - sur le graphique GBPUSD H1. Ensuite, après avoir déplacé les graphiques vers de nouvelles barres, j'ai fermé le terminal lorsque le graphique GBPUSD H1 est actif (c'est-à-dire que le cadre temporel supérieur est actif). Dans ces conditions, si j'ouvre à nouveau le terminal, le graphique est décalé à l'ouverture , sur les barres spécifiées par votre code.

Cependant, si nous fermons le terminal avec le graphique actif de GBPUSD M5 (c'est-à-dire que la trame temporelle inférieure est active) et que nous rouvrons ensuite le terminal, après le chargement du terminal, aucun des deux graphiques n'est déplacé. Les graphiques s'ouvrent sur des barres fraîches. En même temps, pour l'un d'entre eux, j'obtiens le succès, pour l'autre - une erreur :

test 2018 06 26 (GBPUSD,M5)     Alert: Успешно
test 2018 06 26 (GBPUSD,H1)     Alert: Ошибка №4111

Lors des expériences sur les points 1 et 2, après avoir redémarré le terminal et vu les résultats, j'ai supprimé cet indicateur des graphiques, puis je l'ai réinstallé.


3. lorsque j'ai fait les mêmes expériences, mais sans réinstaller l'indicateur à chaque fois, après avoir redémarré le terminal, il n'y a pas de déplacement du graphique après le redémarrage du terminal. Indépendamment du fait qu'il soit actif sur une échelle de temps supérieure ou inférieure. Les graphiques s'ouvrent sur des barres fraîches. Les messages sont les mêmes qu'au point 2(succès et erreur 4111)

II. De plus, j'ai expérimenté l'installation simultanée de l'indicateur sur les deux mêmes graphiques mais sans retourner ces graphiques avant de décharger le terminal sur de nouvelles barres.

Les résultats que j'obtiens : si je ferme/ouvre sur une période supérieure, le graphique de la période supérieure est là où il était avant la fermeture. Celui du bas (non actif) est le plus frais.

Si vous ouvrez/fermez sur un cadre temporel inférieur, celui-ci sera ouvert sur les barres les plus récentes. Les messages sont les mêmes qu'en 2(succès et erreur 4111).


III. Le problème est apparu maintenant avec ce qui suit :

  • J'ai oublié de désactiver le défilement automatique du graphique avant d'installer l'indicateur ;
  • Quand je m'en suis rendu compte, j'ai supprimé l'indicateur et je l'ai réinstallé.

Après cette réinitialisation de l'indicateur, le changement ne s'est pas produit, mais l'alerte a réussi :

test 2018 06 26 (GBPUSD,M5)     Alert: Успешно

Cependant, si avant cette réinstallation de l'indicateur, le défilement automatique était désactivé non pas maintenant, mais quelque temps plus tard, le problème n'était pas détecté.


D'une manière ou d'une autre.

On dirait que vous devriez écrire au Service Desk.

 
Dina Paches:

Il donne un succès pour l'un et une erreur pour l'autre :

Ça, c'est une surprise ! Je n'ai pas encore réussi à obtenir une erreur de ChartNavigate. Mais c'est déjà ça.

Au cœur du problème, apparemment, je commence à comprendre ce qui se passe.

Lorsque vous appelez ChartNavigate() pour la première fois dans OnInit() ou dans OnCalculate(), il est fort probable que toutes les données du graphique n'aient pas encore eu le temps d'être chargées. Néanmoins, le ChartNavigate() a déjà fonctionné et a fonctionné avec succès (à ce moment-là). Les données sont ensuite chargées et affichées sur le graphique, ce qui entraîne un redécoupage complet et un déplacement du graphique vers son début. En conséquence, nous voyons le graphique comme s'il n'avait pas du tout été déplacé par ChartNavigate().

Par conséquent, pour réussir à déplacer le graphique, nous devons déterminer d'une manière ou d'une autre que les données du graphique ne seront plus affichées (en raison de la pagination de l'historique). Ce n'est qu'après avoir établi ce fait que ChartNavigate() peut être appelé.

 
Ihor Herasko:

...

Par conséquent, pour réussir à déplacer le graphique, il faut déterminer d'une manière ou d'une autre que les données du graphique ne doivent plus être affichées (en raison de la pagination de l'historique). Ce n'est qu'après avoir établi ce fait que ChartNavigate() peut être appelé.

Vous avez raison, probablement. Lors du redémarrage du terminal, elle peut devenir pertinente. De plus, lors de mes expériences, je me suis intéressé à l'activation/désactivation du défilement automatique en combinaison avec (ou sans) la réinitialisation de l'indicateur. Une conséquence de ce que j'ai décrit dans le bloc III, à la fin de ce billet. Mais je ne cherche pas encore à approfondir la question. Je dois résoudre mes propres problèmes urgents. Je vais donc passer mon tour pour l'instant.

 
Ihor Herasko:

Mettez-le sur deux graphiques. Malheureusement, les deux fonctionnent de la même manière - les prix les plus récents sont affichés lors du rechargement.

Quel modèle avez-vous ?

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

ChartNavigate à l'initialisation

Alexey Viktorov, 2018.06.25 15:10

J'ai aussi le 1861. Je n'ai réussi à le reproduire qu'une seule fois. Toutes les autres tentatives ont fonctionné sans problème.