Scripts: sChartsSynchroScroll

 

sChartsSynchroScroll:

Le script permet un défilement synchrone de tous les graphiques ouverts dans le terminal.

sChartsSynchroScroll

Author: Dmitry Fedoseev

[Supprimé]  

Est-ce que je comprends bien que ce script fonctionne simultanément avec des graphiques de différentes échéances (comme c'est le cas ici)?

Le style du code rappelle MQL4. Et ce n'est pas une mauvaise chose. Je vous remercie de votre attention.

[Supprimé]  

Il y a un problème de désynchronisation des graphiques à gauche et à droite de la ligne de temps totale. J'aimerais que les barres soient synchronisées par temps sur toute la largeur du graphique.

Je suggère aux développeurs de réfléchir à nouveau (peut-être de soumettre la question à la discussion) à la possibilité de visualiser le graphique avec et sans barres "à trous". Dans ce cas, il s'agirait uniquement d'une visualisation, c'est-à-dire que les barres "à trous" ne seraient pas disponibles dans MQL5.

 

Dmitry, il serait probablement plus facile de le faire via CHARTEVENT_CLICK au lieu de faire une boucle...

Voici un exemple de synchronisation des graphiques d'une même devise

//------------------------------------------------------------------ OnChartEvent
void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
{
 if (id==CHARTEVENT_CLICK)
 {
   long cid=ChartFirst();
   long fbar=ChartGetInteger(ChartID(), CHART_FIRST_VISIBLE_BAR);
   datetime tm[], tm1[];
   int rez=CopyTime(Symbol(), Period(), 0, fbar, tm); if (rez<fbar) return;
   while (cid!=-1)
   {
    ChartSetInteger(cid, CHART_AUTOSCROLL, false); ChartSetInteger(cid, CHART_SHIFT, false);
    if (cid!=ChartID() && ChartSymbol(cid)==Symbol()) 
    {
     rez=CopyTime(ChartSymbol(cid), ChartPeriod(cid), TimeCurrent(), tm[0], tm1); if (rez<0) break;
     ChartNavigate(cid, CHART_END, rez-ChartGetInteger(cid, CHART_WIDTH_IN_BARS)+2);
     ChartRedraw(cid);
    }
    cid=ChartNext(cid);
   }
 }
}

et c'est tout !

 
getch:

Est-ce que je comprends bien que ce script fonctionne simultanément avec des graphiques de différentes échéances (comme c'est le cas ici)?

Le style du code rappelle MQL4. Et ce n'est pas une mauvaise chose. Je vous remercie !


Il fonctionnera avec différents horizons temporels.
 
sergeev:

Dimitri, il serait probablement plus facile de le faire via CHARTEVENT_CLICK au lieu de faire une boucle...

Voici un exemple de synchronisation des graphiques d'une même devise

et c'est tout !

Tout n'est pas si simple. Votre fonction synchronise les barres sur le bord gauche du graphique, ce qui n'est pas très pratique pour l'étude visuelle de l'histoire. Vous devriez également désactiver le décalage du graphique, ce qui n'est pas non plus très pratique (bien que ce soit une question de goût). Les développeurs devraient ajouter la possibilité d'obtenir et de définir l'indentation à partir du bord droit ou la navigation par temps en général, de nombreuses fonctions sont faites dans un style si universel que l'on peut passer le numéro de la barre ou le temps. De plus, l'événement n'est traité que pour le graphique sur lequel le script fonctionne.

----------------------------------------------------------------------------------------------------------------

OnChartEvent

OnChartEvent() est un gestionnaire du groupe d'événements ChartEvent :

...

...

La fonction ne peut être appelée que dans les AE et doit avoir un type void et 4 paramètres :

----------------------------------------------------------------------------------------------------------------

Lagestion des événements ne fonctionne que dans les conseillers experts. Il ne peut y avoir qu'un seul Expert Advisor sur un graphique, vous ne devriez pas prendre la place d'un Expert Advisor avec des outils auxiliaires et pratiquement inutiles. Je suis convaincu que les outils auxiliaires qui ne sont pas directement liés à l'exécution des transactions ne doivent pas être conçus sous la forme d'Expert Advisors, à l'exception de quelques cas d'extrême nécessité.

 
Integer:

OnChartEvent

OnChartEvent() est un gestionnaire pour le groupe d'événements ChartEvent :

...

...

Lafonction ne peut être appelée que dans les Expert Advisors et doit avoir un type void et 4 paramètres :

----------------------------------------------------------------------------------------------------------------

Le traitement des événements ne fonctionne que dans les conseillers experts. Il ne peut y avoir qu'un seul Expert Advisor sur un graphique, vous ne devez pas prendre la place d'un Expert Advisor avec des outils auxiliaires et pratiquement inutiles. Je suis convaincu que les outils auxiliaires qui ne sont pas directement liés à l'exécution des transactions ne doivent pas être conçus sous la forme de conseillers experts, à quelques exceptions près qui sont d'une extrême nécessité.

Ce n'est plus le cas, gardez un œil sur les annonces - https://www.mql5.com/ru/forum/23/page4 :

MetaTrader 5 Client Terminal build 245

  1. Terminal : Correction d'une erreur dans la comptabilisation des fonds de marge libre dans les actifs (dans l'onglet Exposition).
  2. Terminal : Correction du fonctionnement de la propriété "Chart on foreground".
  3. Terminal : Correction et refonte de la fenêtre d'aperçu d'impression pour le graphique.
  4. Terminal : Correction d'un bug dans le travail avec des variables globales temporaires.
  5. Terminal : Combinaison des barres d'outils "Standard" et "Graphiques".
  6. MQL5 : Corrections sur les crashs et les messages du forum
  7. MQL5 : Modification du principe de fonctionnement des fonctions Copy* pour les Expert Advisors et les scripts - maintenant les fonctions attendent le téléchargement et la construction des données demandées. Le temps d'attente pour les données demandées ne dépassera pas 30 secondes. Une description plus détaillée sera disponible dans l'aide de MQL5 dans un avenir proche.
  8. MQL5 : Ajout de la possibilité de traiter les événements par des indicateurs personnalisés, similaires aux Expert Advisors. Une description plus détaillée sera disponible dans l'aide de MQL5 dans un futur proche.

.

 
Integer писал(а) :

Ce n'est pas si simple. Votre fonction synchronise les barres sur le bord gauche du graphique, ce qui n'est pas très pratique pour l'étude visuelle de l'histoire.

Mais il est possible de synchroniser les barres sur n'importe quel bord et de fournir au trader des boutons pour choisir - par le centre, par la droite, par la gauche....

Le déplacement du graphique devrait également être désactivé, ce qui n'est pas non plus très pratique (bien que ce soit une question de goût).

Les développeurs devraient ajouter la possibilité d'obtenir et de définir l'indentation à partir du bord droit ou la navigation par temps en général, de nombreuses fonctions sont faites dans un style universel tel que vous pouvez passer le numéro de la barre ou le temps.

Cette fonctionnalité est d'ailleurs disponible. CHART_SHIFT_SIZE

voir l'exemple ObjChartSample.mq5

 

Il semble qu'il y ait un problème avec CHART_FIRST_VISIBLE_BAR.

Si vous faites ChartNavigate() sur un nombre manifestement plus grand que le nombre sur lequel vous pouvez visualiser le graphique, alors

ChartGetInteger(ChartID(),CHART_FIRST_VISIBLE_BAR) devient supérieur à Bars(ChartSymbol(ChartID()),ChartPeriod(ChartID())).

Exemple dans le script 2.mq5. Exécutez le script, attendez un peu.

Dossiers :
2.mq5  2 kb
 

quelque chose me dit que le terminal n'est pas à la hauteur.

parce que si vous relancez le script immédiatement, il fonctionne la première fois.

Il faut peut-être contrôler le temps

Peut-être que SeriesInfoInteger peut aider ?

[Supprimé]  
Integer, sergeev, d'après vos posts, j'ai l'impression extrêmement désagréable que MQL5 et MT5 sont assez bruts.