Zum Inhalt

Parametertypen in cTrader Algo

In diesem Artikel und dem dazugehörigen Video zeigen wir Ihnen, wie Sie anpassbare Parameter in Ihren cBots und Indikatoren deklarieren und verwenden können. Wir werden einen einfachen Indikator entwickeln und Ihnen zeigen, wie Sie die Parameter über die cTrader-Benutzeroberfläche konfigurieren. Wir werden auch erklären, welche Art von Parametern Sie in einem cTrader cBot oder Indikator verwenden können, und veranschaulichen, wie diese in Ihrem Code deklariert und verwendet werden.

Anpassbare Parameter

Anpassbare Parameter sind konfigurierbare Werte, die beim Hinzufügen, Starten oder Verwenden eines Algorithmus festgelegt werden können. Sie ermöglichen es Ihnen und anderen Benutzern, das Verhalten von cBots, Indikatoren und Plugins anzupassen, ohne den Quellcode zu ändern.

Verwendung von Parametern in cBots, Indikatoren und Plugins

  • Für cBots können Sie Variablen oder Einstellungen konfigurieren, die die Ausführung beeinflussen, wie z. B. Stop-Loss- und Take-Profit-Levels.
  • Für Indikatoren können Sie Variablen konfigurieren, die die Indikatorausgaben beeinflussen, wie z. B. die berücksichtigten Zeiträume oder die zu verwendende Datenquelle.
  • Für Plugins können Sie Variablen konfigurieren, wie z. B. UI-Optionen oder API-Schlüssel, die bestimmen, wie das Plugin mit der Benutzeroberfläche oder externen Diensten interagiert.

Wie zuvor erläutert, unterstützt cTrader diese Parametertypen:

  • int
  • double
  • string
  • bool
  • DataSeries
  • TimeFrame
  • enum
  • Color
  • DateTime
  • DateOnly
  • TimeSpan
  • Symbol
  • Symbol[] (multi-symbol)
  • Enum[] (multi-enum)
  • TimeFrame[] (multi-period)

Hinweis

Python-Algorithmen verwenden anpassbare Parameter, die in ihren .cs-Dateien deklariert sind.

Erstellen eines einfachen Indikators mit Parametern

Um zu demonstrieren, wie Sie Parameter in benutzerdefinierten Indikatoren verwenden können, erstellen wir einen neuen Indikator und nennen ihn Standard Deviation.

Um die Standardabweichung zu berechnen, müssen wir zunächst den gleitenden Durchschnitt des Preises berechnen. Anschließend deklarieren wir die für einen Indikator für gleitende Durchschnitte erforderlichen Parameter, beginnend mit dem Zeitraum des gleitenden Durchschnitts.

1
public int MaPeriod { get; set; }

Jede öffentliche Eigenschaft, die einen der unterstützten Typen hat, kann zu einem Indikatorparameter werden. Um unsere Eigenschaft MaPeriod in einen Parameter umzuwandeln, müssen wir lediglich die erforderliche Deklaration hinzufügen.

1
2
[Parameter("MA Period")]
public int MaPeriod { get; set; }

Das Attribut Parameter weist cTrader an, diese Eigenschaft als Parameter im Indikatorparameter-Panel unter Verwendung des definierten Namens ("MA Period") darzustellen.

Wie unten gezeigt, ermöglicht Ihnen das Attribut Parameter auch, einige Eigenschaften des Parameters zu definieren, wie z. B. den angezeigten Namen, den Standardwert, die Gruppe, in der dieser Parameter platziert wird, die maximalen und minimalen Werte sowie den Schritt, um den sich der Parameter ändert, wenn die Aufwärts- und Abwärtspfeile gedrückt werden (nur für numerische Werte).

1
2
[Parameter("SMA Period", DefaultValue = 14, Group = "MA", MaxValue = 100, MinValue = 1, Step = 1)]
public int MaPeriod { get; set; }

Wir werden nun die restlichen Parameter hinzufügen, die für einen Indikator für gleitende Durchschnitte erforderlich sind. Der Parameter MaType hilft uns, den Typ des gleitenden Durchschnitts zu bestimmen. Es handelt sich um ein enum, das in der cTrader-Benutzeroberfläche als Dropdown-Menü angezeigt wird.

