Dokumentation

Anwendungen

Zuletzt aktualisiert am 15. 4. 2020 von Mark Fric

Benutzerdefinierte Blöcke

Was sind benutzerdefinierte Blöcke?

Mit benutzerdefinierten Blöcken können Sie Ihre eigene Kombination von Blöcken erstellen - und diese Kombination als Ihren eigenen benutzerdefinierten Block speichern.

Schauen Sie sich zum Beispiel den bereits vorhandenen eingebauten Signalblock in StrategyQuant an:

Der CCI steigt

Dieses Signal ist gültig, wenn:

CCI(Zeitraum)[2] < CCI(Zeitraum][1]

wobei der Zeitraum konfigurierbar ist und [2] zwei Takte zurück bedeutet, während [1] einen Takt zurück bedeutet.

Er ist also gültig, wenn der CCI einen Balken zurück höher ist als der CCI zwei Balken zurück - was bedeutet, dass der Wert des CCI steigt.

 

Was ist der Vorteil der Erstellung eigener Blockkombinationen?

Der Wert liegt in der Verringerung der Zufälligkeit durch die Verwendung von Signalen, die einen echten Sinn ergeben.

StrategyQuant könnte eine solche Bedingung nach dem Zufallsprinzip erzeugen, indem es nur Blöcke verwendet CCI und IsLower (<)aber die Chance, dass eine BEDEUTENDE Bedingung zufällig erzeugt wird, ist gering, wenn man bedenkt, wie viele Zufallsmöglichkeiten es gibt.

Ein weiterer Vorteil ist, dass Sie bei der Verwendung von Block Der CCI(Zeitraum) steigtDer CCI-Indikator hat von außen betrachtet nur einen Parameter Period, der in beiden CCI-Indikatoren in der Bedingung verwendet wird.

Sie können StrategyQuant erweitern, indem Sie Ihre eigenen benutzerdefinierten Blöcke wie diesen erstellen, indem Sie ein Snippet in Java-Code machen. Dies ist ein guter Weg, aber nicht jeder ist ein Programmierer.
Seit SQ Build 127 gibt es also eine Möglichkeit, solche benutzerdefinierten Blöcke auf visuelle Weise im AlgoWizard-Editor zu erstellen, ohne sie zu programmieren.

In dieser Dokumentation zeigen wir Ihnen, wie Sie das genau machen.

 

Schritt 1: Definieren Sie Ihren neuen benutzerdefinierten Block

Öffnen Sie in StrategyQuant das eingebettete AlgoWizard (1.), klicken Sie auf Anpassen (2.) oben im Menü. Wechseln Sie dann zu Benutzerdefinierte Blöcke (3.) tab:

Dies ist das Bedienfeld für die Verwaltung und Bearbeitung benutzerdefinierter Blöcke.

Als Beispiel erstellen wir einen neuen benutzerdefinierten Block, der gültig ist, wenn der CCI in 3 aufeinanderfolgenden Bars steigt. In Pseudo-Code können wir diese Bedingung wie folgt schreiben:

CCI(Zeitraum)[3] < CCI(Zeitraum) [2] < CCI(Zeitraum) [1]

 

Klicken Sie auf das Block hinzufügen Schaltfläche. Daraufhin öffnet sich ein Dialog, in dem wir die Parameter unseres neuen Blocks angeben können:

Taste blockieren

ist ein eindeutiger Schlüssel (ID) für diesen Block. Er darf nur aus Buchstaben und Zahlen bestehen, ohne Leerzeichen oder Sonderzeichen. Wir werden unseren neuen Block CCIRising3Bars nennen.

Name des Blocks 

ist sein Name, den wir in der Auswahl der Bausteine sehen werden. Wir nennen ihn CCI rising for 3 bars

Blocktyp 

ist ein Typenblock. Es gibt derzeit zwei unterstützte Typen:

  • Zustand - Block, der einen Wahr/Falsch-Wert zurückgibt, der als Teil der Eingangs- oder Ausgangsbedingungen verwendet werden kann. Normalerweise handelt es sich um einen Vergleich. Blöcke dieses Typs werden im Abschnitt Signale der Bausteine angezeigt.
  • Preisniveau - Block, der Preisniveaus berechnet, die für Stop-/Limit-Orders verwendet werden können. Der Block dieses Typs ist im Abschnitt Stop/Limit-Preisniveaus in der Kategorie Stop/Limit-Eingabeblöcke in der Konfiguration der Bausteine sichtbar.

