コンテンツにスキップ

取引市場

cTrader Windows 4.5のリリース以降、APIにはMarketSessionsインターフェースが含まれています。 これにより、現在の市場セッションに関する情報を取得し、このデータをcBotやインジケーターで使用できます。

アルゴ開発における取引時間

MarketSessionタイプは、enumであり、さまざまな取引セッション(SingaporeLondonなど)を表す値を持っています。

一方、MarketSessionsプロパティはMarketSessionタイプです。 現在のすべての市場セッションを取得するには、次のように使用します。

1
    Print("Current Sessions: {0}", MarketSessions); 

MarketSessionsプロパティの値は、cTrader UIの左下隅にある取引時間フィールドに表示されるセッションと一致する必要があります。

Image title

HasFlagメソッドを使用して、現在のセッションに特定のセッションが含まれているかどうかを確認できます。

 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
using cAlgo.API;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class MarketSessionsTest : Robot
    {
        [Parameter("Working Session", DefaultValue = MarketSession.London)]
        public MarketSession WorkingSession {get; set;}

        protected override void OnTick()
        {

            MarketSession exampleSession = MarketSession.London;

            if (MarketSessions.HasFlag(exampleSession))
              {

                // Insert your preferred method logic here.

              }
                return;

        }
    }
}

また、MarketSessionsChangedイベントを処理して、市場セッションの変更を検出し、対応することもできます。 MarketSessionChangedEventArgsクラスには、NewSessionsPreviousSessionsという2つのプロパティがあり、次のように機能します:

  • NewSessionsには、現在のすべてのセッションと、開始されたばかりのセッションが含まれます。 NewSessionsの値は、常にcBotまたはインジケーターのMarketSessionsプロパティの値と等しくなります。
  • PreviousSessionsにも現在のすべてのセッションが含まれますが、終了したばかりの過去のセッションも含まれます。 その値は、MarketSessionsChangedがトリガーされる前のcBotまたはインジケーターのMarketSessionsプロパティの値と等しくなります。

NewSessionsPreviousSessionsの動作について詳しくは、以下の例を参照してください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using cAlgo.API;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class NewcBot : Robot
    {
        protected override void OnStart()
        {
            MarketSessionsChanged += OnMarketSessionsChanged;
            Print($"Starting sessions: {this.MarketSessions}");
        }

        private void OnMarketSessionsChanged(MarketSessionChangedEventArgs obj)
        {
            Print($"Session(s) changed, previous sessions: {obj.PreviousSessions}");
            Print($"Sessions(s) changed, current sessions: {obj.NewSessions}");
        }

        protected override void OnTick() { }

        protected override void OnStop() { }
    }
}

ログには、各セッション変更に対して2つの新しいエントリが表示されます。 これらのエントリは、過去の取引セッションが何であったか、そして現在のセッションが何であるかを通知します。

バックテスト中の取引時間

MarketSessionsプロパティは、ライブ環境とバックテスト環境の両方で機能します。 バックテスト中、このプロパティには、選択したバックテストタイミングに関連するセッションが含まれます。 言い換えると、特定の過去の取引期間中にアクティブだった取引セッションにアクセスするために使用できます。