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

Типы параметров в cTrader Algo

В этой статье и соответствующем видео мы покажем, как вы можете объявлять и использовать настраиваемые параметры в ваших сиБотах и индикаторах. Мы разработаем простой индикатор и покажем вам, как настраивать параметры из пользовательского интерфейса cTrader. Мы также объясним, какие типы параметров вы можете использовать в сиБоте или индикаторе cTrader, и проиллюстрируем, как они объявляются и используются в вашем коде.

Настраиваемые параметры

Настраиваемые параметры — это конфигурируемые значения, которые можно задать при добавлении, запуске или использовании алгоритма. Они позволяют вам и другим пользователям настраивать поведение сиБотов, индикаторов и плагинов без изменения исходного кода.

Использование параметров в сиБотах, индикаторах и плагинах

  • Для сиБотов вы можете настраивать переменные или параметры, влияющие на выполнение, такие как уровни стоп-лосса и тейк-профита.
  • Для индикаторов вы можете настраивать переменные, влияющие на выходные данные индикатора, такие как рассматриваемые периоды или используемый источник данных.
  • Для плагинов вы можете настраивать переменные, такие как параметры пользовательского интерфейса или ключи API, которые определяют, как плагин взаимодействует с интерфейсом или внешними сервисами.

Как объяснялось ранее, cTrader поддерживает следующие типы параметров:

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

Примечание

Алгоритмы Python используют настраиваемые параметры, объявленные в их файлах .cs.

Создание простого индикатора с параметрами

Чтобы продемонстрировать, как вы можете использовать параметры в пользовательских индикаторах, мы создадим новый индикатор и назовем его Standard Deviation.

Для расчета стандартного отклонения нам сначала нужно рассчитать скользящую среднюю цены. Затем мы объявим параметры, необходимые для индикатора скользящей средней, начиная с периода скользящей средней.

1
public int MaPeriod { get; set; }

Любое публичное свойство, имеющее один из поддерживаемых типов, может стать параметром индикатора. Чтобы превратить наше свойство MaPeriod в параметр, все, что нам нужно сделать, — это добавить необходимое объявление.

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

Атрибут Parameter указывает cTrader представить это свойство как параметр на панели параметров индикатора, используя определенное имя ("MA Period").

Как показано ниже, атрибут Parameter также позволяет вам определить некоторые свойства параметра, такие как отображаемое имя, значение по умолчанию, группа, в которую будет помещен этот параметр, максимальное и минимальное значения, а также шаг, на который параметр будет изменяться при нажатии стрелок вверх и вниз (только для числовых значений).

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

Теперь мы добавим остальные параметры, необходимые для индикатора скользящей средней. Параметр MaType поможет нам определить тип скользящей средней. Это enum, который будет отображаться как выпадающее меню в пользовательском интерфейсе cTrader.

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

Параметр Source даст пользователям возможность указать источник данных для нашего индикатора скользящей средней. Этот параметр имеет тип DataSeries.

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

Теперь, когда необходимые параметры объявлены, мы определим и инициализируем нашу скользящую среднюю.

1
2
3
4
5
6
private MovingAverage movingAverage;

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

На этом этапе мы готовы реализовать расчет для нашего стандартного отклонения. Шаблон кода по умолчанию уже содержит свойство Output, которое мы можем использовать для отображения результатов расчета.

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

И наконец, мы реализуем расчет стандартного отклонения в методе 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);
}

Если мы добавим наш индикатор на график, то увидим все наши параметры в окне Добавить экземпляр.

Добавление дополнительных параметров

Завершив работу над нашим стандартным отклонением, мы также можем добавить горизонтальную линию, которая будет служить визуальным порогом для индикатора. Для этого нам потребуется добавить еще несколько параметров.

Первым будет логический параметр, который будет определять, будет ли наша линия отображаться или нет.

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

Параметр LineLevel позволит нам определить ценовой уровень, на котором должна быть нарисована линия.

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

Мы также добавим параметр, позволяющий выбрать цвет линии.

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

Когда все необходимые параметры будут на месте, мы можем написать код для рисования линии на графике, к которому прикреплен наш индикатор.

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

Если мы снова соберем индикатор и добавим новый экземпляр, мы сможем скрывать/показывать линию, перемещать ее вверх или вниз и выбирать цвет линии по своему усмотрению.

Как показано в примере ниже, параметры также можно использовать для того, чтобы наш индикатор отображался только при добавлении на графики для определенного таймфрейма.

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

В методе Initialize() мы проверим таймфрейм графика, к которому прикреплен наш индикатор. Если он не равен значению параметра TF, мы предотвратим отображение индикатора.

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

Мы надеемся, что это руководство помогло вам понять параметры и то, как они работают в алгоритмической торговле cTrader.