Klicken Sie auf Speichern Sie und es wird ein neuer benutzerdefinierter Block erstellt:

SQ Benutzerdefinierter Block hinzugefügt

Beachten Sie, dass dieser Block noch leer ist. Wir haben eine Definition erstellt, aber der neue Block hat noch keinen Inhalt.

Fügen wir die erste Bedingung zum Block hinzu, indem wir auf Eine weitere Bedingung hinzufügen:

Benutzerdefinierter Block Bedingung hinzufügen

Es öffnet sich ein Standarddialog, in dem Sie aus allen vorhandenen Bausteinen, die Sie aus dem AlgoWizard-Editor kennen, auswählen können. Finden wir CCI Indikator für unseren ersten Vergleich:

Vergessen Sie nicht, Shift auf 3 zu setzen, denn wir wollen den CCI-Wert von 3 Bars zurück erhalten. Nach einem Klick auf Bestätigen Sie wird der erste Teil unserer benutzerdefinierten Bedingung erstellt:

Klicken Sie nun auf Ist Größer (>) Vergleichsblock und ändern Sie ihn in Ist niedriger (<).

Klicken Sie dann auf 0 Block und ersetzen ihn durch CCI(14)[2].

Wiederholen Sie diese beiden Schritte, um eine zweite Bedingung hinzuzufügen CCI(14)[2] < CCI(14)[1].

Das Ergebnis sollte wie folgt aussehen:

Dies ist eine vollständige Bedingung. Sie ist gültig, wenn der CCI(14) in den letzten 3 Bars gestiegen ist.

Sie haben vielleicht bemerkt, dass die CCI-Periode auf einen festen Wert von 14 eingestellt ist.
Wenn wir diesen benutzerdefinierten Block in seinem aktuellen Zustand verwenden würden, sähe er wie folgt aus:

Unser neuer benutzerdefinierter Block hätte nur den obligatorischen Parameter Chart und keine anderen Parameter.

Dies bedeutet, dass die im Block verwendete CCI-Periode immer 14 ist - die Periode ist nicht zufällig generiert in StrategyQuant, und Sie können sie später nicht mehr konfigurieren.
Bei einigen Parametern mag das der Fall sein, aber wir wollen, dass der CCI-Zeitraum zufällig generiert wird.

An dieser Stelle kommen die benutzerdefinierten Blockparameter ins Spiel. Es gibt Parameter im unteren linken Teil:

Benutzerdefinierte Blockparameter
Momentan enthält sie nur einen Parameter - Tabelle - die für jeden benutzerdefinierten Block obligatorisch ist.
Fügen wir einen neuen Parameter hinzu Zeitraum. Klicken Sie auf Parameter hinzufügen Schaltfläche. Dadurch wird der Tabelle ein neuer Parameter hinzugefügt. Benennen Sie ihn in Periode um und ändern Sie seinen Typ in Periode:

Sie können Ihren Parameter beliebig benennen und haben eine Auswahl an Optionen für einen Typ:

  • Karte - bedeutet, dass es sich um einen Chart-Parameter handelt. Die Indikatoren werden aus den Daten des Charts berechnet, und der Chart-Parameter ermöglicht es uns und StrategyQuant, den zu verwendenden Chart einzustellen.
  • Zeitraum - ein spezieller Typ, der für Indikatorperioden verwendet werden sollte. Es handelt sich um einen separaten Typ, da StrategyQuant wissen muss, dass es sich bei diesem Parameter um eine Periode handelt, damit er durch die im Generator festgelegten Periodengrenzen begrenzt wird.
  • Schicht - ein weiterer spezieller Typ, der für Verschiebungen verwendet werden sollte. Shift ist ein Index für den Verlauf der Balken. Shift=0 bedeutet aktueller Balken, Shift=1 bedeutet vorheriger Balken, Sift=2 bedeutet zwei Balken zurück. Auch hier handelt es sich um einen separaten Typ, da StrategyQuant wissen muss, dass es sich bei diesem Parameter um einen Shift handelt, damit er durch die im Generator festgelegten Perioden-Shift-Grenzen begrenzt wird.
  • int, double, bool - standardmäßig verfügbare Variablentypen

