コンテンツにスキップ

cBotの主要なタイプ

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

大まかに言うと、cBotには4つの主要なタイプがあります。

注意

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

  • 自動化された取引戦略 - その名前が示すように、このタイプのcBotは取引戦略を自律的に実行します。 例えば、Three black crows & three white soldiers cBot は、3つの連続した緑のキャンドルに遭遇した後に新しい買い注文を実行し、3つの連続した赤のキャンドルに直面したときに新しい売り注文を実行します。
  • スクリプト - このタイプに属するcBotは、起動時にアクションを実行し、実行が完了した後に停止します。 例えば、スクリプトcBotは、現在のすべてのオープンポジションに対して、その方向、取引高、または金融商品に関係なく、ストップロスを設定する場合があります。
  • 取引アシスタント - マニュアルまたは自動取引戦略を補完する何らかの有用なアクションを実行するように設計されています。 例えば、このタイプのcBotは、cTraderが提供する組み込みのトレーリングストップロス機能とは異なるカスタムルールを使用して、トレーリングストップロスを管理することができます。
  • 取引パネル - このタイプのcBotは自律的に取引を行いません。代わりに、さまざまな目的に使用できるカスタムコントロールを作成します。 例えば、cBotは、ForexニュースアグリゲーターのWebViewを起動し、WebView内にカスタムの買いと売りのボタンおよびシンボルセレクターを統合し、ユーザーがニュースサイトを離れることなく取引できるようにすることができます。

以下のサブセクションでは、上記の各タイプについて詳細に説明し、その利点と制限を概説し、さまざまなユースケースを提案します。

アルゴ取引戦略

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

以下のコードでデフォルトの新しい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");
            }
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import clr
clr.AddReference("cAlgo.API")
from cAlgo.API import *
from robot_wrapper import *

class BasicTrendBot():
    def on_bar(self):
        if api.Bars.ClosePrices.Last(1) > api.Bars.ClosePrices.Last(2):
            api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, 1000, "FollowTrend")
        elif api.Bars.ClosePrices.Last(1) < api.Bars.ClosePrices.Last(2):
            api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, 1000, "FollowTrend")

このcBotは、すべてのバーで新しいポジションを開きます。 前のバーと比較して価格が上昇した場合、ロングポジションが開かれます。 逆に、価格が下落した場合、ショートポジションが開かれます。

バックテストと最適化

自動化された取引戦略には、通常、多くの可動部分とパラメーターが含まれます。 その結果、このようなcBotは、ライブ口座で起動する前に、広範囲にわたるバックテストと最適化が必要になることがよくあります。 幸いなことに、cTraderには、バックテスト最適化 を処理するための組み込みツールがあります。

cTraderコマンドラインツール(CLI)

自動化された取引戦略は、通常、さまざまなテクニカル分析シグナルに対応するために長時間実行する必要があります。 これらの場合にRAMとCPUの消費を節約するために、cTrader CLI 経由でcBotを起動することができます(このタイプのcBotだけでなく、任意の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();
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import clr
clr.AddReference("cAlgo.API")
from cAlgo.API import *
from robot_wrapper import *

class BasicScriptBot():
    def on_start(self):
        for position in api.Positions:
            if position.GrossProfit > 50:
                api.ClosePosition(position)
        api.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;            
            }
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import clr
clr.AddReference("cAlgo.API")
from cAlgo.API import *
from robot_wrapper import *

class BasicAssistantBot():
    def on_start(self):
        self.hasHedgedPosition = False
        api.Positions.Opened += self.positions_opened

    def positions_opened(self, args):
        if not self.hasHedgedPosition:
            self.hasHedgedPosition = True
            position = args.Position
            opposite = TradeType.Sell if position.TradeType == TradeType.Buy else TradeType.Buy
            api.ExecuteMarketOrder(opposite, api.SymbolName, position.VolumeInUnits / 2)
        else:
            self.hasHedgedPosition = False

ポジションを開くと、cBotはすぐに反対方向に別のポジションを開こうとします。この新しいポジションの取引高は、元のポジションの取引高のちょうど半分です。

無限ループを避けるために hasHedgedPosition フィールドを使用していることに注意してください。これにより、cBotは新しいポジションを一度だけヘッジします。

コールバック関数

取引アシスタントは、さまざまなイベントのハンドラーとして機能するコールバック関数をよく使用します。 特定のクラスで処理できるイベントを見つけるには、組み込みの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);
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import clr
clr.AddReference("cAlgo.API")
from cAlgo.API import *
from robot_wrapper import *

class BasicPanelBot():
    def on_start(self):
        self.buttonBuyOrder = Button()
        self.buttonBuyOrder.Text = "Buy"
        self.buttonBuyOrder.HorizontalAlignment = HorizontalAlignment.Center
        self.buttonBuyOrder.VerticalAlignment = VerticalAlignment.Center
        self.buttonBuyOrder.Click += self.button_buy_order_click
        api.Chart.AddControl(self.buttonBuyOrder)

    def button_buy_order_click(self, args):
        api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, 10000)

買いボタンをクリックすると、10,000ユニットの新しい成行注文が実行されます。 ボタンの便利な配置により、新しい市場の機会に迅速に対応できます。

トレーディングパネルを他のタイプのcBotと組み合わせる

トレーディングパネルは、さまざまな操作を実行できるカスタムUIコントロールを提供します。 これらは他のタイプのcBotと併用できます。 たとえば、トレーディングパネルには、クリックすると現在のすべてのポジションをヘッジするカスタムのヘッジボタンが含まれている場合があり、これは前述のトレーディングアシスタントの例と同様です。

概要

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

Image title