Zum Inhalt

Anpassbare Parameter in Python-Algorithmen

Bei der Entwicklung von Python-Handels-Bots, technischen Indikatoren oder Plugins müssen Sie möglicherweise anpassbare Parameter hinzufügen und konfigurieren. Dieser Artikel erklärt, wie Sie anpassbare Parameter in einem Python-Algorithmus für cTrader deklarieren und verwenden.

Hinweis

Das Ausführungsmodell für cTrader-Python-Algorithmen umfasst eine .NET/C#-Engine, die erfordert, dass alle anpassbaren Parameter innerhalb von .cs-Dateien deklariert werden. Jedes Mal, wenn Sie einen Python-Algorithmus in cTrader erstellen, wird automatisch eine .cs-Datei für diesen Algorithmus generiert und im entsprechenden Ordner gespeichert.

Speicherort

Der Speicherort der .cs-Datei für einen Python-Algorithmus hängt vom Algorithmustyp ab, ob es sich um einen cBot, Indikator oder Plugin handelt, sowie vom Namen des Algorithmus.

  • Für cBots: Documents/cAlgo/Sources/Robots/{cBot-name}/{cBot-name}/
  • Für Indikatoren: Documents/cAlgo/Sources/Indicators/{Indicator-name}/{Indicator-name}/
  • Für Plugins: Documents/cAlgo/Sources/Indicators/{Plugin-name}/{Plugin-name}/

Sie können diese Anweisungen befolgen, um die .cs-Datei für einen Python-Algorithmus zu finden:

  1. Klicken Sie mit der rechten Maustaste auf den Algorithmus in cTrader Windows oder Mac und wählen Sie dann Im Ordner anzeigen.

  2. Navigieren Sie durch {name-of-algorithm}/{name-of-algorithm} und identifizieren Sie dann die .cs-Datei (C#-Quelldatei) aus der Liste der Dateien.

Die .cs-Datei hat normalerweise denselben Namen wie der Algorithmus, wobei alle Leerzeichen entfernt wurden. Beispielsweise führt ein Algorithmus mit dem Namen Amazing Aroon cBot zu einer AmazingArooncBot.cs-Datei.

Tipp

Im selben Ordner können Sie auf den Python-Hauptcode für Ihren Algorithmus zugreifen, der in einer .py-Datei wie Amazing Aroon cBot_main.py gespeichert ist. Die Python-Datei folgt einer einfachen Namenskonvention:

  • Für cBots: cBot-Name_main.py
  • Für Indikatoren: Indikator-Name_main.py
  • Für Plugins: Plugin-Name_main.py

Inhalt

Öffnen Sie die .cs-Datei in einem beliebigen Text- oder Code-Editor, wie NotePad oder Visual Studio Code, und Sie sollten einen Code ähnlich diesem sehen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
using cAlgo.API;

namespace cAlgo.Robots;

[Robot(AccessRights = AccessRights.None, AddIndicators = true)]
public partial class AmazingArooncBot : Robot
{
    [Parameter("Volume (Lots)", DefaultValue = 0.01)]
    public double VolumeInLots { get; set; }

    [Parameter("Stop Loss (Pips)", DefaultValue = 10, MaxValue = 100, MinValue = 1, Step = 1)]
    public double StopLossInPips { get; set; }

    [Parameter("Take Profit (Pips)", DefaultValue = 10, MaxValue = 100, MinValue = 1, Step = 1)]
    public double TakeProfitInPips { get; set; }

    [Parameter("Label", DefaultValue = "AmazingArooncBot")]
    public string Label { get; set; }

    [Parameter("Periods", DefaultValue = 25, Group = "Aroon", MinValue = 2)]
    public int Periods { get; set; }
}

Hinweis

Sie sehen eine leere Klasse, wenn Sie Ihren Python-cBot von Grund auf ohne Verwendung einer Vorlage erstellt haben.

Jeder in der .cs-Datei deklarierte Parameter kann in der Python-Hauptdatei verwendet werden, die den im Code-Editor angezeigten Code enthält. Der Python-Hauptcode unten veranschaulicht die Verwendung der anpassbaren Parameter:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import clr

clr.AddReference("cAlgo.API")

# Import cAlgo API types
from cAlgo.API import *

# Import trading wrapper functions
from robot_wrapper import *

class AmazingArooncBot():
    def on_start(self):
        self.volumeInUnits = api.Symbol.QuantityToVolumeInUnits(api.VolumeInLots)
        self.aroon = api.Indicators.Aroon(api.Periods)

    def on_bar_closed(self):
        if self.aroon.Up.Last(0) > self.aroon.Down.Last(0) and self.aroon.Up.Last(1) < self.aroon.Down.Last(1):
            self.close_positions(TradeType.Sell)
            api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, self.volumeInUnits, api.Label, api.StopLossInPips, api.TakeProfitInPips)
        elif self.aroon.Up.Last(0) < self.aroon.Down.Last(0) and self.aroon.Up.Last(1) > self.aroon.Down.Last(1):
            self.close_positions(TradeType.Buy)
            api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, self.volumeInUnits, api.Label, api.StopLossInPips, api.TakeProfitInPips)

    def get_bot_positions(self):
        return api.Positions.FindAll(api.Label)

    def close_positions(self, tradeType):
        for position in self.get_bot_positions():
            if position.TradeType != tradeType:
                continue
            api.ClosePosition(position)

Vorteile

Der Hauptvorteil anpassbarer Parameter besteht darin, dass sie als bearbeitbare Felder in der Benutzeroberfläche aller cTrader-Apps erscheinen, einschließlich cTrader Windows, Mac, Web und Mobile. Die Werte in diesen Feldern können einfach angepasst werden, um jedem Bedarf oder Vorgang gerecht zu werden, ohne dass auf den Quellcode des Algorithmus zugegriffen oder dieser geändert werden muss.

Im cTrader Store verwenden Verkäufer häufig anpassbare Parameter, um sicherzustellen, dass Käufer von Algorithmen die Algorithmen an ihre Ziele und Arbeitsabläufe anpassen können.

Image title