Chiến lược dòng lệnh chờ tuyến tính được phát triển dựa trên chức năng phát lại dữ liệu

Tác giả:Lydia., Tạo: 2022-12-23 20:06:04, Cập nhật: 2023-09-20 09:41:28

img

Chiến lược dòng lệnh chờ tuyến tính được phát triển dựa trên chức năng phát lại dữ liệu

Lời giới thiệu

Vì vậy, hôm nay tôi muốn chia sẻ với bạn cách sử dụng chức năng phát dữ liệu FMZ Quant để khám phá cảm hứng giao dịch của tôi.

Cảm hứng và cảm giác thị trường của giao dịch

Những gì chúng ta thường gọi là cảm hứng đề cập đến trạng thái sáng tạo mà mọi người tạo ra trong quá trình suy nghĩ. Đối với các nhà giao dịch, bán cầu trái của não bộ chúng ta đã hoàn thành việc xây dựng một loạt các quy tắc như viết chiến lược, phân bổ vốn và thiết lập tham số.

Mặc dù giác quan thứ sáu như trực giác trong giao dịch không được lý luận và phân tích hợp lý, nhưng dự đoán xu hướng tương lai của thị trường sẽ thúc đẩy các nhà giao dịch đưa ra quyết định mua hoặc bán.

Làm thế nào để lấy cảm hứng

Trong mắt của một người bình thường, cảm giác thị trường là bí ẩn. Đó là một tài năng bí ẩn. Với nó, bạn có thể đứng trên thị trường. Trên thực tế, nó là một bản tóm tắt của kinh nghiệm giao dịch chủ quan của não. Đó là một cảm giác định kiến mơ hồ nhận ra thông qua nhiều năm theo dõi thị trường.

Mặc dù nói một cách nghiêm ngặt, cảm hứng không hoàn toàn giống như cảm giác thị trường, nhưng chúng tôi tin rằng sau hàng ngàn lần tinh chỉnh thị trường, chúng tôi sẽ có một sự hiểu biết sâu sắc hơn về thị trường, và chúng tôi sẽ có thể phát triển các chiến lược dễ dàng hơn. Vì vậy, nếu bạn muốn có được tài năng này và phát triển nhiều chiến lược giao dịch hơn. Chỉ thông qua một số lượng lớn giao dịch, chúng tôi có thể cải thiện hệ thống giao dịch của mình.

Tuy nhiên, tương lai hàng hóa trong nước và cổ phiếu chỉ có một vài giờ thời gian giao dịch mỗi ngày, vì vậy sẽ rất khó để cải thiện kinh nghiệm của một người trong việc theo dõi thị trường, hình thành các mô hình lợi nhuận và quy tắc giao dịch của riêng mình và đào tạo phản xạ có điều kiện của một người một cách tiềm thức từ giao dịch trực tiếp. Ngoài việc trả một chi phí thời gian dài, hầu hết các nhà giao dịch cũng chịu chi phí tổn thất vốn. Để giải quyết vấn đề này, FMZ Quant đã phát triển chức năng phát lại dữ liệu.

Làm thế nào để sử dụng phát lại dữ liệu

Chức năng phát lại dữ liệu có thể được đào tạo bất kể giờ giao dịch của sàn giao dịch, và nó hỗ trợ nhiều loại tương lai hàng hóa và các loại tiền kỹ thuật số. Thị trường có thể được chơi lại bằng tay hoặc tự động, và thời gian bắt đầu và kết thúc và tốc độ phát lại của thị trường lịch sử có thể được đặt tự do. So với các phần mềm khác, chế độ phát lại dữ liệu K-line được sử dụng rộng rãi, trong khi FMZ Quant áp dụng chế độ phát lại dữ liệu ở mức Tick, thực sự gần với môi trường backtesting của robot giao dịch thực tế, và nó tái tạo dữ liệu khối lượng giá của thị trường, cho phép các nhà giao dịch đắm mình trong thế giới thực.

