Home Technische indicator Bericht

Efficiënt Grafische Objecten Kopiëren in MetaTrader 5 met ChartObjectsCopyPaste

Bijlage
52263.zip (7.43 KB, Downloaden 0 keer)

Heb je ooit grafische objecten tussen open grafieken willen kopiëren?

Je bent zeker niet de enige! Het is verrassend dat MetaTrader geen directe "Kopiëren & Plakken" functie biedt voor objecten. De enige manier om een vergelijkbaar resultaat te bereiken, is door gebruik te maken van templates (tpl-bestanden). Maar een template slaat de volledige staat van de grafiek op, inclusief indicatoren, instellingen en allerlei extra's die vaak niet relevant zijn voor wat je wilt kopiëren.

Daarom heb ik de indicator ChartObjectsCopyPaste.mq5 ontwikkeld. Deze indicator kopieert geselecteerde objecten naar het klembord, waar ze vervolgens op andere grafieken geplakt kunnen worden. Geen extra gedoe!

Hoe werkt het?

De indicator is gebaseerd op een andere indicator die gepubliceerd is in het algoritmisch handelsboek - ObjectGroupEdit.mq5.

Wil je meer weten over de achterliggende klassen zoals ObjectMonitor, MapArray en anderen? Volg dan zeker de link!

Gebruik van de indicator

Deze indicator heeft geen buffers en moet aan minstens twee grafieken worden gekoppeld: de bron-grafiek waarvan je de objecten wilt kopiëren, en de doel-grafiek waar je ze wilt plakken.

Terwijl de indicator draait op een grafiek, houdt hij de bestaande grafische objecten in de gaten en noteert hij welke objecten zijn geselecteerd.

Hoe kopiëren en plakken?

Zoals gebruikelijk werken de "Kopiëren & Plakken" commando's in paren:

  1. Druk op de toetsencombinatie Ctrl+Q om alle geselecteerde objecten naar het Windows-klembord te kopiëren als tekst (je kunt dit bekijken in elke teksteditor, en hieronder is een voorbeeld).
  2. Op de doel-grafiek druk je op Ctrl+J om alle objecten van het klembord te plakken.

Waarom Ctrl+Q/Ctrl+J?

Deze twee toetsencombinaties zijn gekozen omdat MetaTrader veel andere sneltoetsen niet doorgeeft aan MQL-programma's. Dit geldt vooral voor de standaard toetsen zoals Ctrl+C/Ctrl+V/Ctrl+Ins/Shift+Ins, die in deze context niet werken.

Aangezien de broncode beschikbaar is, kun je de sneltoetsen aanpassen naar andere combinaties.

Let op: omdat de indicator systeem-DLL's gebruikt om toegang te krijgen tot het Windows-klembord, moet je DLL-imports toestaan in het Eigenschappen dialoogvenster, op het Afhankelijkheden tabblad.

Vanwege de beperkingen van de Codebase met DLL-imports, is de gerelateerde code rondom het klembord ingepakt in een voorwaardelijke preprocessor-directief #ifdef DLL_LINK, dus zorg ervoor dat je deze regel ontcommentarieert:
#define DLL_LINK
voordat je compileert. Anders krijg je meldingen te zien bij het indrukken van de sneltoetsen, zonder dat er daadwerkelijk iets gebeurt!

Instellingen

  • MakeAllSelectable - vlag om alle objecten selecteerbaar te maken (standaard is dit niet het geval voor objecten die programmatisch zijn aangemaakt);
  • LogDetails - vlag om alle eigenschappen van de overgedragen objecten naar de log te sturen;

De indicator controleert niet of de geplakte objecten passen bij de doel-grafiek, zoals symbool, prijsrange, aantal subvensters, enzovoort - dat moet je zelf doen.

Voorbeeld van klembordtekst

Hier is een voorbeeld van klembordtekst met twee objecten:

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.1     1726797600
8.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.1     -21.708185053380777
9.2     -48.04270462633452
enum ENUM_OBJECT_PROPERTY_STRING
5     OBJPROP_NAME     H1 Equidistant Channel 40885
6     OBJPROP_TEXT     
206     OBJPROP_TOOLTIP 

En hier zijn deze objecten geplakt op de grafiek:

2 grafische objecten geplakt op grafiek via klembord

Gerelateerde berichten

Reactie (0)