Phân tích dữ liệu chuỗi thời gian và kiểm tra lại dữ liệu tick

Tác giả:Lydia., Tạo: 2023-01-06 15:27:16, Cập nhật: 2023-09-20 10:12:15

img

Phân tích dữ liệu chuỗi thời gian và kiểm tra lại dữ liệu tick

Dữ liệu chuỗi thời gian

Trong đầu tư định lượng, các dữ liệu này chủ yếu được phản ánh trong giá và chuyển động của các điểm dữ liệu của đối tượng đầu tư được theo dõi. Ví dụ, đối với giá cổ phiếu, dữ liệu chuỗi thời gian được ghi lại thường xuyên trong một khoảng thời gian nhất định có thể tham chiếu đến biểu đồ sau đây, sẽ cung cấp cho độc giả một sự hiểu biết rõ ràng hơn:

img

Như bạn có thể thấy, ngày là trên trục x, và giá được hiển thị trên trục y. Trong trường hợp này, interval continuous time period có nghĩa là các ngày trên trục x được cách nhau 14 ngày: lưu ý sự khác biệt giữa ngày 7 tháng 3 năm 2005 và điểm tiếp theo, ngày 31 tháng 3 năm 2005, ngày 5 tháng 4 năm 2005 và ngày 19 tháng 4 năm 2005.

Tuy nhiên, khi bạn sử dụng dữ liệu chuỗi thời gian, bạn thường sẽ thấy nhiều hơn chỉ là loại dữ liệu này chỉ chứa hai cột: ngày và giá. Trong hầu hết các trường hợp, bạn sẽ sử dụng năm cột dữ liệu: thời gian dữ liệu, giá mở, giá cao nhất, giá thấp nhất và giá đóng. Điều này có nghĩa là nếu thời gian dữ liệu của bạn được đặt ở mức hàng ngày, những thay đổi giá cao, mở, thấp và đóng của ngày sẽ được phản ánh trong dữ liệu của chuỗi thời gian này.

Dữ liệu Tick là gì?

Dữ liệu Tick là cấu trúc dữ liệu giao dịch chi tiết nhất trong sàn giao dịch. Nó cũng là một hình thức mở rộng của dữ liệu chuỗi thời gian được đề cập ở trên, bao gồm: giá mở cửa, giá cao nhất, giá thấp nhất, giá cuối cùng, số lượng giao dịch và doanh thu. Nếu dữ liệu giao dịch được so sánh với một con sông, dữ liệu Tick là dữ liệu của con sông ở một phần cắt ngang nhất định.

Mỗi hành động của sàn giao dịch nước ngoài sẽ được đẩy đến thị trường trong thời gian thực, trong khi sàn giao dịch trong nước kiểm tra hai lần một giây. Nếu có hành động trong khoảng thời gian này, một ảnh chụp sẽ được tạo ra và đẩy.

Tất cả các mã và thu thập dữ liệu chuỗi thời gian trong hướng dẫn này sẽ được hoàn thành trên nền tảng FMZ Quant.

Đánh dấu dữ liệu về FMZ Quant

Mặc dù dữ liệu Tick trong nước không phải là một Tick thực sự, nó có thể gần vô hạn và khôi phục thực tế ít nhất bằng cách sử dụng dữ liệu này để kiểm tra lại.

img

Không chỉ vậy, trên FMZ Quant, ngay cả khi dữ liệu có khoảng thời gian tải 1 giờ, độ tỉ mỉ dữ liệu vẫn có thể được điều chỉnh, chẳng hạn như điều chỉnh độ tỉ mỉ dữ liệu thành 1 phút. Tại thời điểm này, đường K 1 giờ được tạo thành từ dữ liệu 1 phút. Tất nhiên, độ tỉ mỉ càng nhỏ, độ chính xác càng cao. Điều mạnh mẽ hơn là nếu bạn chuyển dữ liệu sang một bot thực Tick, bạn có thể khôi phục môi trường bot thực một cách liền mạch. Đó là dữ liệu thực của Tick Exchange hai lần một giây.

img

Bây giờ bạn đã học được các khái niệm cơ bản bạn cần hiểu để hoàn thành hướng dẫn này. Những khái niệm này sẽ sớm trở lại, và bạn sẽ tìm hiểu thêm về chúng sau trong hướng dẫn này.

Thiết lập môi trường làm việc

Các công cụ tốt hơn làm cho công việc tốt hơn. Chúng ta cần triển khai một docker trên nền tảng FMZ Quant trước tiên. Đối với khái niệm của một docker, người đọc có kinh nghiệm lập trình có thể tưởng tượng nó như một hệ thống Docker được đóng gói chính thức, đã đóng gói các giao diện API công khai của các sàn giao dịch chính thống khác nhau và các chi tiết kỹ thuật của việc viết chiến lược và kiểm tra lại. Mục đích ban đầu của việc thành lập hệ thống này là làm cho các nhà giao dịch định lượng tập trung vào viết chiến lược và thiết kế khi sử dụng nền tảng FMZ Quant. Những chi tiết kỹ thuật này được trình bày cho các nhà viết chiến lược theo một công thức đóng gói để tiết kiệm rất nhiều thời gian và nỗ lực.

  • Việc triển khai hệ thống docker của nền tảng FMZ Quant Có hai phương pháp để triển khai một docker:

