Tư duy về chiến lược giao dịch tần số cao (1)

Tác giả:Cỏ nhỏ, Tạo: 2023-08-03 16:14:16, Cập nhật: 2023-12-08 16:37:21

img

Bài viết thảo luận về các chiến lược giao dịch tần suất cao của tiền kỹ thuật số, bao gồm nguồn lợi nhuận (chủ yếu là từ biến động mạnh mẽ của thị trường và phí giao dịch), các vấn đề về vị trí và kiểm soát vị trí, và phương pháp mô hình hóa giao dịch với phân phối Pareto. Ngoài ra, nó cũng trích dẫn dữ liệu giao dịch từng lần và giao dịch tần suất cao nhất được cung cấp bởi Binance để kiểm tra lại, và dự định sẽ thảo luận sâu về các vấn đề khác về chiến lược giao dịch tần suất cao trong các bài viết tiếp theo.

Trước đây tôi đã viết hai bài viết về giao dịch tần số cao của tiền kỹ thuật số.Đánh giá chi tiết về chiến lược tần số cao của tiền kỹ thuật số, Tăng gấp 80 lần, chiến lược tần số cao mạnh mẽ hơn.Nhưng chỉ có thể là chia sẻ kinh nghiệm, nói chung. Lần này tôi dự định viết một loạt bài, giới thiệu ý tưởng về giao dịch tần số cao từ đầu, hy vọng sẽ ngắn gọn nhất có thể, nhưng do mức độ giới hạn của bản thân, sự hiểu biết về giao dịch tần số cao không sâu sắc, bài viết này chỉ là ném quả cầu dẫn, hy vọng Đức Chúa Trời đúng.

Nguồn thu nhập cao tần số

Bài viết trước đã đề cập rằng chiến lược tần số cao đặc biệt phù hợp với các thị trường có sự biến động rất mạnh trên thị trường. Xem xét một loại giao dịch thay đổi giá trong thời gian ngắn, bao gồm cả xu hướng tổng thể và biến động. Tất nhiên, có thể kiếm tiền nếu chúng ta có thể dự đoán chính xác sự thay đổi xu hướng, nhưng đây cũng là điều khó nhất. Bài viết này chủ yếu đề cập đến chiến lược tần số cao của nhà tạo ra, sẽ không liên quan đến vấn đề này. Trong tình huống biến động, đặt hàng theo chiến lược, nếu giao dịch thường xuyên đủ, khoảng cách lợi nhuận đủ lớn, có thể trang trải tổn thất có thể gây ra bởi xu hướng, do đó các giao dịch không dự đoán cũng có thể có lợi nhuận.

Những vấn đề cần giải quyết

1.策略同时挂买单和卖单,第一个问题就是在哪里挂单。挂的离盘口越近,成交的概率越高,但在剧烈波动的行情中,瞬间成交的价格可能离盘口较远,挂的那太近没有能吃到足够的利润。挂的太远的单子成交概率又低。这是一个需要优化的问题。

2.控制仓位。为了控制风险,策略就不能长时间累计过多的仓位。可以通过控制挂单距离、挂单量、总仓位限制等办法解决。

Để đạt được mục đích trên, cần phải mô hình hóa ước tính về nhiều khía cạnh như xác suất giao dịch, lợi nhuận giao dịch, ước tính thị trường, rất nhiều bài viết và bài báo về vấn đề này có thể được tìm thấy trong các từ khóa như High-Frequency Trading, Orderbook và nhiều hơn nữa. Có rất nhiều khuyến nghị trên mạng, không thể mở ra ở đây.

Dữ liệu cần thiết

Binance cung cấp dữ liệu giao dịch từng mẩu và các đơn hàng được đặt hàng tốt nhất.Tải xuốngDữ liệu sâu cần phải được tải xuống bằng API trong danh sách trắng, hoặc có thể tự thu thập. Dữ liệu giao dịch được sử dụng để phân tích cho mục đích kiểm tra lại.

from datetime import date,datetime
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

Các giao dịch theo từng chi phí là:

  1. agg_trade_id: ID của giao dịch,
  2. Giá: Giá giao dịch
  3. quantity: số lượng giao dịch
  4. first_trade_id: tổng hợp các giao dịch có thể có nhiều giao dịch đồng thời, chỉ thống kê một dữ liệu, đó là id giao dịch đầu tiên
  5. last_trade_id: ID giao dịch cuối cùng
  6. transact_time: thời gian giao dịch
  7. is_buyer_maker: hướng giao dịch, True đại diện cho buyermaker giao dịch, buyer là taker

