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 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 :


Commentaire 0