コンテンツにスキップ

cTraderアルゴリズムのパラメータタイプ

この記事とその対応するビデオでは、cBotとインジケーターでカスタマイズ可能なパラメーターを宣言して使用する方法を実演します。 簡単なインジケーターを開発し、cTrader UIからパラメータを設定する方法を紹介します。 また、cTraderのcBotやインジケーターで使用できるパラメータの種類と、それらがコードでどのように宣言され使用されるかを説明します。

カスタマイズ可能なパラメーター

カスタマイズ可能なパラメーターは、アルゴリズムを追加、開始、または使用する際に設定できる構成可能な値です。 これにより、ソースコードを変更することなく、cBot、インジケーター、プラグインの動作をカスタマイズできます。

cBot、インジケーター、プラグインでのパラメーターの使用

  • cBotでは、ストップロスやテイクプロフィットレベルなど、実行に影響を与える変数や設定を構成できます。
  • インジケーターでは、考慮される期間や使用されるデータソースなど、インジケーターの出力に影響を与える変数を構成できます。
  • プラグインでは、UIオプションや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 UIではドロップダウンメニューとして表示されます。

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

インジケーターをチャートに追加すると、Add instanceウィンドウにすべてのパラメータが表示されるはずです。

追加のパラメータを追加する

標準偏差が完成したので、インジケーターの視覚的なしきい値として機能する水平線を追加することもできます。 この目的のために、さらにいくつかのパラメータを追加する必要があります。

最初のパラメータは、線を表示するかどうかを決定するブール型パラメータです。

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アルゴ取引でのパラメータとその動作を理解するのに役立つことを願っています。