Bạn có thể thấy 660.000 giao dịch dữ liệu trong ngày, giao dịch đang hoạt động. csv sẽ được gắn vào phần bình luận.

trades = pd.read_csv('COMPUSDT-aggTrades-2023-07-02.csv')
trades

664475 hàng × 7 cột

agg_trade_id giá cả số lượng first_trade_id Last_trade_id Transact_time là_buyer_maker
120719552 52.42 22.087 207862988 207862990 1688256004603 Không đúng
120719553 52.41 29.314 207862991 207863002 1688256004623 Đúng vậy.
120719554 52.42 0.945 207863003 207863003 1688256004678 Không đúng
120719555 52.41 13.534 207863004 207863006 1688256004680 Đúng vậy.
121384024 68.29 10.065 210364899 210364905 1688342399863 Không đúng
121384025 68.30 7.078 210364906 210364908 1688342399948 Không đúng
121384026 68.29 7.622 210364909 210364911 1688342399979 Đúng vậy.

Mô hình giao dịch đơn lẻ

Trước tiên, dữ liệu được xử lý, chia các giao dịch nguyên thủy thành nhóm giao dịch chủ động để thanh toán và nhóm giao dịch chủ động để bán. Ngoài ra, dữ liệu giao dịch tổng hợp nguyên thủy là một dữ liệu cùng một thời gian và cùng một hướng với cùng một mức giá, có thể xảy ra một số lượng giao dịch chủ động là 100, nếu chia thành nhiều giao dịch và giá không giống nhau, ví dụ như chia cho 60 và 40 xu, sẽ tạo ra hai dữ liệu, ảnh hưởng đến ước tính giao dịch giao dịch.

trades['date'] = pd.to_datetime(trades['transact_time'], unit='ms')
trades.index = trades['date']
buy_trades = trades[trades['is_buyer_maker']==False].copy()
sell_trades = trades[trades['is_buyer_maker']==True].copy()
buy_trades = buy_trades.groupby('transact_time').agg({
    'agg_trade_id': 'last',
    'price': 'last',
    'quantity': 'sum',
    'first_trade_id': 'first',
    'last_trade_id': 'last',
    'is_buyer_maker': 'last',
    'date': 'last',
    'transact_time':'last'
})
sell_trades = sell_trades.groupby('transact_time').agg({
    'agg_trade_id': 'last',
    'price': 'last',
    'quantity': 'sum',
    'first_trade_id': 'first',
    'last_trade_id': 'last',
    'is_buyer_maker': 'last',
    'date': 'last',
    'transact_time':'last'
})
buy_trades['interval']=buy_trades['transact_time'] - buy_trades['transact_time'].shift()
sell_trades['interval']=sell_trades['transact_time'] - sell_trades['transact_time'].shift()
print(trades.shape[0] - (buy_trades.shape[0]+sell_trades.shape[0]))
146181

Ví dụ như thanh toán, hãy vẽ một đường thẳng trước, bạn có thể thấy hiệu ứng đuôi dài rất rõ ràng, hầu hết các dữ liệu tập trung ở phía bên trái nhất, nhưng cũng có một số lượng nhỏ giao dịch lớn được phân bố ở phía sau.

buy_trades['quantity'].plot.hist(bins=200,figsize=(10, 5));

png

为了观察方便,截掉尾部观察.可以看到成交量越大,出现频率越低,且减少的趋势更快。

buy_trades['quantity'][buy_trades['quantity']<200].plot.hist(bins=200,figsize=(10, 5));

png

Phân phối thỏa mãn giao dịch có nhiều nghiên cứu liên quan. Phân phối thỏa mãn quy luật Power-law, còn được gọi là phân phối Pareto, là một dạng phân phối xác suất phổ biến trong vật lý thống kê và khoa học xã hội. Trong phân phối thỏa mãn quy luật, tỷ lệ xảy ra sự kiện tương đương với một chỉ số âm tính của sự kiện đó. Đặc điểm chính của dạng phân phối này là sự kiện lớn xảy ra thường xuyên hơn so với dự kiến trong nhiều phân bố khác. Đây chính là đặc điểm của phân phối giao dịch. Phân phối Pareto có hình thức: Px = Cx^-α.

