ChartObjectsCopyPaste: Copia y Pega Gráficos en MetaTrader 5

Mike 2024.09.21 02:59 49 0 0
Archivos adjuntos

¿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       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 Línea Vertical 55786       OBJPROP_TEXT    
206     OBJPROP_TOOLTIPOBJ_CHANNEL     H1 Canal Equidistante 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 Equidistante 408856       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

Lista
Comentarios 0