¿Alguna vez has necesitado copiar y pegar objetos gráficos entre gráficos abiertos?
Seguro que sí. Sorprendentemente, MetaTrader no ofrece una función de "Copiar y Pegar" para objetos. Lo único que puedes utilizar para lograr un efecto similar son las plantillas (archivos tpl). Pero las plantillas almacenan todo el estado del gráfico, incluidos indicadores, configuraciones y otros elementos auxiliares que pueden ser irrelevantes y innecesarios para el procedimiento de replicación que necesitas.
Por eso desarrollé este indicador ChartObjectsCopyPaste.mq5. Te permite copiar objetos seleccionados al portapapeles, desde donde puedes pegarlos en otros gráficos. ¡Sin complicaciones!
Cómo Funciona el Indicador
Este indicador se basa en otro indicador publicado en el libro de algotrading - ObjectGroupEdit.mq5.
Si deseas más información sobre las clases subyacentes (ObjectMonitor, MapArray y otras), sigue el enlace.
Este indicador no tiene búferes. Debe ser adjuntado a al menos 2 gráficos: el gráfico fuente del que deseas copiar objetos y el gráfico objetivo donde planeas pegarlos.
Mientras se está ejecutando en un gráfico, el indicador rastrea los objetos gráficos existentes y toma nota de cuáles están seleccionados.
Comandos de "Copiar y Pegar"
Como de costumbre, los comandos "Copiar y Pegar" funcionan en pareja:
- Presiona la tecla Ctrl+Q para copiar todos los objetos seleccionados en el portapapeles de Windows como texto (puedes guardarlo y verlo en cualquier editor de texto, aquí tienes un ejemplo más abajo).
- En el gráfico objetivo, presiona Ctrl+J para pegar todos los objetos desde el portapapeles.
¿Por qué Ctrl+Q/Ctrl+J? Estas son solo 2 combinaciones de teclas vacías elegidas voluntariamente entre muy pocas opciones. Esto se debe a que MetaTrader intercepta y no propaga muchas combinaciones de teclas a los programas MQL. Particularmente, esto sucede con los comandos estándar Ctrl+C/Ctrl+V/Ctrl+Ins/Shift+Ins, que no funcionan en este contexto.
Como el código fuente está disponible, puedes cambiar las combinaciones de teclas a otras que prefieras.
Como el indicador utiliza DLL del sistema para acceder al portapapeles de Windows, debes permitir las importaciones de DLL en el diálogo de Propiedades, en la pestaña Dependencias.
Dado que la Codebase no permite importaciones de DLL, el código relacionado con el portapapeles está envuelto en la directiva de preprocesador condicional #ifdef DLL_LINK, así que por favor descomenta la línea
#define DLL_LINK
antes de compilar. De lo contrario, verás cómo las funciones de portapapeles mostrarán alertas en respuesta a la presión de las teclas, ¡y no se realizarán acciones reales!
Entradas del Indicador
- MakeAllSelectable - bandera para hacer todos los objetos seleccionables (lo cual normalmente es falso para aquellos objetos creados programáticamente);
- LogDetails - bandera para registrar todas las propiedades de los objetos transferidos en el log;
El indicador no verifica si los objetos pegados coinciden con el gráfico objetivo real, como símbolo, rango de precios, número de ventanas secundarias, etc. - ¡tú debes hacerlo!
Ejemplo de Texto del Portapapeles
Aquí tienes un ejemplo de texto del portapapeles con 2 objetos:
OBJ_VLINE H1 Línea Vertical 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 Línea Vertical 5578 6 OBJPROP_TEXT 206 OBJPROP_TOOLTIP OBJ_CHANNEL H1 Canal Equidistante 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 Equidistante 40885 6 OBJPROP_TEXT 206 OBJPROP_TOOLTIP
Y aquí están esos objetos pegados en el gráfico:

Publicaciones relacionadas
- Ideal ZigZag: Un Indicador Rápido para MetaTrader 5
- AFL_Winner_HTF_Signal: Tu guía para señales de trading en MetaTrader 5
- ChandelierStops_v1_HTF_Signal: Tu guía para señales de trading en MetaTrader 5
- BinaryWave_HTF_Signal: El Indicador Clave para MetaTrader 5
- Alertas de Señales con el Indicador Iin_MA para MetaTrader 5