跳转至

交易时段

自 cTrader Windows 4.5 发布以来,API 包含了 MarketSessions 接口。 它允许您获取当前市场交易时段的信息,并在您的 cBot 和指标中使用这些数据。

算法开发中的交易时段

MarketSession 类型是一个 enum,其值代表各种交易时段(如 SingaporeLondon)。

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 类有两个属性,即 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 属性在实时和回测环境中都可以使用。 在回测期间,该属性将包含相对于所选回测时间的交易时段。 换句话说,您可以使用它来访问特定历史交易期间活跃的交易时段。