Wir haben einen neuen Parameter für die Periode hinzugefügt, aber er wird noch nicht in unseren benutzerdefinierten Blockbedingungen verwendet, sie haben immer noch den festen Wert 14:

Um den Parameter in der Bedingung zu verwenden, müssen wir auf jede Bedingung doppelklicken, um sie zur Bearbeitung zu öffnen. Klicken Sie dann auf das blaue [...] neben dem Parameter Zeitraum. Es öffnet sich eine Liste, in der Sie aus den möglichen Blockparametern für den Zeitraum wählen können. Wir werden unseren neuen Parameter Periode wählen.

Das Ergebnis ist, dass die Periode in unserem CCI-Indikator nun nicht mehr ein fester Wert ist, sondern mit dem Parameter Periode extern konfigurierbar ist:

Wiederholen Sie diesen Vorgang für die übrigen CCI-Bedingungen, und das Ergebnis sollte wie folgt aussehen:


Auf diese Weise haben wir einen neuen benutzerdefinierten Block namens CCI steigt seit 3 Balken. Nachdem Sie Ihre benutzerdefinierten Blöcke gespeichert haben, können Sie sie sofort im AlgoWizard-Editor verwenden:

Sowie in der Bausteinkonfiguration eines Bauherrn:

Das Gute daran ist, dass Sie nichts weiter tun müssen. Da dieser benutzerdefinierte Block unter Verwendung bereits vorhandener Blockkomponenten erstellt wurde, weiß StrategyQuant, wie der Quellcode dafür für Ihre Ziel-Handelsplattform zu generieren ist.

 

Schritt 2: Festlegen eines gegenüberliegenden Blocks

Wir haben einen neuen benutzerdefinierten Block erstellt CCI steigt seit 3 Balken. Handelsstrategien haben in der Regel Long- und Short-Regeln, wobei die Short-Einstiegsbedingungen den Long-Einstiegsbedingungen entgegengesetzt sind.

Für jeden Standardblock in StrategyQuant ist ein Gegenblock angegeben, so dass SQ "weiß", wie man einen Gegenblock für einen generierten Block erzeugt.

Wenn für den benutzerdefinierten Block kein Gegenblock definiert ist, wird er einfach kopiert und ebenfalls als Gegenblock verwendet.
Ihre Strategiebedingungen würden also wie folgt aussehen:

Long-Einstieg = CCI steigt seit 3 Balken
Short-Einstieg = CCI steigt seit 3 Balken

Normalerweise wollen wir das nicht, wir wollen, dass die Regeln so sind:

Long-Einstieg = CCI steigt seit 3 Balken
Short-Einstieg = CCI fällt seit 3 Balken

Block CCI fällt seit 3 Balken gibt es noch nicht. Damit es funktioniert, müssen wir es schaffen. Zum Glück ist das sehr einfach. Gehen Sie zurück zum Editor für benutzerdefinierte Blöcke und klicken Sie auf Nicht gesetzter Link:

Daraufhin öffnet sich ein Dialog, in dem wir einen neuen benutzerdefinierten Block erstellen können, der als Gegenblock verwendet wird, oder einen bereits vorhandenen Block auswählen können - sofern er existiert.
Wir erstellen einen neuen Block und nennen ihn CCI fällt seit 3 Balken:


Klicken Sie auf Speichern Sie und der neue Block wird erstellt:

Beachten Sie, dass er nicht leer ist - StrategyQuant hat ihn zu Ihrer Bequemlichkeit durch Negieren des ursprünglichen Blocks erstellt. Die Negation ist korrekt, so dass es jetzt nichts mehr zu tun gibt. Wir haben zwei Blöcke so definiert, wie wir es wollten:

 

Aktualisierung der gegenüberliegenden Blöcke