Hình dưới đây cho thấy xác suất giao dịch lớn hơn một giá trị, đường màu xanh là xác suất thực tế, đường viền là xác suất giả định, ở đây, trước tiên, đừng rối loạn các tham số cụ thể, bạn có thể thấy rằng hình ảnh thực sự thỏa mãn phân bố Pareto. Vì xác suất đặt hàng lớn hơn 0 là 1, và để đáp ứng tiêu chuẩn hóa, phương trình phân bố của nó nên có hình thức như sau:

png

Trong đó N là một tham số tiêu chuẩn. Ở đây chọn trung bình giao dịch M, alpha chọn 2.06. Đánh giá của alpha cụ thể có thể được tính toán bằng cách tính toán lại giá trị P khi D = N. Cụ thể: alpha = log ((P ((d>M)) / log ((2)).

depths = range(0, 250, 2)
probabilities = np.array([np.mean(buy_trades['quantity'] > depth) for depth in depths])
alpha = np.log(np.mean(buy_trades['quantity'] > mean_quantity))/np.log(2)
mean_quantity = buy_trades['quantity'].mean()
probabilities_s = np.array([(1+depth/mean_quantity)**alpha for depth in depths])

plt.figure(figsize=(10, 5))
plt.plot(depths, probabilities)
plt.plot(depths, probabilities_s)
plt.xlabel('Depth')
plt.ylabel('Probability of execution')
plt.title('Execution probability at different depths')
plt.grid(True)

img

plt.figure(figsize=(10, 5))
plt.grid(True)
plt.title('Diff')
plt.plot(depths, probabilities_s-probabilities);

png

Nhưng ước tính này chỉ trông giống như, trên biểu đồ, chúng ta vẽ sự khác biệt giữa giá trị giả thuyết và giá trị thực tế. Khi giao dịch nhỏ hơn, sai lệch rất lớn, thậm chí gần 10%. Bạn có thể chọn các điểm khác nhau để làm cho xác suất của điểm này chính xác hơn bằng cách ước tính các tham số, nhưng cũng không giải quyết vấn đề sai lệch. Đây là sự khác biệt giữa phân bố quạt và phân bố thực tế, cần sửa đổi phương trình phân bố quạt để có kết quả chính xác hơn.

png

Để tóm tắt, ở đây, r = q / M đại diện cho khối lượng giao dịch tiêu chuẩn hóa. Các tham số có thể được ước tính theo cách tương tự như trên. Hình dưới đây cho thấy độ lệch tối đa sau khi sửa đổi không quá 2%, về mặt lý thuyết có thể tiếp tục sửa đổi, nhưng độ chính xác này cũng đủ.

depths = range(0, 250, 2)
probabilities = np.array([np.mean(buy_trades['quantity'] > depth) for depth in depths])
mean = buy_trades['quantity'].mean()
alpha = np.log(np.mean(buy_trades['quantity'] > mean))/np.log(2.05)
probabilities_s = np.array([(((1+20**(-depth/mean))*depth+mean)/mean)**alpha for depth in depths])

plt.figure(figsize=(10, 5))
plt.plot(depths, probabilities)
plt.plot(depths, probabilities_s)
plt.xlabel('Depth')
plt.ylabel('Probability of execution')
plt.title('Execution probability at different depths')
plt.grid(True)
plt.figure(figsize=(10, 5))
plt.grid(True)
plt.title('Diff')
plt.plot(depths, probabilities_s-probabilities);

png

Với phương trình ước tính phân phối giao dịch, hãy chú ý đến xác suất của phương trình không phải là xác suất thực, mà là xác suất điều kiện. Bây giờ bạn có thể trả lời câu hỏi, nếu một lệnh tiếp theo xảy ra, xác suất của nó lớn hơn một giá trị nào đó là bao nhiêu? Bạn cũng có thể nói, xác suất giao dịch của các lệnh ở độ sâu khác nhau là bao nhiêu (lý tưởng, ít nghiêm ngặt hơn, theo lý thuyết sổ đặt hàng có thêm các đơn đặt hàng mới và rút tiền, và hàng rào ở độ sâu tương tự).

Có rất nhiều câu hỏi cần được trả lời, và các bài viết sau đây sẽ cố gắng trả lời.


Thêm nữa

Phân tích 🐂🍺

fmzeroBọn chúng ta sẽ bị giết.

Cỏ nhỏCSV quá lớn để bạn tự tải xuống.