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:
Verwandte Beiträge
- Uniformitätsfaktor-Indikator für MetaTrader 5: Analysiere deine Preisbewegungen
- Tägliche prozentuale Veränderung in MT5 – Indikator für MetaTrader 5
- Awesome_HTF_Signal: Ihr zuverlässiger Indikator für den MetaTrader 5
- Währungsstärkeindex (CSI) - Ein unverzichtbarer Indikator für MetaTrader 5
- ZigZag Indikator auf Parabol SAR mit Fibonacci und Kanal für MetaTrader 5