MetaTrader5
ChartObjectsCopyPaste : L'outil ultime pour copier-coller vos objets graphiques sur MetaTrader 5
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" :
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).
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 :
2024.09.21