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:


Kommentar 0