I. Giới thiệu về COM và Plugin trong AFL
AmiBroker Formula Language (AFL) là ngôn ngữ kịch bản mạnh mẽ được thiết kế để tạo chỉ báo, chiến lược, bộ lọc và các công cụ phân tích kỹ thuật. Tuy nhiên, AFL không phải lúc nào cũng đủ để xử lý những tác vụ phức tạp hoặc tương tác trực tiếp với hệ thống bên ngoài. Đó là lý do tại sao AmiBroker hỗ trợ hai công nghệ mở rộng cực kỳ hữu ích:
- Component Object Model (COM)
- DLL Plugin
Hai cơ chế này cho phép bạn sử dụng ngôn ngữ lập trình khác (như VBScript, JScript, C/C++, Visual Basic…) để tăng khả năng mở rộng và hiệu năng cho hệ thống giao dịch của bạn.
II. Hỗ trợ COM trong AFL
1. COM là gì?
COM (Component Object Model) là một tiêu chuẩn của Microsoft cho phép các phần mềm và đối tượng phần mềm có thể tương tác với nhau dù viết bằng ngôn ngữ khác nhau. Trong AmiBroker, COM giúp bạn:
- Gọi các hàm tùy chỉnh từ ngôn ngữ ngoài (như VBScript hoặc JScript)
- Tận dụng các thư viện hệ thống hoặc của bên thứ ba như Excel, Word, hoặc các thư viện tính toán chuyên sâu
- Viết mã tính toán ngoài AFL, nhưng có thể gọi trực tiếp trong AFL
Tính năng COM được giới thiệu từ phiên bản AmiBroker 3.75 beta.
2. Gọi hàm COM từ kịch bản (Script)
✅ Cách cũ – Truyền biến giữa AFL và Script
afl
Copy code
EnableScript(“jscript”);
x = (High + Low) / 2;
f0 = 0.2;
f1 = 1.2;
f2 = -0.4;
<%
x = VBArray(AFL(“x”)).toArray();
f0 = AFL(“f0”);
f1 = AFL(“f1”);
f2 = AFL(“f2”);
y = new Array();
y[0] = x[0];
y[1] = x[1];
for (i = 2; i < x.length; i++) {
y[i] = f0 * x[i] + f1 * y[i – 1] + f2 * y[i – 2];
}
AFL.Var(“y”) = y;
%>
Graph1 = y;
👉 Nhược điểm: Cồng kềnh, khó tái sử dụng, không phù hợp với hàm lặp lại nhiều lần.
✅ Cách mới – Gọi hàm trực tiếp bằng COM
afl
Copy code
EnableScript(“jscript”);
<%
function IIR2(x, f0, f1, f2) {
x = VBArray(x).toArray();
y = new Array();
y[0] = x[0];
y[1] = x[1];
for (i = 2; i < x.length; i++) {
y[i] = f0 * x[i] + f1 * y[i – 1] + f2 * y[i – 2];
}
return y;
}
%>
script = GetScriptObject();
Graph0 = script.IIR2((High + Low)/2, 0.2, 1.2, -0.4);
👉 Ưu điểm:
- Tái sử dụng hàm
- Rút gọn code AFL
- Tăng tốc độ và khả năng bảo trì
3. Gọi các đối tượng COM/ActiveX bên ngoài
Bạn có thể sử dụng Visual Basic hoặc các ngôn ngữ hỗ trợ COM để viết lớp xử lý riêng.
✅ Ví dụ trong Visual Basic:
vb
Copy code
Public Function IIR2(InputArray() As Variant, f0 As Variant, f1 As Variant, f2 As Variant) As Variant
Dim Result()
ReDim Result(UBound(InputArray))
Result(0) = InputArray(0)
Result(1) = InputArray(1)
For i = 2 To UBound(InputArray)
Result(i) = f0 * InputArray(i) + f1 * Result(i – 1) + f2 * Result(i – 2)
Next
IIR2 = Result
End Function
👉 Cách sử dụng:
- Tạo dự án mới trong Visual Basic → ActiveX DLL
- Gắn hàm xử lý vào Class
- Biên dịch thành DLL
- Gọi trong AFL thông qua COM
III. Plugin trong AFL
1. Plugin là gì?
Plugin trong AmiBroker là các DLL mở rộng, có thể viết bằng:
- C/C++
- Delphi
- Các ngôn ngữ hỗ trợ tạo thư viện động (.DLL)
Khác với COM (tập trung vào tương tác đối tượng), plugin chạy trực tiếp như một phần của AmiBroker, với hiệu năng cực cao.
2. Ưu điểm khi dùng Plugin
- Chạy rất nhanh vì mã đã được biên dịch
- Có thể gọi lại hàm AFL, đọc và gán biến AFL
- Hỗ trợ highlight cú pháp trong trình soạn AFL
- Có thể tạo chức năng cực kỳ phức tạp không thể viết bằng AFL
3. Cấu trúc Plugin (khái quát)
Một plugin gồm:
- Tập tin DLL được biên dịch
- Hàm khởi tạo (plugin startup)
- Các hàm bạn tự định nghĩa, được AmiBroker nhận diện
- Có thể có giao diện riêng (nếu viết plugin UI)
Mọi plugin cần tuân theo AmiBroker Developer Kit (ADK) – chỉ dành cho người dùng đăng ký.
4. Cách sử dụng Plugin của bên thứ ba
Bước 1: Tải plugin tại:
👉 https://www.amibroker.net/3rdparty.php
Bước 2: Sao chép file DLL vào thư mục:
📂 AmiBroker\Plugins
Bước 3: Mở AmiBroker, vào menu:
🛠 Tools → Plugins → Kiểm tra danh sách plugin
Bước 4: Gọi các hàm của plugin như hàm nội bộ trong AFL.
5. Lưu ý khi dùng Plugin bên ngoài
- Một số plugin có thể gây crash hệ thống nếu không tương thích.
- AmiBroker không chịu trách nhiệm với plugin bên thứ ba.
- Luôn đọc kỹ tài liệu và kiểm thử trước khi dùng vào giao dịch thực.
IV. So sánh COM vs Plugin
| Tiêu chí | COM | Plugin DLL |
| Viết bằng | VBScript, JScript, VB, C#, v.v. | C/C++, Delphi |
| Tốc độ thực thi | Trung bình | Rất cao |
| Mức độ tương tác AFL | Cao (truyền biến, gọi hàm) | Rất cao (gọi hàm, biến, callback) |
| Mức độ dễ triển khai | Dễ | Khó hơn (yêu cầu biên dịch) |
| Hỗ trợ tích hợp hệ thống | Rất tốt | Tốt (nếu lập trình tốt) |
| Tính mở rộng | Cao | Rất cao |
V. Kết luận
COM và Plugin là hai công cụ mạnh mẽ giúp mở rộng khả năng xử lý của AFL vượt xa ngôn ngữ gốc. Tùy vào nhu cầu – từ đơn giản (dùng VBScript) đến phức tạp (viết hàm tính toán tốc độ cao bằng C++) – bạn có thể lựa chọn công nghệ phù hợp:
- COM phù hợp với xử lý logic, tính toán có liên kết với hệ thống Windows hoặc tái sử dụng script đã viết
- Plugin dành cho những ai cần tối ưu tốc độ, tính toán nặng hoặc muốn tạo các hàm có khả năng mở rộng cao, dùng cho toàn bộ hệ thống
Bằng việc hiểu rõ và ứng dụng COM và Plugin đúng cách, bạn có thể biến AmiBroker thành một nền tảng giao dịch vô cùng mạnh mẽ, linh hoạt, và tùy biến tối đa theo nhu cầu của riêng bạn.