cBotsの主要な種類

cBotsは、そのコードとロジックに応じて、完全に自動化された取引から手動取引戦略の実装をサポートするまで、さまざまな役割と機能を果たすことができる多目的なツールです。この記事と対応するビデオでは、cBotsの主要なタイプを定義し、それらの主な違いを概説し、さまざまなタイプのcBotsを作成および使用するためのベストプラクティスをいくつか紹介します。

cBotsの主要なタイプの定義

広く言えば、cBotsには4つの主要なタイプが存在します。

注記

以下のカテゴリは、cBotの動作に基づいて純粋に異なります。実際のcBotコード内にはカテゴリは指定されていません。さらに、一部の開発者はカスタム分類のcBotsを作成することもあります。

  • 自動取引戦略. 名前が示すように、このタイプのcBotsは自律的に取引戦略を実行します。たとえば、‘三羽の黒いカラスと三兵の白い兵士’ cBotは、3本の連続した緑のローソク足が現れた後に新しい買い注文を出し、3本の連続した赤いローソク足が現れたときに新しい売り注文を出します。
  • スクリプト. このタイプのcBotsは、開始時にアクションを実行し、実行が完了すると停止します。たとえば、スクリプトcBotは、方向、ボリューム、または銘柄に関係なく、現在のすべてのオープンポジションにストップロスを設定することができます。
  • 取引アシスタント. 取引アシスタントは、手動または自動取引戦略を補完するための役立つアクションを実行するように設計されています。たとえば、このタイプのcBotは、cTraderの組み込みトレーリングストップ機能とは異なるカスタムルールを使用して、トレーリングストップロスを管理することができます。
  • 取引パネル. このタイプのcBotsは自動的には取引しませんが、さまざまな目的で使用できるカスタムコントロールを作成します。たとえば、cBotは、ニュースサイトを離れることなく取引を行うために、ForexニュースアグリゲーターのWebViewを起動し、WebView内にカスタムの‘買い’および‘売り’ボタンとシンボルセレクターを統合することができます。

以下のサブセクションでは、上記の各タイプを詳細に説明し、それらの利点と制限、およびさまざまな使用例を提案します。

アルゴ取引戦略

自動取引戦略タイプに属するcBotsは、複雑ですが強力です。リスク管理、ポジションサイジング、テクニカル分析など、取引戦略のすべての側面を正しく実装する必要があります。

以下のコードにデフォルトの新しいcBotテンプレートを置き換えるだけで、2分以内にシンプルな自動取引戦略を作成できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using cAlgo.API;
namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class BasicTrendBot : Robot
    {
        protected override void OnBar()
        {
            if (Bars.ClosePrices.Last(1) > Bars.ClosePrices.Last(2))
            {
                ExecuteMarketOrder(TradeType.Buy, SymbolName, 1000, "FollowTrend");
            }
            else if (Bars.ClosePrices.Last(1) < Bars.ClosePrices.Last(2))
            {
                ExecuteMarketOrder(TradeType.Sell, SymbolName, 1000, "FollowTrend");
            }
        }
    }
}

このcBotは、各バーで新しいポジションをオープンします。1つ前のバーに比べて価格が上昇した場合はロングポジションを、逆に価格が下落した場合はショートポジションをオープンします。

バックテストと最適化

自動取引戦略には、多くの「可動部分」とパラメータが含まれることが多いため、これらのcBotsはライブアカウントで実行する前に広範なバックテストと最適化を行う必要があります。幸いなことに、cTraderにはバックテスト最適化を処理するための組み込みツールが用意されています。

cTrader CLI

自動取引戦略は、さまざまなテクニカル分析のシグナルに反応できるように、長期間実行する必要があります。このような場合、RAMとCPUの消費を節約するために、cTrader Desktopを開かずにcTrader CLIを介してcBotsを起動できます(このタイプのcBotsに限らず、任意のcBotをcTrader CLIを介して起動することが可能です)。

スクリプト

スクリプトは、手動で行うのが難しいまたは時間のかかるアクションを実行するために通常必要です。これらのアクションは通常、cBotの開始時に実行され、その結果を観察した後、成功した場合にインスタンスを停止してRAMとCPUの消費を節約できます。

たとえば、スクリプトはトレーダーのアカウント預金通貨の50単位を超える総利益を持つすべてのポジションをクローズできます。実際には、このスクリプトは、トレーダーが任意のタイミングでトリガーできるユニバーサルテイクプロフィットとして機能します。次に、このスクリプトのコードの例を示します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using cAlgo.API;
using cAlgo.API.Collections;
namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class BasicScriptBot : Robot
    {

        protected override void OnStart()
        {
            foreach (var position in Positions) 
            {
                if (position.GrossProfit > 50) 
                {
                    ClosePosition(position);
                }
            }
            Stop();
        }
    }
}

