• 25ºC, Clear
  • Wednesday, 21st January, 2026
  • Trang Chủ
  • Bộ Lọc
  • Nhận Định Thị Trường
  • Phân Tích Doanh Nghiệp
  • Amibroker
    • Code AFL
    • Tự học Amibroker
  • Kiến Thức Đầu Tư
    • Chỉ Báo Kỹ Thuật
    • Phân Tích Cơ Bản
    • Phương Pháp Sóng Elliot
    • Phương Pháp Wyckoff/VSA
    • Vĩ Mô Liên Thị Trường
  • Liên hệ
  • Giới Thiệu
Mới Nhất
  • Phân tích VN-Index ngày 11/08
  • Phân tích HAH
  • Bài 46: Trở thành nhà giao dịch chuyên nghiệp
  • Bài 45: GFX Functions – Bảng trạng thái giao dịch Amibroker
  1. Trang chủ
  2. Amibroker
  3. Tự học Amibroker
  4. Bài 27: User Defined Functions – IIF function
Bài 27: User Defined Functions – IIF function

Xem nhanh:

  • Hàm Tự Định Nghĩa (UDF) Mô Phỏng Hàm Dựng Sẵn Trong Amibroker AFL: Lợi Ích và Lưu Ý Hiệu Suất
  • Mô Phỏng Hàm Dựng Sẵn IIf() Bằng UDF
  • Lưu Ý Quan Trọng Về Hiệu Suất: UDF vs. Hàm Dựng Sẵn

Hàm Tự Định Nghĩa (UDF) Mô Phỏng Hàm Dựng Sẵn Trong Amibroker AFL: Lợi Ích và Lưu Ý Hiệu Suất

Chào các bạn! Chúng ta đã khám phá sức mạnh của hàm tự định nghĩa (User-Defined Functions – UDF) trong Amibroker Formula Language (AFL) để tái sử dụng mã và tăng khả năng đọc hiểu. Một ứng dụng thú vị khác của UDF là khả năng mô phỏng chức năng của các hàm dựng sẵn (built-in functions) của Amibroker. Mặc dù đây là một bài tập hữu ích để hiểu cách các hàm hoạt động “ngầm”, nhưng có những lưu ý quan trọng về hiệu suất bạn cần biết.

Mô Phỏng Hàm Dựng Sẵn IIf() Bằng UDF

Hãy cùng xem xét ví dụ về việc tạo một hàm tự định nghĩa có chức năng tương tự như hàm IIf() (Immediate If) của Amibroker. Hàm IIf() nhận ba đối số: một điều kiện, một giá trị trả về nếu điều kiện đúng, và một giá trị trả về nếu điều kiện sai.

Cú pháp hàm IIf() dựng sẵn: IIf(condition, valueIfTrue, valueIfFalse)

Code AFL để mô phỏng IIf() bằng UDF:

// Định nghĩa hàm tự định nghĩa mo phong IIf()
function MyIIf(condition, valueIfTrue, valueIfFalse)
{
    // Khởi tạo một mảng kết quả với giá trị Null
    ResultArray = Null;

    // Vòng lặp For để duyệt qua từng thanh nến
    // Bắt đầu từ BarIndex 0 và chạy đến BarCount-1
    for (i = 0; i < BarCount; i++)
    {
        // Kiểm tra điều kiện tại thanh nến thứ i
        // condition[i] sẽ trả về True hoặc False (hoặc 1/0)
        if (condition[i])
        {
            // Nếu điều kiện đúng, gán valueIfTrue vào mảng kết quả
            ResultArray[i] = valueIfTrue[i];
        }
        else
        {
            // Nếu điều kiện sai, gán valueIfFalse vào mảng kết quả
            ResultArray[i] = valueIfFalse[i];
        }
    }
    
    return ResultArray; // Trả về mảng kết quả
}

// --- Ví dụ sử dụng hàm MyIIf() ---
// Tính toán: Nếu Close > Open thì trả về Close, ngược lại trả về Open
MyCondition = Close > Open;
MyResult = MyIIf(MyCondition, Close, Open);

// Plot để kiểm tra
Plot(Close, "Close", colorBlack, styleCandle);
Plot(MyResult, "Ket Qua MyIIf", colorBlue, styleLine);

Giải thích mã:

  • Hàm MyIIf nhận ba tham số: condition (mảng Boolean hoặc 1/0), valueIfTrue (mảng giá trị), và valueIfFalse (mảng giá trị).
  • Bên trong hàm, chúng ta khởi tạo một ResultArray rỗng.
  • Một vòng lặp For được sử dụng để duyệt qua từng thanh nến (BarIndex từ 0 đến BarCount - 1).
  • Trong mỗi lần lặp, chúng ta kiểm tra condition[i].
    • Nếu condition[i] là True (hoặc 1), ResultArray[i] được gán giá trị từ valueIfTrue[i].
    • Nếu condition[i] là False (hoặc 0), ResultArray[i] được gán giá trị từ valueIfFalse[i].
  • Cuối cùng, hàm trả về ResultArray chứa các giá trị đã được xử lý.
