cBotの取引操作

このガイドでは、Algo APIを使用して開発されたcBotを利用して実行できる主要なトレード操作について詳しく説明します。

cTraderのAlgoアプリケーションは、cBotに対して以下の操作をサポートしています。

  • マーケットオーダーの送信
  • 指値注文の配置
  • 指値注文とオープンポジションの修正
  • ポジションのクローズおよび注文のキャンセル
  • トレードイベント(ポジションや注文)へのサブスクライブ。

マーケットオーダーの送信

マーケットオーダーは、ExecuteMarketOrder()メソッドが呼び出されるとトレーディングサーバーに送信されます。新しいcBotを作成した後、このメソッドにマーケットオーダーのいくつかの定義済みプロパティ(シンボル、ボリューム、テイクプロフィット、ストップロスなど)を追加できます。以下の例では、cBotの開始時にマーケットオーダーを配置します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class TradeOperations : Robot
    {
        protected override void OnStart()
        {
            ExecuteMarketOrder(TradeType.Buy, SymbolName, 1000, "", 10, 10, "", false);
        }       
    }
}

ヒント

例では、いくつかの注文パラメータが意図的に未定義にされています""。すべてのExecuteMarketOrder()パラメータのシグネチャと順序については、リファレンスを確認してください。

cBotをビルドしてインスタンスを追加すると、指定されたパラメータのマーケットオーダーが開始時に実行されたことがわかります。ポジションタブとログタブに対応するポジションとログエントリが表示されます。

ポジション

指値注文の配置

cTraderは、ストップ注文、リミット注文、およびストップリミット注文の3種類の指値注文をサポートしています。開始時に指値注文を配置するには、以前のcBotの例でマーケットオーダーを以下のコードスニペットに置き換えます。

1
2
3
PlaceStopOrder(TradeType.Buy, SymbolName, 1000, Symbol.Ask + (Symbol.PipSize * 10), "", 10, 10, null, "", false);
PlaceLimitOrder(TradeType.Buy, SymbolName, 1000, Symbol.Ask - (Symbol.PipSize * 10), "", 10, 10, null, "", false);
PlaceStopLimitOrder(TradeType.Buy, SymbolName, 1000, Symbol.Ask + (Symbol.PipSize * 10), 2, "", 10, 10, null, "", false);

ヒント

メソッドのパラメータをすばやく確認するには、メソッド名と開きかっこを入力し始めます。IntelliSenseのポップアップが表示され、追加情報が提供されます。

画像タイトル

ヒント

cTrader Algoでメソッド/パラメータをクリックし、F1を押すと、コードウィンドウの右側にヘルプパネルが表示され、一致する検索結果が表示されます。テキストカーソルがコードウィンドウの外にある場合は、F1を押すと、‘ヘルプセンター’ウィンドウが表示されて支援してくれます。

cBotを正常にビルドおよび実行した後、‘TradeWatch’パネルに次のレコードが表示されます。

注文

指値注文とオープンポジションの修正

指値注文が配置されると、cBotのPendingOrdersコレクションで利用可能になります。このコレクションを通じてアクセスして修正することができます。既存の指値注文は、以下のようにストップロスレベルを調整して修正できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
protected override void OnStart()
{
    PlaceStopOrder(TradeType.Buy, SymbolName, 1000, Symbol.Ask + (Symbol.PipSize * 10), "", 10, 10, null, "", false);
    PlaceLimitOrder(TradeType.Buy, SymbolName, 1000, Symbol.Ask - (Symbol.PipSize * 10), "", 10, 10, null, "", false);
    PlaceStopLimitOrder(TradeType.Buy, SymbolName, 1000, Symbol.Ask + (Symbol.PipSize * 10), 2, "", 10, 10, null, "", false);

    foreach(var order in PendingOrders.Where(p => p.SymbolName == SymbolName))
    {
        order.ModifyStopLossPips(20);
    }
}     

ログ’タブには、3つの指値注文が配置直後に正常に修正されたことが表示されます。

画像タイトル

異なる注文タイプが正常に実行された後、ポジションがアカウントに対してオープンされます。すべてのオープンポジションは、cBotのPositionsコレクションで利用可能です。前の例で指値注文を修正するのと同様に、オープンポジションも修正できます。マーケットオーダーはポジションを開く最速の方法であるため、最初のcBotにOnBar()メソッドとポジション修正アクションを追加しましょう。

1
2
3
4
5
6
7
protected override void OnBar()
{
    foreach(var position in Positions.Where(p => p.SymbolName == SymbolName))
    {
        position.ModifyTakeProfitPips(20);
    }
}

