Перейти к содержанию

Настраиваемые параметры в алгоритмах Python

При разработке торговых ботов на Python, технических индикаторов или плагинов вам может потребоваться добавить и настроить настраиваемые параметры. В этой статье объясняется, как объявлять и использовать настраиваемые параметры в алгоритме Python для cTrader.

Примечание

Модель выполнения для алгоритмов Python в cTrader включает движок .NET/C#, который требует, чтобы все настраиваемые параметры были объявлены в файлах .cs. Каждый раз, когда вы создаете алгоритм Python в cTrader, файл .cs для этого алгоритма генерируется автоматически и сохраняется в соответствующей папке.

Расположение

Расположение файла .cs для алгоритма Python зависит от типа алгоритма — сиБот, индикатор или плагин, а также от имени алгоритма.

  • Для сиБотов: Documents/cAlgo/Sources/Robots/{cBot-name}/{cBot-name}/
  • Для индикаторов: Documents/cAlgo/Sources/Indicators/{Indicator-name}/{Indicator-name}/
  • Для плагинов: Documents/cAlgo/Sources/Indicators/{Plugin-name}/{Plugin-name}/

Вы можете следовать этим инструкциям, чтобы найти файл .cs для алгоритма Python:

  1. Щелкните правой кнопкой мыши по алгоритму в cTrader Windows или Mac, затем выберите Показать в папке.

  2. Перейдите в {name-of-algorithm}/{name-of-algorithm}, затем найдите файл .cs (исходный файл C#) в списке файлов.

Файл .cs обычно имеет то же имя, что и алгоритм, но без пробелов. Например, алгоритм с названием Amazing Aroon cBot создает файл AmazingArooncBot.cs.

Совет

В той же папке вы можете получить доступ к основному коду Python для вашего алгоритма, который хранится в файле .py, например Amazing Aroon cBot_main.py. Файл Python следует простому соглашению об именовании:

  • Для сиБотов: cBot-name_main.py
  • Для индикаторов: Indicator-name_main.py
  • Для плагинов: Plugin-name_main.py

Содержимое

Откройте файл .cs в любом текстовом редакторе или редакторе кода, таком как NotePad или Visual Studio Code, и вы увидите код, похожий на этот:

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

Примечание

Вы увидите пустой класс, если создали своего сиБота на Python с нуля без использования шаблона.

Любой параметр, объявленный в файле .cs, может быть использован в основном файле Python, который содержит код, отображаемый в редакторе кода. Основной код Python ниже иллюстрирует использование настраиваемых параметров:

 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)

Преимущества

Основное преимущество настраиваемых параметров заключается в том, что они отображаются как редактируемые поля в пользовательском интерфейсе всех приложений cTrader, включая cTrader Windows, Mac, Web и Mobile. Значения в этих полях можно легко изменить в соответствии с любыми потребностями или операциями без необходимости доступа к исходному коду алгоритма или его изменения.

В cTrader Store продавцы часто используют настраиваемые параметры, чтобы покупатели алгоритмов могли настраивать алгопродукты в соответствии со своими целями и рабочими процессами.

Image title