Diese automatische Negierung erfolgt nur einmal, wenn Sie den gegenüberliegenden Block erstellen. Wenn Sie nun einige Änderungen an dem Block vorgenommen haben CCI steigt seit 3 Balkenwerden diese Änderungen nicht auf den gegenüberliegenden Block übertragen. CCI fällt seit 3 Balken automatisch.

Um die Änderungen automatisch zu übernehmen, indem Sie den benutzerdefinierten Quellblock erneut negieren, können Sie zum gegenüberliegenden Block gehen und auf die Schaltfläche Negieren vom gegenüberliegenden Block Taste.

Beachten Sie nur, dass Sie dies auf dem gegenüberliegenden Block tun müssen.
Wenn Sie also den Block CCI steigt seit 3 Balken sollten Sie dann zu einem Block wechseln CCI fällt seit 3 Balken und klicken Sie dort auf den Negieren vom gegenüberliegenden Block um den Inhalt des geänderten Blocks automatisch zu negieren und ihn im gegenüberliegenden Block zu verwenden.

War dieser Artikel hilfreich? Der Artikel war nützlich Der Artikel war nicht nützlich

Abonnieren
Benachrichtigen Sie mich bei
11 Kommentare
Älteste
Neuestes Meistgewählt
Inline-Rückmeldungen
Alle Kommentare anzeigen
tnickel
tnickel
22. 4. 2020 10:25 Uhr

top, sehr gute Idee.

Fernando Morales
Fernando Morales
19. 8. 2020 8:53 pm

Kann ich denselben Block sowohl für KAUF- als auch für VERKAUFssignale verwenden? Ich meine, indem ich den gegenüberliegenden Block nicht erstelle, wird SQ ihn für Käufe/Verkäufe verwenden?

tomas262
tomas262
Antwort an  Fernando Morales
26. 8. 2020 10:52 Uhr

Sie sollten immer den gegenüberliegenden Block definieren. SQ wird ihn verwenden, um "die andere Seite" zu handeln. Es kann aber auch die gleiche Regel sein

Fernando Morales
Fernando Morales
19. 8. 2020 8:56 pm

Wie kann ich einen benutzerdefinierten Block so zuweisen, dass er nur als Exit Rule verwendet wird?

tomas262
tomas262
Antwort an  Fernando Morales
26. 8. 2020 10:51 Uhr

Am besten wäre es, in AlgoWizard eine Vorlage mit definierten Ausstiegsregeln auf der Grundlage des neuen benutzerdefinierten Blocks zu erstellen

PaperoneJ12
8. 1. 2022 5:42 pm

Ist es möglich, den Blockschlüssel nach der Erstellung eines neuen benutzerdefinierten Blocks zu ändern? Wenn ja, wie?

Daniel Eagan
Daniel Eagan
16. 8. 2022 10:00 Uhr

Wie kann ich die Inhalte meiner benutzerdefinierten Blöcke und Zufallsgruppen speichern? Aus irgendeinem Grund sind alle Inhalte in jedem meiner benutzerdefinierten Blöcke verschwunden. Die Parameterwerte bleiben erhalten, aber die Inhalte sind verschwunden. Es wird mich wahrscheinlich 12-15 Stunden Arbeit kosten, all diese Werte wieder einzufügen. Für jede Hilfe wäre ich Ihnen sehr dankbar. Danke!

Daniel Eagan
Daniel Eagan
Antwort an  Daniel Eagan
16. 8. 2022 10:04 Uhr

Vergessen Sie's, ich habe die Registerkarte "Vom Backup laden" gefunden. Gott sei Dank!

Rotlock55
22. 5. 2023 11:56 Uhr

Liegt es an mir oder sind die Bilder auf dem Bildschirm unscharf? Schwierig zu lesen.

Hodei Ostolaza bernedo
Hodei Ostolaza bernedo
5. 2. 2024 5:02 pm

Hello , i have a problem ,
I have created two custom blocks, I have managed to perform tests and works great but when I want to look at the code I get an error. It doesn’t allow me to see the code in any programming language.

error!one ore more block strategies uses isnt implemented in MQL code

tomas262
Verwaltung
Antwort an  Hodei Ostolaza bernedo
6. 2. 2024 5:38 pm

Did you also create TPL – template files for corresponding code? Let us know if any help needed