cBotsでインジケーターを使用する方法

cBots (自動売買)

この記事(および上のビデオ)では、cBotsで組み込みのインジケーターを使用する方法について説明します。cBotでインジケーターを使用する目的はさまざまですが、特にインジケーターの出力に基づいて取引決定を行うことが主な目的です。これを実証するために、相対力指数(RSI)に基づいたシンプルな自動取引戦略を開発します。

新しいcBotの作成

新しいcBotを作成するには、’Algo‘アプリケーションに切り替え、’New cBot‘をクリックします。

cBotの名前を「RSI cBot」に変更します。以下が我々の自動取引戦略の機能です。

  • RSIインジケーターが事前に設定した閾値を下回ったときに、ボットは買いポジションを取ります。
  • RSIインジケーターが事前に設定した閾値を上回ったときに、ボットは売りポジションを取ります。

インジケーターの定義と初期化

まず、cBotクラスでRSIインジケーターを定義する必要があります。これを行うには、新しいフィールドを宣言します。

1
private RelativeStrengthIndicator rsi;

クラスメンバーの使用

rsiフィールドはcBot内でのみ使用されるため、安全にプライベートにすることができます。

すべてのcTraderインジケーターは、使用する前に初期化する必要があります。これは、cBotが実行を開始した後にインジケーターの出力にアクセスできるように、OnStart()メソッドの本体で行うのが最適です。cTraderは、組み込みインジケーターを簡単に初期化できる便利なクラスを提供しています。これを行う方法を見る前に、RSIインジケーターの初期化に必要な2つのパラメーターを追加します。

1
2
3
4
5
[Parameter("Source", Group = "RSI")]
public DataSeries Source { get; set; }
[Parameter("Periods", Group = "RSI", DefaultValue = 14)]
public int Periods { get; set; }

パラメーターを追加したので、インジケーターを初期化する準備が整いました。

1
2
3
4
protected override void OnStart()
{
    rsi = Indicators.RelativeStrengthIndex(Source, Periods);
}

取引ロジックの実装

インジケーターを初期化したので、呼び出して取引ロジックに使用できます。RSIインジケーターの場合、Resultsコレクションを使用して出力を読み取ることができます。

これを行うために、OnBar()メソッドを使用し、以下の条件を実装します。

  • 現在のRSI値がRSI買いレベルを下回った場合、新しい買いポジションを取ります。
  • 現在のRSI値がRSI売りレベルを上回った場合、新しい売りポジションを取ります。

事前に設定された閾値に依存して取引ロジックを実行するため、cBotにさらに2つのパラメーターを追加します。

1
2
3
4
5
[Parameter("Buy Level", Group = "RSI", DefaultValue = 30)]
public int BuyLevel { get; set; }
[Parameter("Sell Level", Group = "RSI", DefaultValue = 70)]
public int SellLevel { get; set; }

次に、cBotコードに条件を実装します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
protected override void OnBarClosed()
{
    if (rsi.Result.LastValue < BuyLevel)
    {
    // 買いポジションを取る
    }
    else if (rsi.Result.LastValue > SellLevel)
    {
    // 売りポジションを取る
    }
}

取引注文を実行するための補助メソッドを実装する時が来ました。これはコードの可読性と再利用性を向上させるために、コードに追加の抽象レベルを作成するために行います。

まず、ユーザーが取引量を決定できるようにするためのcBotパラメーターをもう一つ追加します。

1
2
[Parameter("Quantity (Lots)", Group = "Volume", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
public double Quantity { get; set; }

その後、cBotが指定した方向で開いたすべてのポジションを新しく開いたポジションと閉じるためのOpen()およびClose()メソッドを追加します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
private void Open(TradeType tradeType)
{
    var position = Positions.Find("SampleRSI", SymbolName, tradeType);
    var volumeInUnits = Symbol.QuantityToVolumeInUnits(Quantity);

    if (position == null)
        ExecuteMarketOrder(tradeType, SymbolName, volumeInUnits, "RSI cBot");
}
private void Close(TradeType tradeType)
{
    foreach (var position in Positions.FindAll("SampleRSI", SymbolName, tradeType))
        ClosePosition(position);
}

補助メソッドを使用して、自動取引戦略を完成させます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
protected override void OnTick()
{
    if (rsi.Result.LastValue < BuyLevel)
    {
        Close(TradeType.Sell);
        Open(TradeType.Buy);
    }
    else if (rsi.Result.LastValue > SellLevel)
    {
        Close(TradeType.Buy);
        Open(TradeType.Sell);
    }
}

cBotのバックテスト

cBotのコーディングが完了したら、ビルドして’Backtesting‘タブに切り替え、過去のデータでのパフォーマンスを確認します。バックテストの詳細については、ここをクリックしてください。

現在のチャートに相対力指数を取り付けて、ボットが実行した取引が意図したエントリーポイントと一致しているかどうかを確認することもできます。

cBotsの使用と開発に関する詳細については、他のドキュメントセクションを参照し、新しいビデオを公開したときに通知を受け取るためにYouTubeチャンネルに登録してください。

目次

このページについて