Trong ngôn ngữ lập trình AFL (Amibroker Formula Language), một số hàm đặc biệt được sử dụng để quản lý các “phần” (sections) trong code, lấy thông tin tham số hoặc hỗ trợ tổ chức mã lệnh rõ ràng hơn. Những hàm này thường xuất hiện trong các đoạn mã kéo-thả (drag-and-drop), script mẫu hoặc giao diện đồ họa tích hợp của Amibroker. Dưới đây là danh sách các hàm thường dùng và giải thích chi tiết cho từng hàm.
1. _PARAM_VALUES – Lấy chuỗi giá trị tham số
Cú pháp:
afl
CopyEdit
_PARAM_VALUES()
Kiểu dữ liệu trả về: Chuỗi (String)
Mô tả:
Hàm _PARAM_VALUES trả về chuỗi bao gồm tất cả giá trị của các tham số hiện được sử dụng trong phần kéo-thả. Nó hoạt động tương tự như _DEFAULT_NAME() nhưng không bao gồm tên phần — chỉ cung cấp danh sách các giá trị.
Ứng dụng:
- Hiển thị trực tiếp thông tin các tham số hiện tại.
- Ghi log hoặc debug nhanh bộ tham số người dùng đang dùng.
Ví dụ:
afl
CopyEdit
Title = _PARAM_VALUES();
Xem thêm:
- _DEFAULT_NAME() – Trả về tên phần + giá trị tham số.
- _SECTION_NAME() – Trả về tên phần đang xử lý.
Được sử dụng trong các công thức:
- Hệ thống MA nâng cao
- ALJEHANI
- HaDiffCO của Bman
- ZigZag – Ngày, Khối lượng trung bình (Ord)
- Coppock Indicator, Elder Triple Screen, Guppy Cloud, v.v.
2. _SECTION_BEGIN – Đánh dấu bắt đầu phần
Cú pháp:
afl
CopyEdit
_SECTION_BEGIN(“Tên phần”)
Trả về: Không có (void)
Mô tả:
Hàm _SECTION_BEGIN xác định điểm bắt đầu của một phần trong mã AFL. Phần này có thể chứa tham số người dùng, tính toán, hiển thị đồ thị, v.v. Mỗi phần nên có tên rõ ràng để dễ tổ chức và tái sử dụng.
Lưu ý: Tên phần phải là chuỗi ký tự hằng số, nằm trong dấu ngoặc kép (ví dụ “Thông số MACD”). Không được truyền biến vào đây.
Ví dụ:
afl
CopyEdit
_SECTION_BEGIN(“MACD Settings”);
fast = Param(“Fast”, 12, 1, 30);
slow = Param(“Slow”, 26, 1, 50);
_SECTION_END();
Tính năng:
- Dễ dàng chia nhỏ mã nguồn thành các phần có tên để cấu trúc hóa.
- Hữu ích trong giao diện kéo-thả của Amibroker (giao diện Parameters).
Được sử dụng trong hơn 200+ công thức, tiêu biểu:
- AllinOneAlerts – Module
- Elder Triple Screen Trading System
- Fibonacci Systems, Heatmap V1, Heikin Ashi, ZigZag variations
- Tất cả template chứa tham số đầu vào.
3. _SECTION_END – Đánh dấu kết thúc phần
Cú pháp:
afl
CopyEdit
_SECTION_END()
Trả về: Không có (void)
Mô tả:
Hàm _SECTION_END được sử dụng để đóng phần đã khai báo trước đó bằng _SECTION_BEGIN. Mỗi phần bắt đầu phải có kết thúc để đảm bảo tính tổ chức và tránh lỗi biên dịch.
Tính năng:
- Giúp IDE hoặc Amibroker phân định các đoạn mã khi biên dịch hoặc kéo-thả tham số.
- Tăng khả năng tái sử dụng các phần script độc lập.
Ví dụ:
afl
CopyEdit
_SECTION_BEGIN(“Volume Analysis”);
vol = Volume;
Plot(vol, “Volume”, colorBlue, styleHistogram);
_SECTION_END();
Được sử dụng trong:
- Elder’s Thermometer
- Guppy Multiple Moving Averages
- Các chiến lược như Stan Weinstein, Coppock, Heikin Ashi v.v.
4. _SECTION_NAME – Lấy tên phần hiện tại
Cú pháp:
afl
CopyEdit
_SECTION_NAME()
Trả về: Chuỗi (String)
Mô tả:
Hàm _SECTION_NAME lấy tên của phần hiện tại, như đã đặt trong _SECTION_BEGIN. Điều này rất hữu ích khi bạn muốn hiển thị tiêu đề động, ghi log hoặc theo dõi hành vi code.
Ví dụ:
afl
CopyEdit
_SECTION_BEGIN(“Price and MA”);
Title = _SECTION_NAME() + “\nClose = ” + C;
_SECTION_END();
Tác dụng:
- Tự động hóa việc đặt tên tiêu đề, gán nhãn vùng code.
- Hữu ích khi bạn sử dụng script chung cho nhiều phần.
Được dùng trong:
- Elder Triple Screen Trading System
- ALJEHANI
- Tất cả chiến lược sử dụng _SECTION_BEGIN.
TỔNG KẾT
| Hàm | Trả về | Chức năng chính |
| _PARAM_VALUES() | Chuỗi | Lấy giá trị các tham số |
| _SECTION_BEGIN(“tên”) | Không | Bắt đầu một phần logic |
| _SECTION_END() | Không | Kết thúc phần logic |
| _SECTION_NAME() | Chuỗi | Trả lại tên phần hiện tại |
Các hàm tiền xử lý này là trụ cột trong việc tổ chức, quản lý và phát triển chiến lược giao dịch nâng cao trên nền tảng Amibroker. Chúng không chỉ giúp người viết code dễ quản lý mà còn tăng tính linh hoạt và khả năng tái sử dụng code khi làm việc với giao diện đồ họa.