Startseite Technischer Indikator Beitrag

ChartObjectsCopyPaste: Grafische Objekte im MetaTrader 5 einfach kopieren

Anhang
52263.zip (7.43 KB, Herunterladen 0 mal)

Einführung

Hast du jemals versucht, grafische Objekte zwischen offenen Charts zu kopieren und einzufügen? Ich wette, das ist dir schon mal passiert. Überraschenderweise bietet MetaTrader keine "Kopieren & Einfügen"-Funktion für Objekte. Die einzige Möglichkeit, einen ähnlichen Effekt zu erzielen, sind Templates (tpl-Dateien), die jedoch den gesamten Chartzustand speichern, einschließlich Indikatoren, Einstellungen und vieler Zusatzinfos, die für den Kopiervorgang irrelevant sein können.

Was ist ChartObjectsCopyPaste?

Deshalb habe ich diesen Indikator ChartObjectsCopyPaste.mq5 entwickelt. Er kopiert die ausgewählten Objekte in die Zwischenablage, von wo sie in andere Charts eingefügt werden können. Ganz ohne Schnickschnack.

Technische Details

Der Indikator basiert auf einem anderen Indikator, der im Algotrading-Buch veröffentlicht wurde - ObjectGroupEdit.mq5.

Folge dem Link, um mehr über die zugrunde liegenden Klassen (ObjectMonitor, MapArray und andere) zu erfahren, die im Hintergrund arbeiten.

Dieser Indikator hat keine Buffer. Du solltest ihn mindestens an zwei Charts anbringen: einem Quell-Chart, von dem du Objekte kopieren möchtest, und einem Ziel-Chart, wo du sie einfügen willst.

Während der Indikator auf einem Chart läuft, verfolgt er die vorhandenen grafischen Objekte und merkt sich, welche davon ausgewählt sind.

Kopieren und Einfügen leicht gemacht

Wie gewohnt funktionieren die "Kopieren & Einfügen"-Befehle in Paaren:

  • Drücke die Tastenkombination Ctrl + Q, um alle ausgewählten Objekte in die Windows-Zwischenablage als Text zu kopieren (du kannst dies in jedem Texteditor speichern und ansehen, ein Beispiel findest du weiter unten).
  • Auf dem Ziel-Chart drücke Ctrl + J, um alle Objekte aus der Zwischenablage einzufügen.

Warum Ctrl + Q/Ctrl + J?

Diese beiden Kombinationen wurden willkürlich aus einer sehr kleinen Auswahl gewählt. Das liegt daran, dass MetaTrader viele Hotkeys abfängt und nicht an MQL-Programme weitergibt. Besonders gilt das für die Standardkombinationen Ctrl + C, Ctrl + V, Ctrl + Ins und Shift + Ins, die in diesem Zusammenhang nicht funktionieren.

Quellcode und Anpassungen

Da der Quellcode verfügbar ist, kannst du die Hotkeys auf andere Kombinationen ändern.

Da der Indikator System-DLLs verwendet, um auf die Windows-Zwischenablage zuzugreifen, solltest du die DLL-Importe im Eigenschaften-Dialog im Tab Abhängigkeiten aktivieren.

Da die Codebase keine DLL-Importe zulässt, ist der Code für die Zwischenablage in eine bedingte Präprozessor-Direktive #ifdef DLL_LINK eingebettet. Bitte dekommentiere die Zeile #define DLL_LINK vor der Kompilierung. Andernfalls siehst du, wie die Funktionsstubs der Zwischenablage dir Warnungen anzeigen, wenn du die Hotkeys drückst, und es werden keine tatsächlichen Aktionen ausgeführt!

Eingaben

  • MakeAllSelectable - Flag, um alle Objekte auswählbar zu machen (was normalerweise für programmatisch erstellte Objekte falsch ist);
  • LogDetails - Flag, um alle Eigenschaften der übertragenen Objekte im Log auszugeben;

Der Indikator überprüft nicht, ob die eingefügten Objekte mit dem tatsächlichen Ziel-Chart übereinstimmen, wie z.B. Symbol, Preisspanne, Anzahl der Unterfenster usw. – das musst du selbst erledigen.

Beispiel für den Text der Zwischenablage

Hier ist ein Beispiel für den Text der Zwischenablage mit 2 Objekten:

OBJ_VLINE       H1 Vertikale Linie 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 Vertikale Linie 5578
6       OBJPROP_TEXT    
206     OBJPROP_TOOLTIP 
OBJ_CHANNEL     H1 Gleichmäßiger Kanal 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 Gleichmäßiger Kanal 40885
6       OBJPROP_TEXT    
206     OBJPROP_TOOLTIP 

Und hier siehst du die eingefügten Objekte auf dem Chart:

2 grafische Objekte auf dem Chart eingefügt

Verwandte Beiträge

Kommentar (0)