Thư viện AFL
Thư viện AFL
Tích hợp Amibroker với Python COM Server

Tích hợp Amibroker với Python COM Server

Tại sao lại là Python?

Việc xây dựng các hệ thống giao dịch phức tạp đòi hỏi các mô hình toán học tiên tiến, có thể là thách thức khi thiết kế chỉ sử dụng Amibroker. Tuy nhiên, với sự trợ giúp của Python, có thể xây dựng các mô hình toán học phức tạp hiệu quả hơn. Python là ngôn ngữ nguồn mở, tương tự như C và C++, với vô số mô-đun của bên thứ ba có sẵn cho tính toán tài chính và mô hình thống kê. Các mô-đun này, chẳng hạn như numPy, sciPy và pandas, có thể được sử dụng để phát triển các mô hình phức tạp một cách dễ dàng. Để tìm hiểu thêm về các gói thống kê này, tìm kiếm nhanh trực tuyến sẽ cung cấp thêm thông tin.

Vì vậy, nếu chúng ta có thể Tích hợp Amibroker với Python thì có lẽ nó giống như việc tạo ra một cánh cổng hướng tới việc tiếp cận các mô hình toán học phức tạp trong Amibroker

Phương pháp mới để tích hợp Python với Amibroker:

Truy cập các hàm Python bằng Amibroker – AmiPy Plugin

(Chỉ hoạt động với phiên bản 64bit Amibroker 6.3 trở lên)

Máy chủ Python COM là gì?

Máy chủ COM Python đề cập đến một thành phần sử dụng công nghệ Mô hình đối tượng thành phần (COM), là một khung công tác của Microsoft dành cho thành phần phần mềm được giới thiệu vào năm 1993. COM cho phép tạo ra các thành phần phần mềm có thể tái sử dụng và có thể giao tiếp với nhau, đặc biệt là trên các quy trình và ngôn ngữ lập trình khác nhau.

Máy chủ Python COM thường được sử dụng cho các tác vụ tự động hóa, trong đó tập lệnh Python có thể cung cấp dịch vụ tự động hóa cho các ứng dụng khác, như các sản phẩm Microsoft Office. Ví dụ: máy chủ Python COM có thể được sử dụng để tự động hóa các tác vụ Excel phức tạp.

Máy chủ Python COM cần được đăng ký trong sổ đăng ký Windows để khách hàng có thể khám phá và sử dụng nó. Các công cụ trong thư viện Python để tích hợp COM thường cung cấp những cách dễ dàng để xử lý việc đăng ký này

Cài đặt Python

Cài đặt Phiên bản Python 3.x trong Máy Windows của bạn bằng VS Code Editor

Tích hợp Amibroker với Python COM Sever

Ở đây tôi sẽ trình diễn mã AFL của Bruce Peterson về Tích hợp Amibroker với Python bằng ví dụ về Bộ lọc IIR. IIR là viết tắt của Đáp ứng xung vô hạn (IIR) là một thuộc tính áp dụng cho nhiều hệ thống tuyến tính bất biến theo thời gian được sử dụng phổ biến nhất trong các bộ lọc kỹ thuật số và điện tử.

Các bước để làm theo

  1. Sao chép

iir.py Mã Python

và lưu trữ nó cục bộ

  1. Và thực thi tệp bằng lệnh

python iir.py

như hình dưới đây

  1. Sao chép

Python AFL.afl

tập tin và dán tập tin vào

\Amibroker\Formulas\Thư mục biểu đồ cơ bản

4)Mở Biểu đồ trống mới và áp dụng

Python AFL.afl

đến nó. Bạn sẽ có thể thấy các đường IIR (Phản hồi xung vô hạn) và DEMA trên Chân nến nơi IIR được tính toán với sự trợ giúp của Python COM như hiển thị bên dưới

Liên quan

Mã nguồn (.afl)
# iir.py python file

import pythoncom
from win32com.server.exception import COMException
import win32com.server.util
import win32com.client.dynamic
import win32gui
import random


class PythonUtilities(object):
    _public_methods_=['IIR2']

    #
    # Use pythoncom.CreateGuid() 2/1/08
    #               
    _reg_clsid_="{25F32489-9E84-4D9F-8AEB-44DC9B528405}"
    _reg_desc_ =   "Utilities for Extending Amibroker AFL"
    _reg_progid_ = "PyAFL"
    _readonly_attrs_ = ['revision']

   # class attributes can be defined and used to transfer values from AFL

    _public_attrs_=['NDepVar','ArrayLen','ProbArray',
                    'X_Open','X_High','X_Low','X_Close',
                    'X_Volume','X_OI','Log']

    Log=""  # Log may be a  string use to pass text to AFL
    
    def IIR2(self,InList,coef0,coef1,coef2):
        # example infinite impulse response filter from Amibroker docs
        #
        self.revision="version 1"
        OutList=[]
##
##        print type(InList),type(coef0)
##        print coef0,coef1,coef2
##        
        InList=list(InList)
        
        if len(InList)==0:
            return OutList
        OutList=InList[0:2]
        for index in range(2,len(InList)):    
            OutList.append(coef0*InList[index]+coef1*InList[index-1]+coef2*InList[index-2])
        OutList.append(0)
        if OutList is None:
            return
        else:
            return OutList
 
    
        
if __name__=='__main__':
    print("Registering COM Server ")
    import win32com.server.register
    win32com.server.register.UseCommandLine(PythonUtilities)

# uncomment out if you want to unregister com server 

##    from win32com.server.register import UnregisterServer
##    UnregisterServer(PythonUtilities._reg_clsid_)
##    print "Com server unregistered."    

#############################################End Python Code
####################################

Hướng dẫn: Copy đoạn mã trên, mở AmiBroker Formula Editor, dán vào và lưu lại với tên tương ứng.