ChartObjectsCopyPaste : L'outil ultime pour copier-coller vos objets graphiques sur MetaTrader 5

Mike 2024.09.21 02:59 37 0 0
Pièce jointe

Salut les traders ! Avez-vous déjà eu besoin de copier et coller des objets graphiques entre plusieurs graphiques ouverts ? Je suis sûr que oui ! Étonnamment, MetaTrader ne propose pas de fonctionnalité de "Copier & Coller" pour les objets. La seule solution qui s'en rapproche est l'utilisation de templates (fichiers tpl). Cependant, ces templates enregistrent l'état complet du graphique, y compris les indicateurs, les paramètres, et tout un tas de choses qui peuvent être superflues pour ce que vous souhaitez vraiment faire.

C'est pourquoi j'ai développé cet indicateur ChartObjectsCopyPaste.mq5. Il vous permet de copier les objets sélectionnés dans le presse-papiers, afin de les coller sur d'autres graphiques. Pas de complications !

Cette solution est basée sur un autre indicateur publié dans le livre d'algotrading - ObjectGroupEdit.mq5.

Pour en savoir plus sur toutes les classes sous-jacentes (ObjectMonitor, MapArray et d'autres), n'hésitez pas à suivre le lien.

Un petit point technique : cet indicateur n'a pas de buffers. Il doit être attaché à au moins deux graphiques : le graphique source d'où vous souhaitez copier les objets, et le graphique cible sur lequel vous prévoyez de les coller.

En cours d'exécution sur un graphique, l'indicateur suit les objets graphiques existants et note lesquels sont sélectionnés.

Comment utiliser les commandes "Copier & Coller" :

  1. Appuyez sur la touche Ctrl+Q pour copier tous les objets sélectionnés dans le presse-papiers de Windows sous forme de texte (vous pouvez sauvegarder et visualiser cela dans n'importe quel éditeur de texte, un exemple est donné ci-dessous).
  2. Sur le graphique cible, appuyez sur Ctrl+J pour coller tous les objets depuis le presse-papiers.

Pourquoi Ctrl+Q/Ctrl+J ? Ce sont simplement deux combinaisons de touches libres choisies parmi très peu. En effet, MetaTrader intercepte et ne transmet pas beaucoup de raccourcis aux programmes MQL. En particulier, les combinaisons standard Ctrl+C/Ctrl+V/Ctrl+Ins/Shift+Ins ne fonctionnent pas dans ce contexte.

Comme le code source est disponible, vous pouvez modifier les raccourcis selon vos préférences.

Attention : Comme l'indicateur utilise des DLL système pour accéder au presse-papiers de Windows, vous devez autoriser les imports de DLL dans la boîte de dialogue Propriétés, sur l'onglet Dépendances.

Étant donné que le Codebase n'autorise pas les imports de DLL, le code lié au presse-papiers est encapsulé dans une directive de préprocesseur conditionnelle #ifdef DLL_LINK. Pensez donc à décommenter la ligne #define DLL_LINK avant la compilation. Sinon, vous risquez de voir des alertes en réponse à vos pressions sur les touches sans que les actions ne soient exécutées !

Options de l'indicateur :

  • MakeAllSelectable - Un indicateur pour rendre tous les objets sélectionnables (ce qui est normalement faux pour les objets créés par programmation);
  • LogDetails - Un drapeau pour afficher toutes les propriétés des objets transférés dans le journal;

L'indicateur ne vérifie pas si les objets collés correspondent au graphique cible réel, comme le symbole, la plage de prix, le nombre de sous-fenêtres, etc. - c'est à vous de le faire.

Exemple de texte du presse-papiers avec 2 objets :

OBJ_VLINE       H1 Ligne verticale 5578   0       0enumENUM_OBJECT_PROPERTY_INTEGER0       OBJPROP_COLOR   552951       OBJPROP_STYLE   22       OBJPROP_WIDTH   13       OBJPROP_BACK    04       OBJPROP_SELECTED        17       OBJPROP_TYPE    08       OBJPROP_TIME    172673994010       OBJPROP_SELECTABLE      111       OBJPROP_CREATETIME      172684700912       OBJPROP_TIMEFRAMES      2097151200     OBJPROP_LEVELS  0207     OBJPROP_ZORDER  0208     OBJPROP_HIDDEN  01032    OBJPROP_RAY     1enumENUM_OBJECT_PROPERTY_DOUBLE9       OBJPROP_PRICE   1.11449enumENUM_OBJECT_PROPERTY_STRING5       OBJPROP_NAME    H1 Ligne verticale 55786       OBJPROP_TEXT    
206     OBJPROP_TOOLTIPOBJ_CHANNEL     H1 Canal équidistant 40885    5       1enumENUM_OBJECT_PROPERTY_INTEGER0       OBJPROP_COLOR   2551       OBJPROP_STYLE   02       OBJPROP_WIDTH   13       OBJPROP_BACK    04       OBJPROP_SELECTED        17       OBJPROP_TYPE    58       OBJPROP_TIME    17267580008       OBJPROP_TIME.1  17267976008       OBJPROP_TIME.2  172675800010      OBJPROP_SELECTABLE      111      OBJPROP_CREATETIME      172684788312      OBJPROP_TIMEFRAMES      2097151200     OBJPROP_LEVELS  0207     OBJPROP_ZORDER  0208     OBJPROP_HIDDEN  01003    OBJPROP_RAY_LEFT        01004    OBJPROP_RAY_RIGHT       01031    OBJPROP_FILL    0enumENUM_OBJECT_PROPERTY_DOUBLE9       OBJPROP_PRICE   -28.1138790035587159       OBJPROP_PRICE.1 -21.7081850533807779       OBJPROP_PRICE.2 -48.04270462633452enumENUM_OBJECT_PROPERTY_STRING5       OBJPROP_NAME    H1 Canal équidistant 408856       OBJPROP_TEXT    
206     OBJPROP_TOOLTIP

Et voici les objets collés sur le graphique :

2 objets graphiques collés sur le graphique via le presse-papiers

Liste
Commentaire 0