ログに反映されているように、最初のオープンバーでオープンポジションが修正されました。

画像タイトル

ポジションのクローズおよび注文のキャンセル

次のcBotの例では、OnTick()メソッドを呼び出して、金曜日の11:00(UTC)にすべてのオープンポジションをクローズし、すべての指値注文をキャンセルします。

 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
namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class TradeOperations : Robot
    {
        protected override void OnStart()
        {
            ExecuteMarketOrder(TradeType.Buy, SymbolName, 1000, "", 10, 10, "", false);
            PlaceStopOrder(TradeType.Buy, SymbolName, 1000, Symbol.Ask + (Symbol.PipSize * 10), "", 10, 10, null, "", false);
        }  

        protected override void OnTick()
        {
            if(Server.Time.DayOfWeek == DayOfWeek.Friday && Server.Time.Hour >= 11)
            {
                foreach(var position in Positions.Where(p => p.SymbolName == SymbolName))
                {
                    position.Close();    
                }

                foreach(var order in PendingOrders.Where(p => p.SymbolName == SymbolName))
                {
                    order.Cancel();
                }
            }
        }
    }
}

画像タイトル

トレードイベントへのサブスクライブ

cTraderは、アルゴリズム開発者がトレードイベントにサブスクライブしてトレードアクティビティを監視できるようにします。これにより、cBotが実行したものであろうと手動であろうと、すべてのトレードイベントに対応することができます。これを実現するには、先に示したPositionsおよびPendingOrdersコレクションのイベントをリッスンします。

ポジションには3つのイベントがあります。

  • Open
  • Modified
  • Closed

これらは、アカウントのポジションを開いたとき、修正したとき、および閉じたときにそれぞれトリガーされます。

以下のコードスニペットでは、OnStart()メソッドで3つのイベントが宣言され、呼び出すメソッドが割り当てられています。これにより、使用するコードシグネチャが自動的に作成されます。その後、各イベントメソッドにPrint()文が追加されます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
protected override void OnStart()
{
    Positions.Opened += Positions_Opened;
    Positions.Modified += Positions_Modified;
    Positions.Closed += Positions_Closed;                    
}  

private void Positions_Opened(PositionOpenedEventArgs obj)
{
    Print("Position with ID " + obj.Position.Id + " was opened");
}
private void Positions_Modified(PositionModifiedEventArgs obj)
{
    Print("Position with ID " + obj.Position.Id + " was modified");
}
private void Positions_Closed(PositionClosedEventArgs obj)
{
    Print("Position with ID " + obj.Position.Id + " was closed");
}   

あなたやcBotがOpenModified、およびClosedイベントを実行すると、アルゴリズムはログに示されているように毎回印刷メッセージでそれらに対応します。

画像タイトル

同様に、指値注文に関連するイベントにサブスクライブすることができます。指値注文には4つのイベントがあります。

  • `Created’
  • Modified
  • Filled
  • Canceled

4つのイベントはOnStart()メソッドで宣言され、イベントハンドラが次のように追加されます。

 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
protected override void OnStart()
{
    PendingOrders.Created += PendingOrders_Created;
    PendingOrders.Modified += PendingOrders_Modified;
    PendingOrders.Filled += PendingOrders_Filled;
    PendingOrders.Cancelled += PendingOrders_Cancelled;
}
private void PendingOrders_Created(PendingOrderCreatedEventArgs obj)
{
    Print("Pending order with ID " + obj.PendingOrder.Id + " was created");
}
private void PendingOrders_Modified(PendingOrderModifiedEventArgs obj)
{
    Print("Pending order with ID " + obj.PendingOrder.Id + " was modified");
}
private void PendingOrders_Filled(PendingOrderFilledEventArgs obj)
{
    Print("Pending order with ID " + obj.PendingOrder.Id + " was filled");
}
private void PendingOrders_Cancelled(PendingOrderCancelledEventArgs obj)
{
    Print("Pending order with ID " + obj.PendingOrder.Id + " was cancelled");
}       

指値注文に関連するイベントにサブスクライブしている場合、cBotは手動およびプログラムによるトレードアクティビティの両方に反応します。

画像タイトル

まとめ

結論として、cTraderはアルゴリズム開発者に、cBotで実行できる印象的なトレード操作の武器を装備しています。これらを巧みに適用することで、カスタマイズされた高度なトレード戦略を追求することができます。

YouTubeチャンネルを登録してください