Bỏ qua

Phiên giao dịch

Kể từ khi phát hành cTrader Windows 4.5, API bao gồm giao diện MarketSessions. Nó cho phép bạn lấy thông tin về các phiên giao dịch hiện tại và sử dụng dữ liệu này trong cBot và chỉ báo của bạn.

Phiên giao dịch trong phát triển thuật toán

Kiểu MarketSession là một enum với các giá trị đại diện cho các phiên giao dịch khác nhau (như Singapore hoặc London).

Đến lượt nó, thuộc tính MarketSessions thuộc kiểu MarketSession. Để lấy tất cả các phiên giao dịch hiện tại, sử dụng nó như sau.

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

Giá trị của thuộc tính MarketSessions phải khớp với các phiên được hiển thị trong trường Phiên giao dịch ở góc dưới bên trái của giao diện cTrader.

Image title

Bạn có thể sử dụng phương thức HasFlag để kiểm tra xem các phiên hiện tại có chứa một phiên cụ thể hay không.

 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;

        }
    }
}

Bạn cũng có thể xử lý sự kiện MarketSessionsChanged để phát hiện và phản ứng với bất kỳ thay đổi nào trong các phiên giao dịch. Lớp MarketSessionChangedEventArgs có hai thuộc tính, cụ thể là NewSessionsPreviousSessions, hoạt động như sau:

  • NewSessions chứa tất cả các phiên hiện tại bao gồm bất kỳ phiên nào vừa mới bắt đầu. Giá trị của NewSessions luôn bằng giá trị của thuộc tính MarketSessions của một cBot hoặc chỉ báo.
  • PreviousSessions cũng chứa tất cả các phiên hiện tại nhưng nó cũng chứa bất kỳ phiên nào trong quá khứ vừa mới kết thúc. Giá trị của nó bằng giá trị của thuộc tính MarketSessions của một cBot hoặc chỉ báo trước khi MarketSessionsChanged được kích hoạt.

Để xem xét kỹ hơn cách NewSessionsPreviousSessions hoạt động, hãy tham khảo ví dụ dưới đây.

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

Trong nhật ký, bạn sẽ thấy hai mục mới cho mỗi thay đổi phiên. Các mục này sẽ thông báo cho bạn về các phiên giao dịch trước đó là gì và hiện tại là gì.

Phiên giao dịch trong quá trình backtest

Thuộc tính MarketSessions hoạt động trên cả môi trường trực tiếp và backtest. Trong quá trình backtest, thuộc tính này sẽ chứa các phiên tương ứng với thời gian backtest đã chọn. Nói cách khác, bạn có thể sử dụng nó để truy cập các phiên giao dịch đã hoạt động trong một giai đoạn giao dịch lịch sử cụ thể.