1
2
[Parameter("MA Type", Group = "MA")]
public MovingAverageType MaType { get; set; }

Der Parameter Source gibt Benutzern die Möglichkeit, die Datenquelle für unseren Indikator für gleitende Durchschnitte anzugeben. Dieser Parameter ist vom Typ DataSeries.

1
2
[Parameter("Source", Group = "MA")]
public DataSeries Source { get; set; }

Nachdem die erforderlichen Parameter deklariert sind, definieren und initialisieren wir unseren gleitenden Durchschnitt.

1
2
3
4
5
6
private MovingAverage movingAverage;

protected override void Initialize()
{
    movingAverage = Indicators.MovingAverage(Source, MaPeriod, MaType);
}

An diesem Punkt sind wir bereit, die Berechnung für unsere Standardabweichung zu implementieren. Die Standard-Codevorlage enthält bereits die Eigenschaft Output, die wir verwenden können, um die Ergebnisse der Berechnung anzuzeigen.

1
2
[Output("Result", LineColor = "Orange")]
public IndicatorDataSeries Result { get; set; }

Zu guter Letzt implementieren wir die Berechnung der Standardabweichung in der Methode Calculate().

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
public override void Calculate(int index)
{
    var average = movingAverage.Result[index];

    double sum = 0;

    for (var period = 0; period < MaPeriod; period++)
    {
        sum += Math.Pow(Source[index - period] - average, 2.0);
    }

    Result[index] = Math.Sqrt(sum / MaPeriod);
}

Wenn wir unseren Indikator zu einem Chart hinzufügen, sollten wir alle unsere Parameter im Fenster Instanz hinzufügen sehen.

Zusätzliche Parameter hinzufügen

Nachdem unsere Standardabweichung abgeschlossen ist, können wir auch eine horizontale Linie hinzufügen, die als visueller Schwellenwert für den Indikator dient. Zu diesem Zweck müssen wir einige weitere Parameter hinzufügen.

Der erste wird ein boolescher Parameter sein, der bestimmt, ob unsere Linie angezeigt wird oder nicht.

1
2
[Parameter("Show Line", DefaultValue = true, Group = "Line")]
public bool ShowLine { get; set; }

Der Parameter LineLevel ermöglicht es uns, das Preisniveau zu bestimmen, auf dem die Linie gezeichnet werden soll.

1
2
[Parameter("Line Level", DefaultValue = 0.001, Step = 0.001, Group = "Line")]
public double LineLevel { get; set; }

Wir fügen auch einen Parameter hinzu, der die Auswahl der Linienfarbe ermöglicht.

1
2
[Parameter("Line Color", DefaultValue = "Blue", Group = "Line")]
public Color LineColor { get; set; }

Mit allen notwendigen Parametern können wir Code schreiben, um die Linie auf dem Chart zu zeichnen, an dem unser Indikator angehängt ist.

1
2
3
4
if (ShowLine)
{
    Chart.IndicatorAreas[0].DrawHorizontalLine("Line", LineLevel, LineColor);
}

Wenn wir den Indikator erneut erstellen und eine neue Instanz hinzufügen, können wir die Linie ein-/ausblenden, sie nach oben oder unten verschieben und die Farbe unserer Wahl als Linienfarbe auswählen.

Wie im folgenden Beispiel gezeigt, können Parameter auch verwendet werden, um sicherzustellen, dass unser Indikator nur angezeigt wird, wenn er zu Charts für einen bestimmten Zeitrahmen hinzugefügt wird.

1
2
[Parameter("Timeframe")]
public TimeFrame TF { get; set; }

In der Methode Initialize() überprüfen wir den Zeitrahmen des Charts, an dem unser Indikator angehängt ist. Wenn er nicht gleich dem Wert des Parameters TF ist, verhindern wir, dass der Indikator angezeigt wird.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
protected override void Initialize()
{
    if (TimeFrame != TF)
        return;

    movingAverage = Indicators.MovingAverage(Source, MaPeriod, MaType);

    if (ShowLine)
    {
        Chart.IndicatorAreas[0].DrawHorizontalLine("Line", LineLevel, LineColor);
    }
}

Wir hoffen, dass dieser Leitfaden hilfreich war, um Parameter und ihre Funktionsweise im algorithmischen Handel mit cTrader zu verstehen.