Blog Lập Trình

Vòng đời của một Expert Advisor trong MT4

28/12/2024


Giới thiệu

Expert Advisor (EA) trong MT4 có một vòng đời xác định với ba hàm chính: OnInit(), OnTick(), và OnDeinit(). Mỗi hàm đóng vai trò quan trọng trong quá trình hoạt động của EA.

Chương trình

Một chương trình máy tính có thể được hiểu đơn giản như một tập hợp các chỉ dẫn (hay còn gọi là mã lệnh) mà máy tính thực hiện theo một trình tự nhất định để hoàn thành một nhiệm vụ cụ thể.

Tương tự như một công thức nấu ăn, một chương trình có:

  • Nguyên liệu đầu vào (Input): Là những thông tin, dữ liệu mà chương trình cần để xử lý
  • Các bước thực hiện (Process): Là những hướng dẫn cụ thể về cách xử lý dữ liệu đầu vào
  • Kết quả đầu ra (Output): Là kết quả sau khi chương trình xử lý xong
  • Ví dụ đơn giản: Một chương trình tính tổng hai số sẽ:

  • Nhận vào hai con số (input)
  • Thực hiện phép cộng (process)
  • Hiển thị kết quả (output)
  • Trong trường hợp của Expert Advisor (EA), đây là một chương trình tự động được thiết kế để giao dịch trên thị trường tài chính. EA sẽ nhận các thông tin về giá cả (input), phân tích theo chiến lược đã lập trình (process), và đưa ra quyết định giao dịch (output).

    Trong chương trình sẽ có một vài hàm chính để thực thi trình tự nhất định. Những hàm này hình thành một vòng lặp để thực hiện chương trình hay còn gọi là vòng đời của một chương trình.

    OnInit()

    Đây là hàm khởi tạo được gọi một lần duy nhất khi EA được nạp vào biểu đồ. Trong hàm này, chúng ta thường:

  • Khởi tạo các biến toàn cục
  • Thiết lập các tham số ban đầu
  • Kiểm tra điều kiện môi trường giao dịch
  • Khởi tạo các đối tượng đồ họa trên biểu đồ
  • OnTick()

    Đây là hàm được gọi mỗi khi có một tick mới (thay đổi giá) xuất hiện. Đây là nơi xử lý chính của EA:

  • Phân tích thị trường
  • Kiểm tra điều kiện vào lệnh
  • Thực hiện các lệnh giao dịch
  • Quản lý các lệnh đang mở
  • Cập nhật thông tin trên biểu đồ
  • OnDeinit()

    Hàm này được gọi khi EA bị gỡ khỏi biểu đồ hoặc khi đóng terminal. Các nhiệm vụ thường thực hiện:

  • Giải phóng bộ nhớ đã cấp phát
  • Xóa các đối tượng đồ họa đã tạo
  • Lưu trữ dữ liệu cần thiết
  • Đóng các file log hoặc báo cáo
  • int OnInit()
    {
        // Khởi tạo các biến và tham số
        return(INIT_SUCCEEDED);
    }
    
    void OnTick()
    {
        // Xử lý logic giao dịch
        // Kiểm tra điều kiện và thực hiện lệnh
    }
    
    void OnDeinit(const int reason)
    {
        // Dọn dẹp tài nguyên
        // Xử lý khi EA kết thúc
    }

    Việc hiểu rõ và sử dụng đúng các hàm này sẽ giúp EA hoạt động ổn định và hiệu quả. Mỗi hàm có vai trò riêng trong vòng đời của EA và cần được xử lý cẩn thận để tránh các lỗi không mong muốn.

    Flow chart

    graph TD A0["Thêm EA vào chart"] --> A1["Bắt đầu EA"] A1 --> B["OnInit()"] B --> C{"Khởi tạo thành công?"} C -->|Có| E D["OnTick()"] C -->|Không| F["OnDeinit()"] D -->|Có| E{"Có tick mới?"} E -->|Có| D F --> G["Kết thúc EA"] H["Gỡ EA khỏi chart"] --> F

    © 2024 BlogLapTrinh, Inc. All rights reserved.