ChartObjectsCopyPaste: Grafische Objekte im MetaTrader 5 einfach kopieren

Mike 2024.09.21 02:59 46 0 0
Anhang

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       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 Vertikale Linie 55786       OBJPROP_TEXT    
206     OBJPROP_TOOLTIPOBJ_CHANNEL     H1 Gleichmäßiger Kanal 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 Gleichmäßiger Kanal 408856       OBJPROP_TEXT    
206     OBJPROP_TOOLTIP

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

2 grafische Objekte auf dem Chart eingefügt

Liste
Kommentar 0