Inicio Indicador técnico Publicación

ChartObjectsCopyPaste: Copia y Pega Gráficos en MetaTrader 5

Archivos adjuntos
52263.zip (7.43 KB, Descargar 0 veces)

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

2 objetos gráficos pegados en gráfico a través del portapapeles

Publicaciones relacionadas

Comentarios (0)