cBotを起動すると、複数の利益のあるポジションが徐々にクローズされるはずです。

スクリプトの停止

スクリプトは特定のアクションを一度だけ実行する必要があるため、cTraderに対して正常に実行が完了した後にスクリプトを直ちに閉じるよう指示できます。上記の例に示すように、Stop()メソッドを呼び出すことで、これを行うことができます。

取引アシスタント

取引アシスタントの目的は、定期的に役立つアクションを実行することです。これにより、スクリプトと似ていますが、スクリプトはインスタンス開始時にのみアクションを実行します。対照的に、取引アシスタントは市場の状況やその他の要因に継続的に反応し、特定のパターンに応じて操作を実行します。

たとえば、ポジションを開くと同時に自動的にヘッジするcBotを考えてみましょう。このcBotのコードは以下のようになります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
using cAlgo.API;
using cAlgo.API.Collections;
namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class BasicAssistantBot : Robot

    {
        private bool hasHedgedPosition = false;

        protected override void OnStart()
        {
            Positions.Opened += Positions_Opened;
        }

        private void Positions_Opened(PositionOpenedEventArgs args) 
        {
            if (!hasHedgedPosition) 
            {
                hasHedgedPosition = true;
                var position = args.Position;
                var oppositeTradeType = position.TradeType == TradeType.Buy ? TradeType.Sell : TradeType.Buy;
                ExecuteMarketOrder(oppositeTradeType, SymbolName, position.VolumeInUnits / 2);
            }
            else 
            {
                hasHedgedPosition = false;            
            }
        }
    }
}

ポジションを開いたら、cBotは直ちに反対方向のポジションを開こうとします。この新しいポジションのボリュームは、元のポジションのボリュームのちょうど半分です。

cBotが新しいポジションを一度だけヘッジするように、無限ループを回避するためにhasHedgedPositionフィールドを使用しています。

コールバック関数

取引アシスタントは、さまざまなイベントのハンドラとしてコールバック関数をよく使用します。特定のクラスのイベントをハンドルできるかどうかを確認するには、組み込みのAPIドキュメントを開き、必要なクラスを検索し、目次の’イベント‘セクションに移動します。

取引パネル

取引パネルは、さまざまなアクションをトリガーするカスタムコントロールを表示します。通常、取引パネルは、デフォルトのcTrader UIに対する品質向上を提供します。たとえば、cBotは’買い‘ボタンを表示し、このボタンをクリックすると、事前定義されたボリュームのマーケットオーダーがcTraderによって実行されます。

このようなcBotを作成するには、以下のコードを使用してください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
using cAlgo.API;
namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class BasicPanelBot : Robot
    {

        Button buttonBuyOrder;

        protected override void OnStart()
        {

            buttonBuyOrder = new Button
            {
                Text = "Buy",
                HorizontalAlignment = HorizontalAlignment.Center,
                VerticalAlignment = VerticalAlignment.Center,
            };

            buttonBuyOrder.Click += ButtonBuyOrder_Click;

            Chart.AddControl(buttonBuyOrder);
        }

        private void ButtonBuyOrder_Click(ButtonClickEventArgs args) 
        {
            ExecuteMarketOrder(TradeType.Buy, SymbolName, 10000);
        }
    }
}

‘買い’ボタンをクリックすると、新しい10,000ユニットのマーケットオーダーが出されます。ボタンの便利な配置により、新しい市場機会にすばやく対応できます。

他のタイプのcBotsと取引パネルの組み合わせ

取引パネルの目的は、ユーザーがさまざまな操作を実行できるカスタムUIコントロールを提供することです。そのため、取引パネルを他のタイプのcBotsと組み合わせることができます。たとえば、取引パネルを使用してカスタムの‘ヘッジ’ボタンを追加し、このボタンをクリックすると、上記の取引アシスタントの例と同様に現在開かれているすべてのポジションをヘッジできます。

まとめ

4つのカテゴリのcBotsはすべて有効な用途があり、好みに応じて組み合わせることができます。たとえば、自動取引戦略と取引アシスタントを同時に起動して、可能な限り最良の結果を得ることができます。さまざまなタイプのcBotsを試して、自分の好みの取引アプローチが完全かつ確実に実行されることを確認できます。

私たちのYouTubeチャンネルを購読する

目次

このページについて