Hỗ trợ Component Object Model (COM) và Plugin trong AFL

ha.anh
8 Min Read

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.

TAGGED:
Share This Article
Leave a Comment