Mở trang web chính thức của FMZ Quant (fmz.comĐể đăng ký và đăng nhập, sau đó nhấp vào cơ sở dữ liệu trong bảng điều khiển để hiển thị trang chức năng phát dữ liệu. Có bốn hộp tùy chọn và một nút chọn. Đầu tiên, nhấp vào nút chọn để chỉ hiển thị các biến thể hỗ trợ phát lại bot thực, sau đó chọn các biến thể sẽ được phát lại ở phía trên bên trái, sau đó chọn thời gian bắt đầu và kết thúc của dữ liệu trong hai hộp tùy chọn tiếp theo, sau đó chọn khoảng thời gian của dữ liệu như phát lại bot thực, và cuối cùng nhấp vào nút Go ở phía bên phải để bắt đầu chức năng phát lại dữ liệu.

img

Có ba phần dưới nhãn dữ liệu. Ở bên trái là lịch sử giao dịch, nơi tất cả các lệnh đã được đóng được hiển thị theo thứ tự thời gian. Ở giữa là độ sâu 20 vị trí của mỗi dữ liệu lệnh mua và bán. Ở bên phải là khu vực điều khiển phát dữ liệu, nơi bạn có thể chọn các phương pháp phát dữ liệu thủ công và tự động, giống như sử dụng máy nghe nhạc truyền thông.

img

Chỉ số vị trí có thể kéo con trỏ qua lại từ trái sang phải, cho phép bạn chọn thời gian bắt đầu phát dữ liệu nhanh chóng.

img

Tốc độ phát dữ liệu cũng có thể được điều khiển ở phía dưới bằng cách di chuyển con trỏ sang trái, trong milliseconds, để tăng tốc và giảm tốc độ dữ liệu trong quá trình phát.

img

Xây dựng chiến lược logic

Mặc dù có nhiều yếu tố ảnh hưởng đến giá tăng và giảm, bao gồm môi trường kinh tế toàn cầu, chính sách vĩ mô quốc gia, chính sách công nghiệp có liên quan, quan hệ cung và cầu, các sự kiện quốc tế, lãi suất và tỷ giá hối đoái, lạm phát và thoái vốn, tâm lý thị trường, các yếu tố không rõ, v.v., nhưng giá cuối cùng trên thị trường là kết quả của sự cạnh tranh giữa các bên khác nhau và phía vị trí ngắn. Nếu nhiều người mua hơn bán, giá sẽ tăng; Ngược lại, nếu nhiều người bán hơn mua, giá sẽ giảm. Sau đó chúng ta chỉ cần phân tích giá để thực hiện chiến lược giao dịch.

Thông qua việc phát lại FMZ Quant của các cặp giao dịch BTC_USDT của sàn giao dịch Binance trong những tháng gần đây, chúng tôi thấy rằng khi thị trường tăng và giảm mạnh, dữ liệu đơn đặt hàng của Tick rõ ràng không đối xứng về khối lượng đơn đặt hàng giữa các vị trí dài và ngắn. Khi thị trường tăng, số lượng đơn đặt hàng dài rõ ràng lớn hơn số lượng đơn đặt hàng ngắn; Khi thị trường tăng, số lượng đơn đặt hàng ngắn rõ ràng lớn hơn số lượng đơn đặt hàng dài. Vì vậy, chúng ta có thể dự đoán giá tăng và giảm trong một khoảng thời gian ngắn dựa trên khối lượng đơn đặt hàng đang chờ trong sổ đơn đặt hàng?

Câu trả lời là có.

img

Khi thị trường đang tăng, số lượng lệnh mua dài rõ ràng là lớn hơn số lượng lệnh mua ngắn.

img

Khi thị trường đang giảm, số lượng lệnh mua ngắn rõ ràng là lớn hơn số lượng lệnh mua dài.

Chúng ta có thể thu thập dữ liệu Tick chuyên sâu để tính toán các lệnh chờ dài và ngắn và so sánh chúng, nếu các lệnh chờ dài và ngắn kết hợp rất khác nhau, nó có thể là một cơ hội giao dịch tiềm năng. Ví dụ, khi số lượng lệnh vị trí dài là N lần số lượng lệnh vị trí ngắn, chúng ta có thể nghĩ rằng hầu hết mọi người trên thị trường đều lạc quan, và xác suất giá tăng sẽ tăng trong một thời gian ngắn trong tương lai; Khi số lượng người bán ngắn là N lần số lượng người bán dài, chúng ta có thể nghĩ rằng hầu hết mọi người trên thị trường đang giảm, và xác suất giá giảm sẽ tăng trong tương lai gần.

Viết một chiến lược giao dịch

Theo logic chiến lược trên, nó bắt đầu được thực hiện trong mã.fmz.com> Login > Dashboard > Chiến lược > Thêm chiến lược > Nhấp vào menu thả xuống ở góc trên bên phải để chọn ngôn ngữ Python và bắt đầu viết chiến lược. Chiến lược này phục vụ như một phần giới thiệu về giảng dạy, vì vậy tôi cố gắng đơn giản hóa chiến lược và chú ý đến các bình luận trong mã sau.

Bước 1: Viết khung chiến lược

# Strategy main function
def onTick():
    pass


# Program entry
def main():
    while True:  # Enter the infinite loop mode
        onTick()  # Execute the strategy main function
        Sleep(1000)  # Sleep for 1 second

Chúng ta nên viết chiến lược của mình từ lớn đến nhỏ, giống như xây dựng một ngôi nhà, xây dựng khung trước và sau đó là tường. Trong khuôn khổ này, chúng ta sử dụng hai chức năng: chức năng chính và chức năng onTick.

Bước 2: Viết các biến toàn cầu

vol_ratio_arr = []  # Long/Short positions pending order ratio array
mp = 0  # Virtual positions

Lý do tại sao vol_ratio_arr được định nghĩa là một biến toàn cầu, bởi vì chiến lược của tôi cần thu thập tỷ lệ lệnh chờ vị trí dài và ngắn của một phần dữ liệu Tick. Nếu chúng ta đặt biến vol_ratio_arr vào hàm onTick, rõ ràng không hợp lý để chạy với vòng lặp. Những gì chúng ta cần là thay đổi giá trị của biến trong chế độ vòng lặp khi một điều kiện nhất định được đáp ứng. Cách hợp lý nhất là đặt biến bên ngoài vòng lặp.

Quản lý vị trí là rất cần thiết, bởi vì nó liên quan đến logic giao dịch. Nói chung, chúng tôi tính toán các cặp tiền tệ được nắm giữ bằng cách mua tài khoản trong giao dịch tại chỗ. Để đơn giản hóa mã, một biến vị trí ảo toàn cầu được xác định trực tiếp để kiểm soát logic giao dịch.

Bước 3: Tính toán tỷ lệ trống nhân hiện tại

depth = exchange.GetDepth()  # Get depth data
asks = depth['Asks']  # Get asks array
bids = depth['Bids']  # Get bids array
asks_vol = 0  # All pending orders at ask price
bids_vol = 0  # All pending orders at bid price
for index, ask in enumerate(asks):  # Iterate through the ask price array
    # Linear calculation of all pending orders at the ask price
    asks_vol = asks_vol + ask['Amount'] * (20 - index)
for index, bid in enumerate(bids):  # Iterate through the bid price array
    # Linear calculation of all pending orders at the bid price
    bids_vol = bids_vol + bid['Amount'] * (20 - index)
bidask_ratio = bids_vol / asks_vol  # Calculate long/short position ratio

Như tất cả chúng ta đều biết, tiền kỹ thuật số thường là 20 mức dữ liệu sâu, vì vậy chúng ta có thể cộng số lượng lệnh vị trí dài và ngắn để tính tỷ lệ giữa các vị trí dài và ngắn. Khi giá trị này lớn hơn 1, điều đó có nghĩa là những người tăng giá sẽ lớn hơn những người giảm giá, cho thấy giá sẽ tăng trong một khoảng thời gian ngắn trong tương lai; khi giá trị này thấp hơn 1, điều đó có nghĩa là những người giảm giá sẽ lớn hơn những người tăng giá, cho thấy giá sẽ giảm trong một khoảng thời gian ngắn trong tương lai.

Tuy nhiên, có một điểm cần được phân biệt. Lệnh chờ càng gần thị trường mở cửa, thì mong muốn tăng hoặc berish càng mạnh. Ví dụ, lệnh của cấp độ đầu tiên chắc chắn sẵn sàng tăng hơn mức của cấp độ 20. Do đó, khi chúng ta tích lũy các lệnh chờ, chúng ta cần đưa ra trọng lượng khác nhau cho các lệnh của các cấp độ 20 theo cách tuyến tính, điều này sẽ hợp lý hơn.

Bước 4: Tính toán tuyến tính của tỷ lệ vị trí dài / ngắn trong một khoảng thời gian

global vol_ratio_arr, mp  # Introduce global variables
vol_ratio_arr.insert(0, bidask_ratio)  # Put the long/short position ratio into the global variable array
if len(vol_ratio_arr) > 20:  # If the array exceeds the specified length
    vol_ratio_arr.pop()  # Delete the oldest elements
all_ratio = 0  # Temporary variable, ratio of all long and short position pending orders
all_num = 0  # Temporary variables, all linear multipliers
for index, vol_ratio in enumerate(vol_ratio_arr):  # Variable global variable arrays
    num = 20 - index  # Linear multiplier
    all_num = all_num + num  # Linear multiplier accumulation
    all_ratio = all_ratio + vol_ratio * num  # Accumulation of all long and short position pending orders ratio
ratio = all_ratio / all_num  # Linear long and short position pending order ratio

Tỷ lệ vị trí ngắn dài có thể được lấy bằng cách chia các lệnh chờ tích lũy dài cho các lệnh chờ tích lũy ngắn. Tuy nhiên, đây chỉ là dữ liệu tick. Nếu chỉ sử dụng một dữ liệu tick, nó có thể không phải là một lựa chọn khôn ngoan để quyết định giao dịch mua và bán, bởi vì trong thị trường thay đổi nhanh chóng, một dữ liệu tick không thuyết phục. Vì vậy, chúng ta cần thu thập một phần cố định dữ liệu tick và cuối cùng tính toán giá trị hợp lý thông qua tính toán tuyến tính.

Bước 5: Đặt hàng

last_ask_price = asks[0]['Price']  # Latest buy one price for asks
last_bid_price = bids[0]['Price']  # Latest sell one price for bids
if mp == 0 and ratio > buy_threshold:  # If no currency is held currently, and the ratio is greater than the specified value
    exchange.Buy(last_ask_price, 0.01)  # Buy
    mp = 1  # Set the value of virtual position
if mp == 1 and ratio < sell_threshold:  # If there is currency held currently, and the ratio is less than the specified value
    exchange.Sell(last_bid_price, 0.01)  # Sell
    mp = 0  # Reset the value of virtual position

Vì chúng ta cần chỉ định giá khi đặt lệnh, chúng ta có thể trực tiếp sử dụng giá bán một lần cuối cùng khi mua; Khi bán, bạn có thể trực tiếp sử dụng giá mua một lần cuối cùng. Cuối cùng, đặt lại giá trị của vị trí ảo sau khi đặt lệnh.

Kết luận

Dưới đây là phân tích mã của chiến lược dòng lệnh chờ tuyến tính được phát triển dựa trên chức năng phát lại dữ liệu. Nếu bạn là người mới bắt đầu giao dịch định lượng, chức năng phát lại dữ liệu có thể học giao dịch với chi phí bằng không và rút ngắn thời gian để hiểu giao dịch. Thông thường mất vài năm để một bot thực sự hoặc giao dịch mô phỏng đạt được kết quả ban đầu.


Có liên quan

Thêm nữa