Przejdź do treści

Sesje handlowe

Od wydania cTrader Windows 4.5, API zawiera interfejs MarketSessions. Pozwala on uzyskać informacje o bieżących sesjach rynkowych i wykorzystać te dane w swoich cBotach i wskaźnikach.

Sesje handlowe w tworzeniu algorytmów

Typ MarketSession to enum z wartościami reprezentującymi różne sesje handlowe (takie jak Singapore lub London).

Z kolei właściwość MarketSessions jest typu MarketSession. Aby uzyskać wszystkie bieżące sesje rynkowe, użyj jej w następujący sposób.

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

Wartość właściwości MarketSessions powinna odpowiadać sesjom wyświetlanym w polu Sesje handlowe w lewym dolnym rogu interfejsu cTrader.

Image title

Możesz użyć metody HasFlag, aby sprawdzić, czy bieżące sesje zawierają określoną sesję.

 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;

        }
    }
}

Możesz również obsłużyć zdarzenie MarketSessionsChanged, aby wykryć i zareagować na wszelkie zmiany w sesjach rynkowych. Klasa MarketSessionChangedEventArgs ma dwie właściwości, mianowicie NewSessions i PreviousSessions, które działają w następujący sposób:

  • NewSessions zawiera wszystkie bieżące sesje, w tym wszelkie sesje, które właśnie się rozpoczęły. Wartość NewSessions jest zawsze równa wartości właściwości MarketSessions cBota lub wskaźnika.
  • PreviousSessions również zawiera wszystkie bieżące sesje, ale zawiera również wszelkie przeszłe sesje, które właśnie się zakończyły. Jej wartość jest równa wartości właściwości MarketSessions cBota lub wskaźnika przed wywołaniem MarketSessionsChanged.

Aby bardziej szczegółowo przyjrzeć się działaniu NewSessions i PreviousSessions, zapoznaj się z poniższym przykładem.

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

W dzienniku powinieneś zobaczyć dwa nowe wpisy dla każdej zmiany sesji. Te wpisy poinformują Cię o tym, jakie były przeszłe sesje handlowe i jakie są teraz.

Sesje handlowe podczas backtestingu

Właściwość MarketSessions działa zarówno w środowiskach na żywo, jak i podczas backtestingu. Podczas backtestingu ta właściwość będzie zawierać sesje względne do wybranych czasów backtestingu. Innymi słowy, możesz jej użyć, aby uzyskać dostęp do sesji handlowych, które były aktywne podczas określonego historycznego okresu handlowego.