Dokumentation

Anwendungen

Zuletzt aktualisiert am 18. 5. 2020 von Mark Fric

ForceIndex Signalblöcke

Unser neues ForceIndex Indikator ist implementiert, aber wie bereits erwähnt, ist er nur im Abschnitt Zufallsindikatoren-Signale verfügbar. Dies bedeutet, dass es zufällig mit allen Vergleichen und zufälligen numerischen Werten kombiniert wird.

In StrategyQuant X sollten Sie Signale bevorzugen - das sind vordefinierte Bedingungen, die z.B. einen Indikator verwenden:

Der Indikator steigt
Der Indikator fällt

Indikator kreuzt über Niveau
Indikator kreuzt unter Niveau

Die Verwendung von vordefinierten Signalen hat viele Vorteile, einer davon ist, dass es die Freiheitsgrade verringert und es Ihnen ermöglicht, Bedingungen festzulegen, die im Handel wirklich Sinn machen. SQ wird dann diese vordefinierten Bedingungen verwenden, anstatt zu versuchen, die gesamte Bedingung zufällig zu generieren.

Im Folgenden zeigen wir, wie Sie Ihre eigenen Signale erstellen können, die einen bereits implementierten Indikator verwenden - in unserem Fall ForceIndex. Für dieses Beispiel werden wir zwei einfache Signale implementieren:

ForceIndex ist größer als Null - sollte auf einen Aufwärtstrend hindeuten
ForceIndex ist kleiner als Null - sollte auf einen Abwärtstrend hindeuten

 

Schritt 1 - Erstellen eines neuen Signals im Code-Editor

Wie der Indikator ist auch das Signal ein Snippet, das in SQ programmiert werden muss. Öffnen Sie CodeEditor, klicken Sie auf Create new und erstellen Sie ein neues Snippet mit dem Namen ForceIndexAboveZero. Wählen Sie Signal als Snippet-Typ, und ForceIndex als Indikator, auf dem das Signal beruht.

Dadurch wird ein neues Snippet erstellt ForceIndexAboveZero.java und legt es im Ordner SQ -> Blöcke -> Indikatoren -> FoceIndex ab.

Wenn wir uns den Code ansehen, werden Sie feststellen, dass der Code viel einfacher ist als der Code für den Indikator selbst. Er hat auch Parameter, die mit den Parametern des Indikators übereinstimmen sollten, und dann nur eine Methode OnBlockEvaluate(), die wahr oder falsch zurückgeben sollte, je nachdem, ob das Signal gültig oder falsch ist.

Bitte beachten Sie, dass die Vorlage für Standardsignale möglicherweise nicht zu Ihrem Indikator passt, wie es in diesem Fall der Fall ist. Wenn Sie versuchen würden, ihn zu kompilieren, würden Sie Kompilierungsfehler erhalten, weil der Aufruf des Indikators Strategy.Indicators.ForceIndex(Input, Period) in der Methode OnBlockEvaluate() nicht alle erforderlichen Parameter verwendet.

In den nächsten Schritten werden wir die defaukt-Vorlage so anpassen, dass sie mit ForceIndex funktioniert

 

 

Implementierung korrekter ForceIndex-Parameter

Wenn Sie sich den ForceIndex-Indikator ansehen, werden Sie feststellen, dass er Parameter hat: Chart, Periode, MAMethode, AppliedPrice.

Wir müssen die gleichen Parameter auch auf unser neues Signal übertragen:

public class ForceIndexAboveZero extends ConditionBlock {

    @Parameter
    public ChartData Chart;

    @Parameter(defaultValue="10", isPeriod = true, minValue=2, maxValue=1000, step=1)
    public int Period;

    @Parameter(name="Methode", defaultValue="0")
    @Editor(type=Editors.Selection, values="Simple=0,Exponential=1,Smoothed=2,Linear weighted=3")
    public int MAMethod;

    @Parameter(defaultValue="0")
    @Editor(type=Editors.Selection, values="Close=0,Open=1,High=2,Low=3,Median=4,Typical=5,Weighted=6")
    public int AppliedPrice;

 

oder Sie können auch einige der Parameter weglassen und stattdessen ihren festen Wert verwenden. Das Anlegen eines Parameters bedeutet, dass er im Assistenten bearbeitet werden kann und die SQ in der Lage ist, Zufallswerte für diesen Parameter zu erzeugen.

Es gibt einen weiteren Parameter, den wir hinzufügen sollten:

    @Parameter
    public int Shift;

Im Gegensatz zum Indikator-Snippet wird der Shift-Parameter in Signalen standardmäßig nicht verwendet und muss explizit hinzugefügt werden.

 

Implementierung der Methode OnBlockEvaluate

Nachfolgend sehen Sie eine Implementierung der Methode OnBlockEvaluate() für unser Signal. Wie Sie sehen können, ist es ziemlich einfach - Sie müssen nur den Indikator durch den Aufruf von Strategy.Indicator.ForceIndex(...) mit den richtigen Parametern abrufen, und dann einfach seinen Wert bei der angegebenen Verschiebung abrufen und mit Null vergleichen.

    @Override
    public boolean OnBlockEvaluate() throws TradingException {

        ForceIndex indicator = Strategy.Indicators.ForceIndex(Chart, Period, MAMethod, AppliedPrice);
        double value = indicator.Value.getRounded(Shift);

        return (Wert > 0);
    }

Das ist alles, unser neues Signal ist jetzt fertig, wir können auf Compile klicken und es sollte erfolgreich kompiliert werden.

 

ForceIndexBelowZero implementieren

In gleicher Weise sollten wir auch die ForceIndexBelowZero. Der einzige Unterschied zum vorherigen Signal besteht darin, dass der Vergleich in OnBlockEvaluate() Methode entgegengesetzt sein wird:

return (Wert < 0);

Kompilieren Sie nun auch das zweite Signal und starten Sie dann SQ neu. Wenn Sie sich die Bausteine ansehen, sollten Sie einen neuen Abschnitt für ForceIndex in den Signalen sehen, mit unseren zwei neuen Signalen:

 

 

 

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

Abonnieren
Benachrichtigen Sie mich bei
0 Kommentare
Inline-Rückmeldungen
Alle Kommentare anzeigen