Trong ngôn ngữ lập trình AFL (AmiBroker Formula Language), các lệnh tiền xử lý đóng vai trò cực kỳ quan trọng trong việc cấu trúc, tổ chức, và tái sử dụng mã nguồn. Chúng được xử lý trước khi công thức được biên dịch và thực thi, tương tự như tiền xử lý trong C/C++.
Ba lệnh chính thuộc nhóm này gồm: #include, #include_once và #pragma. Dưới đây là phần trình bày chi tiết từng lệnh:
1. LỆNH #include – LỆNH BAO GỒM TỆP NGOÀI
CÚ PHÁP:
afl
CopyEdit
#include “đường_dẫn_tệp.afl”
Hoặc, từ phiên bản 5.80 trở đi:
afl
CopyEdit
#include <tên_tệp.afl>
ĐẦU RA:
Không trả về giá trị nào. Đây là một lệnh điều khiển xử lý mã, không phải là một hàm logic.
CHỨC NĂNG:
Lệnh #include cho phép bạn nhúng nội dung của một tệp AFL khác vào vị trí của dòng lệnh đó. Điều này cực kỳ hữu ích khi bạn muốn tái sử dụng các đoạn mã dùng chung như: hàm tính chỉ báo kỹ thuật tùy chỉnh, biến toàn cục, hàm xuất tín hiệu, v.v.
Khi #include được biên dịch, AmiBroker sẽ đọc nội dung từ tệp chỉ định và chèn vào chính xác vị trí dòng #include. Nó giống như bạn đã copy–paste thủ công nội dung file đó.
GHI CHÚ QUAN TRỌNG:
Dấu gạch chéo: Trong đường dẫn tệp, bạn phải sử dụng dấu gạch chéo xuôi / hoặc \\, không được dùng \ như trong lập trình C truyền thống. Ví dụ hợp lệ:
afl
CopyEdit
#include “C:/AmiBroker/Formulas/my_common_code.afl”
- Tác động hiệu suất: Việc sử dụng #include có thể làm chậm tốc độ thực thi công thức, đặc biệt nếu bạn nhúng nhiều file lớn hoặc có hàm nặng.
- Không thông báo lỗi khi thất bại: Nếu đường dẫn sai hoặc file không tồn tại, AmiBroker sẽ không hiện lỗi rõ ràng trong quá trình biên dịch. Điều này khiến việc debug trở nên khó khăn hơn.
- Hỗ trợ lồng #include: Từ phiên bản 5.10 trở lên, bạn có thể nhúng file A chứa #include file B, tức là việc nhúng lồng nhau được hỗ trợ.
- Lưu cache: Theo mặc định, các tệp được #include sẽ được AmiBroker lưu vào bộ nhớ cache nhằm tăng hiệu suất xử lý. Tuy nhiên, điều này có thể gây ra lỗi khi bạn chỉnh sửa file nhưng AmiBroker vẫn dùng bản cũ đã cache.
MẸO CHUYÊN NGHIỆP:
Bạn có thể tắt cơ chế cache bằng cách sử dụng lệnh #pragma nocache (xem phần sau).
VÍ DỤ:
afl
CopyEdit
#pragma nocache
#include “C:/Program Files/AmiBroker/FormulaLibrary/common.afl”
2. LỆNH #include_once – BAO GỒM TỆP MỘT LẦN DUY NHẤT
CÚ PHÁP:
afl
CopyEdit
#include_once “đường_dẫn_tệp.afl”
CHỨC NĂNG:
Lệnh #include_once tương tự như #include, nhưng có điểm khác biệt quan trọng: mỗi tệp chỉ được nhúng một lần duy nhất, bất kể có bao nhiêu dòng #include_once gọi đến cùng file đó.
MỤC ĐÍCH:
Tránh lỗi định nghĩa trùng lặp khi cùng một tệp được bao gồm bởi nhiều tệp khác nhau trong chuỗi #include. Ví dụ, bạn có file A và file B đều dùng file Common.afl. Nếu bạn nhúng cả A và B vào Main.afl, thì file Common.afl có thể bị nhúng 2 lần. Sử dụng #include_once ngăn điều này xảy ra.
VÍ DỤ:
afl
CopyEdit
#include_once “my_common_function.afl”
LƯU Ý:
- Không hỗ trợ chỉ định theo kiểu dấu <> như #include.
- Hữu ích nhất trong các thư viện lớn, hoặc khi bạn đang thiết kế mô-đun dùng chung cho nhiều công thức.
3. LỆNH #pragma – THIẾT LẬP TÙY CHỌN TIỀN XỬ LÝ
CÚ PHÁP:
afl
CopyEdit
#pragma tùy_chọn
CHỨC NĂNG:
Lệnh #pragma được sử dụng để tùy chỉnh hành vi của bộ tiền xử lý, như điều khiển việc cache, khai báo biến tĩnh, luồng xử lý song song, v.v.
CÁC LỆNH #pragma HỖ TRỢ:
| Lệnh | Mô tả |
| #pragma nocache | Tắt lưu cache cho tệp #include. Các tệp được đọc lại mỗi lần thực thi. Hữu ích khi bạn liên tục chỉnh sửa file bên ngoài. |
| #pragma maxthreads N | Giới hạn số lượng luồng (threads) song song khi chạy trong cửa sổ Analysis. Dùng để kiểm soát CPU trên máy yếu. |
| #pragma enable_static_decl “prefix” | Cho phép khai báo các biến tĩnh (static) với tiền tố do bạn định nghĩa. Giúp tránh xung đột tên biến trong nhiều mô-đun |
| #pragma sequence(action1, action2,…) | Định nghĩa chuỗi hành động tự động khi nhấn nút “Run Sequence” trong Analysis. |
LƯU Ý KHI DÙNG:
- #pragma nocache phải đứng trước #include nếu bạn muốn nó có hiệu lực.
- Cú pháp nhạy cảm với khoảng trắng: #pragma nocache phải có đúng 1 dấu cách giữa hai thành phần, nếu không sẽ bị lỗi ngầm.
- Tác động hiệu suất: Việc tắt cache hoặc chạy đa luồng không đúng cách có thể ảnh hưởng đến tốc độ.
VÍ DỤ:
afl
CopyEdit
#pragma nocache
#pragma maxthreads 4
#include “indicators.afl”
TỔNG KẾT
Các lệnh tiền xử lý trong AFL cung cấp khả năng tổ chức mã linh hoạt, hỗ trợ viết công thức phức tạp, chia mô-đun rõ ràng và tái sử dụng hiệu quả. Hiểu rõ và sử dụng đúng #include, #include_once, và #pragma sẽ giúp bạn tránh lỗi, tăng hiệu suất và làm việc chuyên nghiệp hơn khi lập trình với AmiBroker.
Nếu bạn đang viết thư viện cá nhân, hệ thống chỉ báo tùy chỉnh, hoặc giao dịch tự động, hãy làm quen với các lệnh này và áp dụng chúng trong mọi dự án lớn.