Phương pháp A: Người dùng có thể tự thuê hoặc mua máy chủ và triển khai chúng trên các nền tảng điện toán đám mây khác nhau, chẳng hạn như AWS, Alibaba Cloud, Digital Ocean và Google Cloud. Ưu điểm là cả an ninh chiến lược và an ninh hệ thống đều được đảm bảo. Đối với nền tảng FMZ Quant, người dùng được khuyến khích sử dụng phương pháp này. Việc triển khai phân tán loại bỏ nguy cơ ẩn của các cuộc tấn công máy chủ (dù đó là khách hàng hay chính nền tảng).

Phương pháp B: Sử dụng máy chủ công cộng của nền tảng FMZ Quant để triển khai, nền tảng cung cấp bốn địa điểm để triển khai tại Hồng Kông, Singapore, Nhật Bản và miền Đông Hoa Kỳ. Người dùng có thể triển khai theo vị trí của sàn giao dịch mà họ muốn giao dịch và nguyên tắc gần gũi. Ưu điểm của khía cạnh này là nó đơn giản và dễ dàng hoàn thành chỉ với một cú nhấp chuột, đặc biệt phù hợp với người dùng mới bắt đầu. Nó không cần phải biết nhiều điều về việc mua máy chủ Linux, và nó cũng tiết kiệm thời gian và năng lượng từ việc học các lệnh Linux. Giá tương đối rẻ. Đối với người dùng có quỹ nhỏ, nền tảng khuyên nên sử dụng phương pháp triển khai này.

img

Để người mới bắt đầu hiểu, bài viết này sẽ áp dụng phương pháp B.

Các hoạt động cụ thể là:FMZ.COM, bấm Dashboard, Docker, và bấm Một bấm thuê một VPS docker để thuê docker.

Nhập mật khẩu, như được hiển thị bên dưới sau khi triển khai thành công:

img

  • Mối quan hệ giữa khái niệm hệ thống robot và docker Như đã đề cập ở trên, docker giống như một hệ thống docker, và một hệ thống docker giống như một tập hợp các tiêu chuẩn. Chúng tôi đã triển khai tập hợp các tiêu chuẩn này. Tiếp theo, chúng tôi cần tạo một instance cho tiêu chuẩn này, đó là một robot.

Tạo robot rất đơn giản. Sau khi triển khai docker, hãy nhấp vào cột Bot ở bên trái, nhấp vào Thêm bot, điền tên trong tên thẻ, và chọn docker vừa triển khai. Các tham số và thời gian K-line dưới đây có thể được thiết lập theo tình huống cụ thể, chủ yếu là phối hợp với chiến lược giao dịch.

img

Cho đến nay, môi trường làm việc của chúng tôi đã được xây dựng. Bạn có thể thấy rằng nó rất đơn giản và hiệu quả, và mỗi chức năng thực hiện nhiệm vụ của riêng mình.

Thực hiện một chiến lược EMA đơn giản trong Python

Chúng tôi đã đề cập đến các khái niệm về dữ liệu chuỗi thời gian và dữ liệu Tick ở trên.

  • Nguyên tắc cơ bản của chiến lược EMA

Thông qua EMA giai đoạn chậm, chẳng hạn như EMA 7 ngày, và EMA giai đoạn nhanh, chẳng hạn như EMA 3 ngày. Chúng được áp dụng cho cùng một biểu đồ đường K. Khi EMA giai đoạn nhanh vượt qua EMA giai đoạn chậm, chúng tôi gọi đó là Golden Cross; Khi EMA giai đoạn chậm đi xuống qua EMA giai đoạn nhanh, chúng tôi gọi đó là Bearish Crossover.

Cơ sở để mở một vị trí là mở các vị trí dài với Golden Cross và mở các vị trí ngắn với Bearish Crossover. Lý do đóng các vị trí là như nhau.

Mở ra đi.FMZ.COM, đăng nhập vào tài khoản, Bảng điều khiển, Thư viện Chiến lược, và tạo một chiến lược mới. Chọn Python trong ngôn ngữ viết chiến lược ở góc trên bên trái. Dưới đây là mã của chiến lược này. Mỗi dòng có bình luận chi tiết. Xin hãy dành thời gian để hiểu. Chiến lược này không phải là một chiến lược bot thực sự. Đừng thử nghiệm với tiền thật. Mục đích chính là để cung cấp cho bạn một ý tưởng chung về viết chiến lược và một mẫu để học.

import types # Import the Types module library, which is designed to handle the various data types that will be used in the code.

