DANH SÁCH LỖI TRONG AFL, NGUYÊN NHÂN, DIỄN GIẢI VÀ VÍ DỤ MINH HỌA

ha.anh
7 Min Read

Việc làm việc với ngôn ngữ AFL trong Amibroker thường xuyên xuất hiện các lỗi cú pháp và logic. Dưới đây là danh sách đầy đủ các mã lỗi phổ biến trong AFL, được sắp xếp có hệ thống, kèm theo giải thích chi tiết và ví dụ minh họa.

PHÂN LOẠI CÁC NHÓM LỖI

➤ Lỗi cú pháp và kiểu dữ liệu (Từ lỗi 1 đến 17)
➤ Lỗi đối tượng COM (18 đến 20)
➤ Lỗi dữ liệu và hàm hệ thống (21 đến 28)
➤ Lỗi khai báo, biến, hoặc logic sai (29 đến 36)
➤ Lỗi liên quan đến Category, RT Data, Include (37 đến 42)
➤ Lỗi giao dịch luân phiên và chỉ báo (43 đến 48)
➤ Lỗi tối ưu hóa (49 đến 54, 90–94)
➤ Cảnh báo hiệu suất (501–503)
➤ Lỗi giao dịch và thiết lập chiến lược (701–706)

CÁC LỖI CỤ THỂ

🔹 LỖI 1: Thao tác không được phép – kiểu toán tử/toán hạng không khớp
Bạn đang sử dụng phép toán (như nhân, chia, trừ…) với một kiểu dữ liệu không phù hợp.
Ví dụ:

afl

Copy code

a = “x” * 5;     // ❌ sai, không thể nhân chuỗi với số

b = “x” – “y”;   // ❌ sai, không thể trừ hai chuỗi

c = “x” + “y”;   // ✅ đúng, nối chuỗi hợp lệ

 

🔹 LỖI 2: Kiểu đối số không đúng – đang mong đợi số hoặc mảng
Xảy ra khi bạn truyền chuỗi vào một hàm yêu cầu giá trị số hoặc mảng.
Ví dụ:

afl

Copy code

x = sin(“test”);  // ❌ sai, sin yêu cầu đối số là số hoặc mảng

 

🔹 LỖI 3: Kiểu không khớp – toán tử âm phân biệt yêu cầu số hoặc mảng
Ví dụ:

afl

Copy code

text = – “hello”;  // ❌ sai, không thể phủ định một chuỗi

 

🔹 LỖI 4: Tham số không đúng – mong đợi số
Điển hình khi dùng ApplyStop với tham số không hợp lệ:

afl

Copy code

ApplyStop(stopTypeLoss, IIf(C > O, stopModePercent, stopModePoint), 5);

// ❌ sai, Mode phải là giá trị số, không phải mảng

 

🔹 LỖI 5: Đối số #1 không đúng kiểu
Ví dụ:

afl

Copy code

MA(“test”, 5);  // ❌ sai, MA yêu cầu mảng giá làm đối số đầu tiên

 

🔹 LỖI 6: Điều kiện trong IF, WHILE, FOR phải là kiểu Số hoặc Boolean
Bạn không thể dùng mảng trực tiếp làm điều kiện:

afl

Copy code

if (Close) { … }  // ❌ sai nếu Close là mảng

 

🔹 LỖI 7: Điều kiện phải là Số hoặc Boolean – không được là chuỗi

afl

Copy code

if (“text”) { … }  // ❌ sai

 

🔹 LỖI 8–12: Liên quan đến sai sót khi thao tác với mảng
Chỉ số phải là số, nằm trong phạm vi hợp lệ, và dữ liệu phải phù hợp:

afl

Copy code

x = array[BarCount];     // ❌ chỉ số ngoài phạm vi

x = “test”[5];           // ❌ sai, không thao tác chỉ số với chuỗi

 

🔹 LỖI 13–15: Vòng lặp vô tận trong WHILE, FOR, DO-WHILE
Khi điều kiện vòng lặp không bao giờ sai:

afl

Copy code

while (1) { }  // ❌ vòng lặp vô hạn

 

🔹 LỖI 16–17: Quá nhiều hoặc thiếu đối số trong lời gọi hàm
Kiểm tra số lượng tham số truyền vào hàm có đúng như yêu cầu không.

🔹 LỖI 18–20: Lỗi đối tượng COM chưa khởi tạo hoặc gọi phương thức sai
Bạn cần dùng CreateObject hoặc đảm bảo COM đã được định nghĩa đúng.

🔹 LỖI 21–28: Lỗi truy xuất dữ liệu, hàm hệ thống và bộ nhớ
Bao gồm lỗi truy cập ký hiệu sai, định dạng không hợp lệ, thiếu bộ nhớ, v.v.

🔹 LỖI 29–36: Biến chưa được khởi tạo, lỗi cú pháp, đặt tên sai
Biến sử dụng mà chưa được gán giá trị. Dùng biến trùng tên với hàm hoặc khai báo sai cú pháp gây lỗi.

🔹 LỖI 37–42: Các trường không hỗ trợ trong SetOptions, GetOptions, GetRTData
Bao gồm lỗi đọc/ghi danh mục ngành sai hoặc không tìm thấy file khi dùng #include.

🔹 LỖI 43–48: Lỗi giao dịch luân phiên và chỉ báo
Một số tính năng như “biến dừng”, giao diện giao dịch hoặc tên tham số không hợp lệ gây lỗi trong quá trình chạy chiến lược.

🔹 LỖI 49–54: Lỗi tối ưu hóa và chuỗi escape không đúng
Tên tham số bị thiếu, bước tối ưu sai, hoặc chuỗi ký tự như \n, \\ không được viết đúng cách.

🔹 LỖI 90–94: Lỗi tối ưu hóa nâng cao
OptimizerSetOption hoặc engine bị thiếu hoặc định dạng sai.

🔹 CẢNH BÁO 501–503: Cảnh báo logic và hiệu suất
Cảnh báo việc sử dụng gán trong điều kiện (gợi ý dùng == thay vì =), hoặc sử dụng quá nhiều lệnh Plot gây chậm hiệu suất.

🔹 LỖI 701–706: Lỗi giao dịch và chiến lược luân phiên
Bao gồm thiếu khai báo biến mua/bán, hoặc vi phạm quy tắc của giao dịch theo chiến lược phân luồng.

🟦 KẾT LUẬN

Việc nắm rõ các lỗi trong AFL không chỉ giúp bạn tiết kiệm thời gian xử lý lỗi mà còn giúp cải thiện chất lượng mã và chiến lược giao dịch. Mỗi lỗi trên đều có nguyên nhân và cách khắc phục riêng, vì vậy khi gặp lỗi, hãy đối chiếu mã lỗi với danh sách trên để hiểu rõ và sửa đúng trọng tâm.

 

TAGGED:
Share This Article
Leave a Comment