Przejdź do treści

Parametry konfigurowalne w algorytmach Pythona

Podczas tworzenia botów handlowych w Pythonie, wskaźników technicznych lub wtyczek, może być konieczne dodanie i skonfigurowanie konfigurowalnych parametrów. Ten artykuł wyjaśnia, jak deklarować i używać parametrów konfigurowalnych w algorytmie Pythona dla cTrader.

Uwaga

Model wykonania dla algorytmów Pythona w cTrader obejmuje silnik .NET/C#, który wymaga, aby wszystkie parametry konfigurowalne były zadeklarowane w plikach .cs. Za każdym razem, gdy tworzysz algorytm Pythona w cTrader, plik .cs dla tego algorytmu jest generowany automatycznie i przechowywany w odpowiednim folderze.

Lokalizacja

Lokalizacja pliku .cs dla algorytmu Pythona zależy od typu algorytmu, czy jest to cBot, wskaźnik czy wtyczka, a także od nazwy algorytmu.

  • Dla cBotów: Documents/cAlgo/Sources/Robots/{cBot-name}/{cBot-name}/
  • Dla wskaźników: Documents/cAlgo/Sources/Indicators/{Indicator-name}/{Indicator-name}/
  • Dla wtyczek: Documents/cAlgo/Sources/Indicators/{Plugin-name}/{Plugin-name}/

Możesz postępować zgodnie z tymi instrukcjami, aby zlokalizować plik .cs dla algorytmu Pythona:

  1. Kliknij prawym przyciskiem myszy algorytm w cTrader Windows lub Mac, a następnie wybierz Pokaż w folderze.

  2. Przejdź przez {name-of-algorithm}/{name-of-algorithm}, a następnie zidentyfikuj plik .cs (plik źródłowy C#) z listy plików.

Plik .cs zazwyczaj ma taką samą nazwę jak algorytm, ze wszystkimi usuniętymi spacjami. Na przykład algorytm o nazwie Amazing Aroon cBot skutkuje plikiem AmazingArooncBot.cs.

Wskazówka

W tym samym folderze możesz uzyskać dostęp do głównego kodu Pythona dla swojego algorytmu, przechowywanego w pliku .py, takim jak Amazing Aroon cBot_main.py. Plik Pythona jest zgodny z prostą konwencją nazewnictwa:

  • Dla cBotów: cBot-name_main.py
  • Dla wskaźników: Indicator-name_main.py
  • Dla wtyczek: Plugin-name_main.py

Zawartość

Otwórz plik .cs w dowolnym edytorze tekstu lub kodu, takim jak NotePad lub Visual Studio Code, a powinieneś(-naś) zobaczyć kod podobny do tego:

 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; }
}

Uwaga

Zobaczysz pustą klasę, jeśli utworzyłeś(-aś) swojego cBota w Pythonie od podstaw bez użycia szablonu.

Każdy parametr zadeklarowany w pliku .cs może być używany w głównym pliku Pythona, który zawiera kod wyświetlany w edytorze kodu. Poniższy główny kod Pythona ilustruje użycie parametrów konfigurowalnych:

 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)

Zalety

Główną zaletą parametrów konfigurowalnych jest to, że pojawiają się one jako edytowalne pola w interfejsie użytkownika wszystkich aplikacji cTrader, w tym cTrader Windows, Mac, Web i Mobile. Wartości w tych polach można łatwo modyfikować, aby dostosować je do dowolnych potrzeb lub operacji, bez konieczności uzyskiwania dostępu do kodu źródłowego algorytmu lub jego modyfikowania.

W cTrader Store, sprzedający często używają parametrów konfigurowalnych, aby zapewnić, że kupujący algorytmów są w stanie dostosować algorytmy do swoich celów i przepływów pracy.

Image title