Ví dụ

Ví dụ

Kết quả

Kết quả

Lưu Ý Quan Trọng Về Hiệu Suất: UDF vs. Hàm Dựng Sẵn

Mặc dù việc tạo UDF mô phỏng hàm dựng sẵn là một bài tập tuyệt vời để hiểu sâu về cách AFL hoạt động, nhưng có một sự thật quan trọng bạn cần luôn ghi nhớ:

**Các hàm dựng sẵn của Amibroker (built-in functions) luôn được tối ưu hóa cao độ về hiệu suất. Chúng được viết bằng các ngôn ngữ cấp thấp hơn (như C++) và được biên dịch để chạy cực kỳ nhanh.

Ngược lại, UDF của bạn, đặc biệt là những UDF sử dụng vòng lặp For để duyệt qua từng thanh nến, sẽ chậm hơn đáng kể so với các hàm dựng sẵn có cùng chức năng.

Tại sao lại chậm hơn?

  • Vòng lặp trong AFL: Việc chạy vòng lặp trong AFL có chi phí hiệu suất cao hơn so với các tính toán nội bộ của các hàm dựng sẵn.
  • Xử lý mảng tối ưu: Các hàm dựng sẵn được thiết kế để xử lý toàn bộ mảng dữ liệu một cách cực kỳ hiệu quả (vectorized operations), trong khi UDF của bạn có thể phải xử lý từng phần tử một.

Lời khuyên:

  • Ưu tiên hàm dựng sẵn: Luôn sử dụng hàm dựng sẵn của Amibroker nếu nó cung cấp chức năng mà bạn cần. Đây là cách tốt nhất để đảm bảo code của bạn chạy nhanh và hiệu quả nhất.
  • Sử dụng UDF khi cần thiết: Chỉ tạo UDF khi:
    • Không có hàm dựng sẵn nào thực hiện được logic cụ thể của bạn.
    • Bạn cần đóng gói một đoạn code phức tạp để tăng khả năng đọc hiểu và tái sử dụng, ngay cả khi điều đó có thể làm giảm một chút hiệu suất (đặc biệt nếu đoạn code không chạy quá thường xuyên hoặc trên lượng dữ liệu khổng lồ).
    • Bạn muốn tự phát triển các công cụ độc đáo, nâng cao.

Việc hiểu rõ sự khác biệt về hiệu suất giữa UDF và hàm dựng sẵn sẽ giúp bạn đưa ra những quyết định thiết kế code thông minh, cân bằng giữa khả năng tùy chỉnh và tốc độ thực thi, từ đó xây dựng các hệ thống giao dịch hiệu quả và ổn định hơn trong Amibroker.

  • trancotam
❮ Prev Next ❯
Chia sẻ: Facebook WhatsApp Twitter
Chia sẻ với ứng dụng khác

Tin Xem Nhiều

Bài 1: Chiến Lược Bảo Vệ Vốn Hiệu Quả Khi Đầu Tư (Phần 1)
Chỉ Báo Kỹ Thuật
Bài 1: Chiến Lược Bảo Vệ Vốn Hiệu Quả Khi Đầu Tư…
21 Tháng 5, 2025
Phân tích BFC
Phân Tích Doanh Nghiệp
Phân tích BFC
14 Tháng 7, 2025
Bài 46: Trở thành nhà giao dịch chuyên nghiệp
Tự học Amibroker
Bài 46: Trở thành nhà giao dịch chuyên nghiệp
22 Tháng 6, 2025
Phân tích HAH
Phân Tích Doanh Nghiệp
Phân tích HAH
15 Tháng 7, 2025
Bảng công cụ phân tích thị trường
Chưa phân loại
Bảng công cụ phân tích thị trường
13 Tháng 5, 2025
Donation
Phóng to ảnh

TADOSO là nền tảng chia sẻ kiến thức và kinh nghiệm đầu tư tài chính, đặc biệt trong lĩnh vực chứng khoán, nhằm kết nối và nâng cao tư duy cho nhà đầu tư cá nhân tại Việt Nam. Với triết lý "Tạo dựng – Đồng hành – Sở hữu", TADOSO hướng đến xây dựng cộng đồng học hỏi minh bạch, trung lập, không bị chi phối bởi tổ chức tài chính nào.

Newsletter

Hãy để lại mail để chúng tôi có thể phục vụ bạn tốt hơn

Donation - Buy me a coffee

Donation

Copyright © All rights reserved | This template is made with by Tran Co Tam

  • Terms of use
  • Privacy Policy
  • Contact
Zalo Messenger
×

Liên hệ