Bỏ qua

Chức năng ngủ

Khả năng chờ đợi cho đến một thời điểm cụ thể là rất cần thiết đối với cBot, đặc biệt là đối với những cBot cần được lên lịch hoặc kích hoạt khi xảy ra một sự kiện nào đó (ví dụ: thông báo công khai). Phương thức Sleep() trong cTrader cho phép tạm dừng thuật toán cho đến khi thời gian được chỉ định trôi qua hoặc đến gần.

Ghi chú

Chức năng ngủ chỉ có sẵn cho cBot và chỉ báo.

Hướng dẫn API này sẽ giới thiệu cho bạn phương thức Sleep() và cách sử dụng nó một cách chính xác.

Phương thức Sleep() trong một phút!

  • Phương thức Sleep() cho phép các nhà phát triển tạm dừng việc thực thi một thuật toán với các tham số thời gian linh hoạt được thiết lập.
  • Nếu bạn biết ngày và giờ của một sự kiện cụ thể mà cBot của bạn nên phản ứng với một chiến lược phù hợp, hãy sử dụng chức năng ngủ để giao dịch tin tức và phản ứng với các sự kiện đã lên lịch.
  • Đặt một khoảng thời gian để trôi qua cho chức năng ngủ, từ mili giây đến bất kỳ khoảng thời gian nào.
  • Phương thức Sleep() chỉ có sẵn cho các thuật toán .NET 6 và hoạt động như dự định trong quá trình backtest.

Cách hoạt động của phương thức sleep()

Chức năng ngủ chỉ có sẵn cho các thuật toán .NET 6. Trong khi một cBot ở chế độ ngủ, tất cả các sự kiện khác trong mã sẽ bị bỏ qua.

Ví dụ

Nếu sự kiện BarOpened xảy ra năm lần trong chế độ ngủ, không có trình xử lý OnBar() bị bỏ lỡ nào sẽ được gọi sau khi cBot thức dậy. Chỉ các sự kiện sắp tới mới sẽ được kích hoạt trong trường hợp này.

Tuy nhiên, cBot vẫn xử lý tất cả các thông điệp dữ liệu trong khi ở chế độ ngủ (ví dụ: nếu RefreshData() được gọi).

Ghi chú

Khi chỉ định thời gian ngủ, bạn đặt một khoảng thời gian tối thiểu cho việc tạm dừng thuật toán. Thời gian ngủ thực tế sẽ luôn bằng hoặc lớn hơn thời gian tạm dừng được yêu cầu.

Để áp dụng phương thức Sleep(), các nhà phát triển thuật toán nên sử dụng một trong các chữ ký này tùy thuộc vào mục đích của họ.

Để tạm dừng thuật toán cho đến khi khoảng thời gian được chỉ định trôi qua:

void Sleep(Timespan timespan)

Để tạm dừng thuật toán cho đến khi số mili giây được chỉ định trôi qua:

void Sleep(int milliseconds)

Để tạm dừng thuật toán cho đến khi thời gian và ngày được chỉ định đến gần:

void Sleep(DateTime dateTime)

Ví dụ

Chúng ta sẽ giả định rằng bài phát biểu tiếp theo của Chủ tịch Cục Dự trữ Liên bang hiện tại Jerome Powell được lên lịch vào ngày 11 tháng 12 năm 2023 lúc 11:00. Bạn mong đợi một số thông báo sẽ ảnh hưởng đến xu hướng EURUSD và đã phát triển một cBot sẽ theo đuổi một chiến lược phù hợp ngay khi bài phát biểu bắt đầu. Trong trường hợp này, bạn có thể áp dụng phương thức Sleep() như sau.

DateTime doomsday = new DateTime(2023, 12, 11, 11, 0, 0); 
Sleep(doomsday)

Cảnh báo

Nếu tham số DateTime không thuộc múi giờ của thuật toán, một ArgumentException sẽ được ném ra.

Phương thức Sleep() hoạt động như dự định trong quá trình backtest. Nếu bạn muốn dừng một cBot đang ngủ từ giao diện người dùng, bạn không cần phải đợi cho đến khi nó thức dậy. Nhấp vào nút Dừng và nó sẽ ngừng hoạt động mà không có thời gian chờ.

Tạo một cBot ví dụ

Ví dụ cBot sau đây ngủ trong 30 giây sau khi khởi chạy, với thông báo tương ứng được in trong nhật ký. Sau đó, nó đặt một lệnh mua thị trường cho USDJPY.

 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 System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class SleepAndExecuteBot : Robot
    {
        protected override void OnStart()
        {
            Print("cBot will sleep for 30 seconds");
            Sleep(30000);

            var symbol = Symbols.GetSymbol("USDJPY");
            ExecuteMarketOrder(TradeType.Buy, symbol, 1000);
        }        
    }
}

Image title

Tổng quan

Chức năng ngủ cho phép các nhà phát triển thuật toán tạm dừng việc thực thi các phương thức khác ngay cả khi cBot đã được khởi chạy. Áp dụng phương thức Sleep() với các tham số thời gian linh hoạt của nó, bạn sẽ luôn phản ứng kịp thời với các sự kiện đã lên lịch bằng chiến lược phù hợp của mình.