Перейти к содержанию

Торговые сессии

С момента выпуска cTrader Windows 4.5 API включает интерфейс MarketSessions. Он позволяет получать информацию о текущих рыночных сессиях и использовать эти данные в ваших сиБотах и индикаторах.

Торговые сессии в разработке алгоритмов

Тип MarketSession является enum со значениями, представляющими различные торговые сессии (такие как Singapore или London).

В свою очередь, свойство MarketSessions имеет тип MarketSession. Чтобы получить все текущие рыночные сессии, используйте его следующим образом.

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

Значение свойства MarketSessions должно соответствовать сессиям, которые отображаются в поле Торговые сессии в левом нижнем углу пользовательского интерфейса cTrader.

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 имеет два свойства, а именно NewSessions и PreviousSessions, которые работают следующим образом:

  • NewSessions содержит все текущие сессии, включая любые сессии, которые только что начались. Значение NewSessions всегда равно значению свойства MarketSessions сиБота или индикатора.
  • PreviousSessions также содержит все текущие сессии, но также содержит любые прошлые сессии, которые только что завершились. Его значение равно значению свойства MarketSessions сиБота или индикатора до того, как было запущено событие MarketSessionsChanged.

Для более подробного рассмотрения того, как работают NewSessions и PreviousSessions, обратитесь к примеру ниже.

 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 работает как в реальной, так и в среде бэктестинга. Во время бэктестинга это свойство будет содержать сессии относительно выбранных временных рамок бэктестинга. Другими словами, вы можете использовать его для доступа к торговым сессиям, которые были активны в течение определенного исторического торгового периода.