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

Mike 2024.09.21 02:59 17 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       0
enum ENUM_OBJECT_PROPERTY_INTEGER
0       OBJPROP_COLOR   55295
1       OBJPROP_STYLE   2
2       OBJPROP_WIDTH   1
3       OBJPROP_BACK    0
4       OBJPROP_SELECTED        1
7       OBJPROP_TYPE    0
8       OBJPROP_TIME    1726739940
10       OBJPROP_SELECTABLE      1
11       OBJPROP_CREATETIME      1726847009
12       OBJPROP_TIMEFRAMES      2097151
200     OBJPROP_LEVELS  0
207     OBJPROP_ZORDER  0
208     OBJPROP_HIDDEN  0
1032    OBJPROP_RAY     1
enum ENUM_OBJECT_PROPERTY_DOUBLE
9       OBJPROP_PRICE   1.11449
enum ENUM_OBJECT_PROPERTY_STRING
5       OBJPROP_NAME    H1 Ligne verticale 5578
6       OBJPROP_TEXT    
206     OBJPROP_TOOLTIP 
OBJ_CHANNEL     H1 Canal équidistant 40885    5       1
enum ENUM_OBJECT_PROPERTY_INTEGER
0       OBJPROP_COLOR   255
1       OBJPROP_STYLE   0
2       OBJPROP_WIDTH   1
3       OBJPROP_BACK    0
4       OBJPROP_SELECTED        1
7       OBJPROP_TYPE    5
8       OBJPROP_TIME    1726758000
8       OBJPROP_TIME.1  1726797600
8       OBJPROP_TIME.2  1726758000
10      OBJPROP_SELECTABLE      1
11      OBJPROP_CREATETIME      1726847883
12      OBJPROP_TIMEFRAMES      2097151
200     OBJPROP_LEVELS  0
207     OBJPROP_ZORDER  0
208     OBJPROP_HIDDEN  0
1003    OBJPROP_RAY_LEFT        0
1004    OBJPROP_RAY_RIGHT       0
1031    OBJPROP_FILL    0
enum ENUM_OBJECT_PROPERTY_DOUBLE
9       OBJPROP_PRICE   -28.113879003558715
9       OBJPROP_PRICE.1 -21.708185053380777
9       OBJPROP_PRICE.2 -48.04270462633452
enum ENUM_OBJECT_PROPERTY_STRING
5       OBJPROP_NAME    H1 Canal équidistant 40885
6       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