콘텐츠로 이동

트레이딩 세션

cTrader Windows 4.5 출시 이후, API에는 MarketSessions 인터페이스가 포함되었습니다. 이를 통해 현재 시장 세션에 대한 정보를 얻고 이 데이터를 cBot 및 지표에 사용할 수 있습니다.

알고리즘 개발에서의 트레이딩 세션

MarketSession 타입은 다양한 트레이딩 세션(예: Singapore 또는 London)을 나타내는 enum 값입니다.

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 두 가지 속성이 있으며, 이들은 다음과 같이 작동합니다:

  • 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() { }
    }
}

로그에서는 각 세션 변경에 대해 두 개의 새로운 항목을 볼 수 있습니다. 이 항목들은 과거 트레이딩 세션이 무엇이었고 현재 무엇인지 알려줄 것입니다.

백테스트 중의 트레이딩 세션

MarketSessions 속성은 라이브 및 백테스트 환경 모두에서 작동합니다. 백테스트 중에는 이 속성은 선택된 백테스트 타이밍에 상대적인 세션을 포함합니다. 즉, 특정 과거 트레이딩 기간 동안 활성화된 트레이딩 세션에 접근하는 데 사용할 수 있습니다.