Bỏ qua

Khả năng chịu lỗi

Thuật ngữ "khả năng chịu lỗi" đề cập đến khả năng của một hệ thống tự động tiếp tục hoạt động khi gặp sự cố. Đối với các thuật toán cTrader, khả năng chịu lỗi có nghĩa là các quy trình lưu trữ cBot, plugin và chỉ báo có thể tiếp tục chạy ngay cả khi gặp lỗi.

Bài viết này giải thích cách khả năng chịu lỗi hoạt động và mô tả những lợi ích chính mà tính năng này mang lại cho các nhà giao dịch thuật toán.

Khả năng chịu lỗi trong một phút!

  • Theo quy tắc khả năng chịu lỗi, khi gặp ngoại lệ, một thuật toán sẽ tiếp tục chạy. Tính năng này làm cho các thuật toán cTrader thậm chí còn ổn định hơn và tạo cơ hội để tinh chỉnh cách thực thi mã của bạn.
  • Các thuật toán giờ đây có thể tự động xuất các ngoại lệ mà chúng gặp phải trong nhật ký hoạt động, cung cấp thông tin quý giá mà bạn có thể sử dụng để tinh chỉnh mã của mình.
  • Bạn có thể sử dụng phương thức OnException(Exception exception) để tùy chỉnh cách các thuật toán của bạn phản ứng với các ngoại lệ. Sử dụng trình xử lý sự kiện này để tạo các tiện ích mở rộng đáng tin cậy và hiệu quả.

Quy tắc khả năng chịu lỗi

Tóm lại, khả năng chịu lỗi đảm bảo rằng tất cả các thuật toán tuân theo các quy tắc được mô tả chi tiết dưới đây:

  • Khi gặp ngoại lệ, một thuật toán phải tiếp tục chạy.
  • Mọi ngoại lệ xảy ra trong khi thuật toán đang hoạt động phải được ghi lại.
  • Người dùng phải có cơ hội đưa ra các quy tắc tùy chỉnh xác định cách thuật toán xử lý các ngoại lệ khác nhau.

Khả năng chịu lỗi cho phép các thuật toán về cơ bản bỏ qua tất cả các lỗi không đe dọa làm sập quy trình của chúng. Mặc dù các ngoại lệ vẫn có thể ngăn cản việc thực thi mã, khả năng chịu lỗi giảm đáng kể số lần một thuật toán có thể gặp sự cố không mong muốn.

Phương thức OnException()

Theo quy tắc khả năng chịu lỗi, các thuật toán phải bỏ qua các ngoại lệ. Tuy nhiên, bạn cũng có thể tùy chỉnh cách các thuật toán của bạn phản ứng với một số ngoại lệ nhất định, hoặc ghi đè hoàn toàn các hành vi khả năng chịu lỗi mặc định.

Để làm điều này, hãy sử dụng phương thức OnException(). Nó hoạt động như trình xử lý chuyên dụng cho bất kỳ ngoại lệ không được xử lý nào. Chữ ký mặc định của nó như sau:

1
2
3
4
protected virtual void OnException(Exception exception)
{
    /// Introduce your custom exception handling logic here.
}

Hãy xem xét ví dụ sau trong đó phương thức OnException() được sử dụng để thay đổi cách cBot phản ứng với ngoại lệ NullReferenceException.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class SampleExceptionBot : Robot
    {
        private const string label = "Sample Exception Bot";
        protected override void OnStart()
        {
                var shortPosition = Positions.Find(label, SymbolName, TradeType.Sell);
                ClosePosition(shortPosition);
        }

        protected override void OnException(Exception exception)
        {
            if (exception is NullReferenceException)
            {
                MessageBox.Show("The position does not exist", "Error!");
            }
        }
    }
}

Để ném ngoại lệ NullReferenceException, chúng ta làm cho cBot của mình đóng một vị thế bán khống có thể không tồn tại. Khi gặp ngoại lệ được chỉ định, cBot của chúng ta được cho là sẽ hiển thị một MessageBox hiển thị văn bản giải thích, vì vậy chúng ta có thể phản ứng nhanh chóng với ngoại lệ này và điều chỉnh hành vi của cBot.

Lưu ý rằng trình xử lý OnException() không được cho là xử lý các ngoại lệ xảy ra trong khi phương thức này đang được gọi. Tuy nhiên, các ngoại lệ như vậy vẫn được ghi lại trong nhật ký sự kiện.

Lợi ích của khả năng chịu lỗi

Khả năng chịu lỗi là một khía cạnh quan trọng của cách giao dịch thuật toán trong cTrader hoạt động bằng cách cung cấp các lợi ích sau.

  • Khả năng chịu lỗi tăng cường đáng kể độ tin cậy của các thuật toán và tạo ra cơ hội mới để tinh chỉnh cách bạn tiếp cận giao dịch tự động.
  • Vì các thuật toán có thể hiển thị các ngoại lệ mà chúng gặp phải trong nhật ký sự kiện, bạn có thể dễ dàng xác định các điều kiện mà một thuật toán đã gặp phải một lỗi cụ thể.
  • Bằng cách cho phép xử lý các sự kiện ngoại lệ, phương thức OnException() có thể được sử dụng để hoàn thiện hành vi của các thuật toán của bạn và cải thiện độ tin cậy của chúng.

Xử lý sự cố

Như đã nêu trước đó, một số lỗi có thể làm sập toàn bộ quy trình. Chúng như sau:

  • Ngoại lệ OutOfMemoryException.
  • Ngoại lệ StackOverflowException.
  • Bất kỳ ngoại lệ không được xử lý nào xảy ra trong một luồng riêng biệt.
  • Bất kỳ lỗi nào khác có thể đe dọa làm sập quy trình mà một thuật toán đang chạy.

Khi gặp bất kỳ lỗi nào ở trên, một phiên bản chỉ báo sẽ bị dừng; nó sẽ không được khởi động lại tự động. Tuy nhiên, ngoại lệ vẫn sẽ được ghi lại trong nhật ký.

Ngược lại, khi một quy trình lưu trữ một phiên bản cBot gặp sự cố, nó sẽ được khởi động lại tự động (với ngoại lệ được ghi lại trong nhật ký).

Nhiều phiên bản trong một quy trình duy nhất

Có những trường hợp khi một quy trình duy nhất có thể lưu trữ nhiều phiên bản cBot. Nếu một trong những phiên bản này gặp phải một ngoại lệ khiến nó gặp sự cố, toàn bộ quy trình cũng sẽ gặp sự cố. Khi khởi động lại, quy trình sẽ khởi động lại tất cả các phiên bản cBot mà nó ban đầu lưu trữ.

Tổng quan

Khả năng chịu lỗi cung cấp một số cơ hội quý giá để làm cho các thuật toán thậm chí còn ổn định và hiệu quả hơn. Trình xử lý OnException() cung cấp một lớp kiểm soát bổ sung về cách các thuật toán của bạn phản ứng với các ngoại lệ.