cTrader Algoにおけるパラメータータイプ

cBots (自動売買)

この記事とその付随するビデオでは、cBotおよびインディケーターでパラメーターを宣言および使用する方法を示します。シンプルなインディケーターを開発し、そのパラメーターをcTraderのUIから設定する方法を示します。また、cTraderのcBotやインディケーターで使用できるパラメーターの種類と、それらをコード内でどのように宣言して使用するかを説明します。

パラメーターの定義

パラメーターは、チャートにインディケーターを追加するときやcBotを実行する前にユーザーが設定できる設定可能な値です。パラメーターは、cBotやインディケーターにとって便利な機能であり、アルゴリズムの設定を「ハードコーディング」せずに行うことができます。

インディケーターでのパラメーターの使用

インディケーターでは、パラメーターを使用して、考慮する期間や使用するデータソースなど、インディケーターの出力に影響を与える変数を設定できます。

cBotでのパラメーターの使用

cBotでは、ストップロスやテイクプロフィットレベルなど、実行に影響を与える設定を構成するためにパラメーターを使用できます。

このチュートリアルで示されているように、cTraderは8つのパラメータータイプをサポートしています。

  • int
  • double
  • string
  • bool
  • DataSeries
  • TimeFrame
  • enum
  • Color

注意

異なるパラメータータイプはcTraderのUIで異なる形で表示されます。

パラメーターを使用したシンプルなインディケーターの作成

カスタムインディケーターでパラメーターを使用する方法を示すために、新しいインディケーターを作成し、「標準偏差」と呼びます。

標準偏差を計算するには、まず価格の移動平均を計算する必要があります。その後、移動平均インディケーターに必要なパラメーターを宣言し、移動平均期間から始めます。

1
public int MaPeriod { get; set; }

サポートされているタイプの公開プロパティは、インディケーターのパラメーターになることができます。MaPeriodプロパティをパラメーターに変換するには、必要な宣言を追加するだけです。

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

Parameter属性は、このプロパティをインディケーターのパラメーターパネルに定義された名前("MA Period")で表示するようにcTraderに指示します。

以下に示すように、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);
}

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

追加のパラメーターの追加

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

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

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アルゴトレーディングでどのように機能するかを理解するのに役立ったことを願っています。他の機能について学ぶには、詳細な技術ドキュメントを参照し、新しいビデオを公開するたびに通知を受けるためにYouTubeチャンネルを購読してください。

目次

このページについて