cTrader Automate【cBotの作成と動作】

cBotの動作

cBotは、さまざまなテクニカル分析のシグナルに基づいて、あらゆる種類の操作を実行するようにカスタマイズできる自動トレードツールです。

より専門的に言えば、cBotはカスタマイズ可能なパラメータとメソッドを持つC#のクラスです。クローズまでの動作を完全に定義することができます。

cBotに取引操作を行わせるには、そのインスタンスを作成し、任意の取引チャートにアタッチする必要があります。インスタンスは、特定のcBotオブジェクトへの参照と考えることができます。

cBotは、ローカルマシンに新しいファイルを作成するなど、取引とは関係のないアクションを実行することもできます。C#と.NETに慣れてくると、その知識を応用して複雑なワークフローを持つ高度なエクステンションを作成することも可能です。

cBotのバックテスト

cTrader Automateでは、バックテストと呼ばれるプロセスで、cBotに過去の市場データで取引させることができます。バックテストがどのように機能するかについては、別のセクションで説明します。

動作マップ

以下は、新しいcBotを作成し、実行するアクションの流れを示しています。

  1. cBotの新規追加
  2. サンプルコードを編集
  3. ビルドして保存
  4. インスタンスの作成とカスタマイズ
  5. cBotインスタンス動作

cBotの新規追加

「cBot」タブの検索バーの右にある「新規」を選択します。

cTrader Automateは、サンプルコードを含む新しいcBotを自動的に作成します。
cBotのリスト下部に「New cBot」という拡張子が追加されているはずです。

新しいボットを選択して F2 キーを押すと、名前を変更できます。
または、新しい拡張子を右クリックして「名前を変更」を選択します。

サンプルコード編集

新しいボットをクリックして、以下のコードを含むコードエディタウィンドウを開きます。

1using System;
2using System.Linq;
3using cAlgo.API;
4using cAlgo.API.Indicators;
5using cAlgo.API.Internals;
6using cAlgo.Indicators;
7
8namespace cAlgo.Robots
9{
10  [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
11  public class NewcBot : Robot
12  {
13    [Parameter(DefaultValue = 0.0)]
14    public double Parameter { get; set; }
15
16    /* This method performs an action of your choosing
17    when a cBot is launched. */
18    protected override void OnStart()
19    {
20      // Put your initialization logic here
21    }
22
23    /* This method performs an action of your choosing
24    every tick. */
25    protected override void OnTick()
26    {
27      // Put your core logic here
28    }
29
30    /* This method performs an action of your choosing
31    when a cBot stops working. */
32    protected override void OnStop()
33    {
34      // Put your deinitialization logic here
35    }
36  }
37}

前に説明したように、cBotの属性 Robot は、TimeZone や AccessRights などのオプションのプロパティとともに、cBot クラス(NewcBot)宣言の前に置かれます。

OnStart() メソッドは、cBot のインスタンスが起動するたびに呼び出されます。次に、OnTick() メソッドがティックごとに呼び出されます。最後に、OnStop() メソッドは、新しい cBot のインスタンスが動作を停止するたびに呼び出されます。

OnTick()メソッドはティックごとに特定のアクションを実行するため、CPUに負荷がかかります。
多くの場合、特に株式や株価指数を取引する場合、ティックごとに取引操作を実行する必要性は現実的にはほとんどありません。

その代わりに、OnTick() メソッドを OnBar() メソッドに置き換えることができます。
その名前からわかるように、このメソッドはバーの開始時にのみ呼び出されるため、CPU負荷が大幅に軽減されます。

上記はcBotの動作を設定するために使用できるメソッドの一部です。
C#を使い始めたばかりであれば、これらを使うのが最も簡単で理解しやすいでしょう。
cBotをコーディングする際に使用できるクラス、メソッド、プロパティの詳細については、「参考文献」のセクションを参照してください。さらに、C#と.NET基礎で紹介したように、カスタムメソッドを書くこともできます。

同じ結果を得るには、以下のコードを名前空間宣言の後にコピー・アンド・ペーストしてください。

1  [Robot()]
2  public class Sample_cBot : Robot
3  {
4    protected override void OnStart()
5    {
6      var result = ExecuteMarketOrder(TradeType.Buy, SymbolName, 10000);
7
8      if (result.IsSuccessful)
9      {
10        var position = result.Position;
11        Print(“Position entry price is {0}”, position.EntryPrice);
12      }
13    }
14  }

cBotの保存

コード・エディター・ウィンドウの上と右にある「保存」ボタンをクリックするか、Ctrl+Sを押してコードを保存できます。また、コードエディター内の任意の場所で右クリックし、新しく開いたメニューから「保存」を選択することもできます。

コードを使用する前に、コードを動作する cBot に変換する必要があります。
cBotをビルドするには、コードエディターの上部またはcBotメニューにある「ビルド」アイコンをクリックします。この操作のキーボードショートカットは Ctrl+B です。

ビルドが成功すると、それを確認するメッセージが「ビルド結果」ビューアに表示されます。ビルドに失敗した場合は、このウィンドウにビルド時に発生したエラーの概要が表示されます。「ビルド結果」ビューアでエラーの説明をクリックすると、そのエラーが発生したコードの正確な場所が表示されます。

前回のビルド以降にコードに変更があった場合は、「ビルド」アイコンの横に赤い「*」記号が表示されます。この場合は、ボットを実行する前にもう一度ビルドしてください。

cBotインスタンスの作成とカスタマイズ

上記のすべてのアクションが正常に完了した場合、cBotは取引の準備ができているはずです。

使用を開始するには、以下のいずれかの操作を行って新しいインスタンスを作成します。

  • エクステンション名の右にある「+」アイコンをクリックします。表示されるメニューで、取引したいシンボルを選択します。
  • cTraderは、インスタンスが実行されることになっているローソク足チャートのタイムフレームとしてh1を使用して、EURUSDシンボルを取引する新しいインスタンスを自動的に作成します。

cBotの真下に新しいインスタンスが表示されるはずです。

コードにカスタマイズ可能なパラメータを指定した場合、それらはトレードウォッチ表示の左側にある「パラメーター」タブに表示されます。インスタンスを実行する前に、これらのパラメータを確認してください。

「パラメーター」タブの右上にある「保存」アイコンをクリックして、現在のパラメータ値をローカルに保存された.cbotsetファイルに保存することができます。

また、「フォルダ」アイコンを押して、既存の.cbotsetファイルからパラメータ値をアップロードすることもできます。

cBotインスタンスの実行

新しく作成したインスタンスを実行するには、インスタンス名の右にある青い「cBotを起動」ボタンを押します。cBotやインジケーターを初めて使用する場合は、警告ウィンドウが表示されます。

「アルゴリズム取引の仕組みを理解しました…」フラグにチェックを入れ、「OK」を押します。プロンプトが表示されたら、cBotに必要なアクセス権を与えます。

新しく作成したインスタンスを停止するには、赤い「cBotを停止」ボタンを押します。

停止中に限り、インスタンスのシンボルやタイムフレームを変更できます。現在実行中のインスタンスのパラメータを変更することはできません。