def main(): # The main function, where the strategy logic begins.
    STATE_IDLE = -1 # Mark position status variables
    state = STATE_IDLE # Mark the current position status
    initAccount = ext.GetAccount() # The spot digital currency trading class library (python version) is used here. Remember to check it when writing the strategy to obtain the initial account information.
    while True: # Enter the loop
        if state == STATE_IDLE : # Here begins the logic of opening positions.
            n = ext.Cross(FastPeriod,SlowPeriod) # The indicator crossover function is used here, for details please see: https://www.fmz.com/strategy/21104.
            if abs(n) >= EnterPeriod : # If n is greater than or equal to the market entry observation period, the market entry observation period here is to prevent positions from being opened indiscriminately as soon as the market opens.
                opAmount = _N(initAccount.Stocks * PositionRatio,3) # Opening position quantity, for the usage of _N, please check the official API documentation.
                Dict = ext.Buy(opAmount) if n > 0 else ext.Sell(opAmount) # Create a variable to store the open position status and execute the open position operation.
                if Dict :  # Check the dict variable and prepare for the following log output.
                    opAmount = Dict['amount']
                    state = PD_LONG if n > 0 else PD_SHORT # Both PD_LONG and PD_SHORT are global constants used to represent long and short positions, respectively.
                    Log("Details of opening positions",Dict,"Cross-period",n) # Log information
        else: # Here begins the logic of closing positions.
            n = ext.Cross(ExitFastPeriod,ExitSlowPeriod) # The indicator crossover function.
            if abs(n) >= ExitPeriod and ((state == PD_LONG and n < 0) or (state == PD_SHORT and n > 0)) : # If the market exit observation period has passed and the current account status is in the position status, then you can determine the Golden Cross or Bearish Crossover.
                nowAccount = ext.GetAccount() # Refresh and get account information again.
                Dict2 = ext.Sell(nowAccount.Stocks - initAccount.Stocks) if state == PD_LONG else ext.Buy(initAccount.Stocks - nowAccount.Stocks) # The logic of closing a position is to close the long position if it is a long position and close the short position if it is a short position.
                state = STATE_IDLE # Mark the position status after closing positions.
                nowAccount = ext.GetAccount() # Refresh and get account information again.
                LogProfit(nowAccount.Balance - initAccount.Balance,'money:',nowAccount.Balance,'currency:',nowAccount.Stocks,'The details of closing positions',Dict2,'Cross-over period:',n) # Log information
        Sleep(Interval * 1000) # Pause the loop for one second to prevent the account from being restricted due to too fast API access frequency.
  • Kiểm tra lại chiến lược EMA Trên trang chỉnh sửa chiến lược, chúng ta đã hoàn thành việc viết chiến lược. Tiếp theo, chúng ta cần kiểm tra lại chiến lược để xem nó hoạt động như thế nào trên thị trường lịch sử. Kiểm tra lại đóng một vai trò quan trọng trong bất kỳ sự phát triển chiến lược định lượng nào, nhưng nó chỉ có thể được sử dụng như một tài liệu tham khảo quan trọng. Kiểm tra lại không bằng đảm bảo lợi nhuận, bởi vì thị trường luôn thay đổi, và kiểm tra lại chỉ là một hành động nhìn lại, vẫn thuộc về thể loại cảm ứng, thị trường là suy luận.

Nhấp vào backtest, bạn có thể thấy rằng có rất nhiều tham số có thể điều chỉnh, có thể được sửa đổi trực tiếp. Đối với tương lai, chiến lược ngày càng phức tạp hơn, và các tham số ngày càng nhiều. Phương pháp sửa đổi này có thể giúp người dùng tránh rắc rối sửa đổi mã một lần một, thuận tiện, nhanh chóng và rõ ràng.

img

Các tùy chọn tối ưu hóa sau đây có thể tối ưu hóa các thông số được đặt tự động. Hệ thống sẽ thử các thông số tối ưu khác nhau để giúp các nhà phát triển chiến lược tìm ra lựa chọn tối ưu.

Từ các ví dụ trên, chúng ta có thể thấy rằng cơ sở của giao dịch định lượng là thông qua việc phân tích dữ liệu chuỗi thời gian và tương tác kiểm tra ngược của dữ liệu dấu chấm. Bất kể logic phức tạp như thế nào, nó không thể tách khỏi hai yếu tố cơ bản này. Sự khác biệt chỉ là sự khác biệt về kích thước. Ví dụ, giao dịch tần số cao đòi hỏi các khía cạnh dữ liệu chi tiết hơn và nhiều dữ liệu chuỗi thời gian hơn. Một ví dụ khác là giao dịch chênh lệch, đòi hỏi rất nhiều dữ liệu từ mẫu kiểm tra ngược. Nó có thể đòi hỏi dữ liệu chuyên sâu liên tục của hai đối tượng giao dịch trong hơn mười năm để tìm ra kết quả thống kê về sự mở rộng và giảm lãi suất của họ. Trong các bài viết trong tương lai, tôi sẽ giới thiệu các chiến lược giao dịch tần số cao và giao dịch chênh lệch một sau một. Xin vui lòng mong đợi nó.


Có liên quan

Thêm nữa