Hai mai desiderato copiare e incollare oggetti grafici tra grafici aperti? Scommetto di sì! Sorprendentemente, MetaTrader non offre una funzione di "Copia & Incolla" per gli oggetti. L'unica opzione simile è quella dei template (file .tpl), ma questi memorizzano l'intero stato del grafico, inclusi indicatori, impostazioni e tanta altra roba che potrebbe non essere necessaria per il tuo lavoro.
Ed ecco perché ho sviluppato l'indicatore ChartObjectsCopyPaste.mq5. Questo strumento ti permette di copiare oggetti selezionati negli appunti, da dove possono essere incollati su altri grafici. Niente di più semplice!
L'indicatore si basa su un altro indicatore pubblicato nel libro di algotrading - ObjectGroupEdit.mq5. Se vuoi approfondire, segui il link per scoprire di più sulle classi sottostanti (ObjectMonitor, MapArray e altre) che lavorano in background.
Questo indicatore non ha buffer. Deve essere applicato a almeno 2 grafici: il grafico sorgente da cui desideri copiare gli oggetti e il grafico target dove prevedi di incollarli.
Mentre è attivo su un grafico, l'indicatore tiene traccia degli oggetti grafici esistenti e annota quali sono stati selezionati.
Come di consueto, i comandi "Copia & Incolla" funzionano in coppia:
- Premi il tasto Ctrl+Q per copiare tutti gli oggetti selezionati negli appunti di Windows come testo (puoi salvarlo e visualizzarlo in qualsiasi editor di testo, di seguito trovi un esempio).
- Su un grafico target, premi Ctrl+J per incollare tutti gli oggetti dagli appunti.
Perché Ctrl+Q/Ctrl+J? Queste sono semplicemente 2 combinazioni di tasti vacanti scelte tra le poche disponibili. Questo perché MetaTrader intercetta e non propaga molte scorciatoie a programmi MQL. In particolare, i classici Ctrl+C/Ctrl+V/Ctrl+Ins/Shift+Ins non funzionano in questo contesto.
Essendo il codice sorgente disponibile, puoi cambiare le combinazioni di tasti a tuo piacimento.
Poiché l'indicatore utilizza le DLL di sistema per accedere agli appunti di Windows, devi abilitare gli import delle DLL nella finestra di dialogo Proprietà, nella scheda Dipendenze.
Dato che il Codebase non consente import delle DLL, il codice relativo agli appunti è avvolto in una direttiva del preprocessore condizionale #ifdef DLL_LINK, quindi assicurati di decommentare la seguente riga:
#define DLL_LINK
prima della compilazione. Altrimenti, vedrai come le funzioni degli appunti ti mostreranno avvisi in risposta alla pressione delle scorciatoie, senza che vengano eseguite azioni reali!
Le opzioni di input sono:
- MakeAllSelectable - flag per rendere tutti gli oggetti selezionabili (che normalmente è falso per quegli oggetti creati programmaticamente);
- LogDetails - flag per stampare tutte le proprietà degli oggetti trasferiti nel log;
L'indicatore non verifica se gli oggetti incollati corrispondono effettivamente al grafico target, come simbolo, intervallo di prezzo, numero di finestre secondarie, ecc. - dovrai farlo tu stesso.
Ecco un esempio del testo degli appunti con 2 oggetti:
OBJ_VLINE H1 Vertical Line 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 Vertical Line 5578 6 OBJPROP_TEXT 206 OBJPROP_TOOLTIP OBJ_CHANNEL H1 Equidistant Channel 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 Equidistant Channel 40885 6 OBJPROP_TEXT 206 OBJPROP_TOOLTIP
Ecco invece come appaiono questi oggetti incollati sul grafico:

Post correlati
- Indice di Volatilità Chaikin: Scegli il Giusto Algoritmo di Smussamento per MetaTrader 5
- Volatilità Stocastica: Indicatore per MetaTrader 5 da Utilizzare sul Grafico
- Indicatore di Equità e Bilancio per MetaTrader 5: Monitoraggio della Tua Performance di Trading
- Notis: L'Indicatore per Misurare la Volatilità su MetaTrader 5
- Utilità per Serie e Informazioni sulle Rate in MetaTrader 5