Memikirkan strategi perdagangan frekuensi tinggi (4)

Penulis:Rumput, Dicipta: 2023-08-08 22:31:47, Dikemas kini: 2023-09-18 19:51:25

img

Artikel sebelum ini menunjukkan mengapa parameter perlu disesuaikan secara dinamik dan bagaimana menilai perkiraan baik atau buruk dengan meneliti selang kedatangan pesanan. Artikel ini akan memberi tumpuan kepada data mendalam, meneliti harga pertengahan (atau dikenali sebagai harga yang adil, harga mikro, dan lain-lain).

Data mendalam

Binance menyediakan muat turun data sejarah tawaran terbaik, yang mengandungi best_bid_price: harga jual terbaik, iaitu harga jual terbesar, best_bid_qty: jumlah harga jual terbaik, best_ask_price: jumlah harga jual terbaik, best_ask_qty: jumlah harga jual terbaik, transaction_time: time frame. Data ini tidak termasuk senarai kedua dan lebih mendalam.

Pertama, lihat pasaran pada hari itu, naik turun besar, dan jumlah pesanan pada hari itu juga berubah dengan turun naiknya pasaran, terutamanya spread (berbeza antara harga jual dan harga beli) sangat menonjol menunjukkan pergerakan pasaran. Dalam statistik pasaran YGG pada hari itu, terdapat 20% spread masa yang lebih besar daripada 1 tik, dalam era pelbagai robot yang bersaing dengan pasaran, keadaan ini sudah jarang berlaku.

from datetime import date,datetime
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
books = pd.read_csv('YGGUSDT-bookTicker-2023-08-07.csv')
tick_size = 0.0001
books['date'] = pd.to_datetime(books['transaction_time'], unit='ms')
books.index = books['date']
books['spread'] = round(books['best_ask_price'] - books['best_bid_price'],4)
books['best_bid_price'][::10].plot(figsize=(10,5),grid=True);

img

books['best_bid_qty'][::10].rolling(10000).mean().plot(figsize=(10,5),grid=True);
books['best_ask_qty'][::10].rolling(10000).mean().plot(figsize=(10,5),grid=True);

img

(books['spread'][::10]/tick_size).rolling(10000).mean().plot(figsize=(10,5),grid=True);

img

books['spread'].value_counts()[books['spread'].value_counts()>500]/books['spread'].value_counts().sum()
0.0001    0.799169
0.0002    0.102750
0.0003    0.042472
0.0004    0.022821
0.0005    0.012792
0.0006    0.007350
0.0007    0.004376
0.0008    0.002712
0.0009    0.001657
0.0010    0.001089
0.0011    0.000740
0.0012    0.000496
0.0013    0.000380
0.0014    0.000258
0.0015    0.000197
0.0016    0.000140
0.0017    0.000112
0.0018    0.000088
0.0019    0.000063
Name: spread, dtype: float64

Tawaran yang tidak seimbang

Dari atas, anda dapat melihat bahawa jumlah pesanan yang dipesan untuk membeli dan menjual sangat berbeza untuk sebahagian besar masa, dan perbezaan ini mempunyai peranan yang sangat kuat untuk meramalkan pasaran jangka pendek. Sebab yang sama seperti yang disebutkan dalam artikel sebelumnya adalah bahawa jumlah pesanan yang kecil cenderung turun. Jika satu sisi pesanan yang dipesan jauh lebih kecil daripada yang lain, andaian bahawa jumlah pesanan jual dan beli yang seterusnya secara aktif mendekati, sisi pesanan yang kecil akan lebih cenderung dimakan, yang mendorong perubahan harga.imgDi mana Q_b mewakili jumlah pesanan yang ditawarkan (best_bid_qty) dan Q_a mewakili jumlah pesanan yang dijual (best_ask_qty).

Definisi harga pertengahan:img

Rajah berikut menunjukkan hubungan antara kadar perubahan harga pertengahan dan ketidakseimbangan I pada 1 selang, dan selaras dengan jangkaan, dengan peningkatan I, harga semakin mungkin meningkat, dan semakin dekat dengan 1, perubahan harga juga semakin pesat. Dalam perdagangan frekuensi tinggi, harga pertengahan diperkenalkan untuk meramalkan perubahan harga masa depan dengan lebih baik, iaitu, dengan perbezaan harga masa depan yang lebih kecil, harga pertengahan lebih baik ditakrifkan. Ketidakseimbangan yang jelas yang tersusun memberikan maklumat tambahan untuk ramalan strategi, dengan itu, menentukan harga pertengahan tertimbang:img

books['I'] = books['best_bid_qty'] / (books['best_bid_qty'] + books['best_ask_qty'])
books['mid_price'] = (books['best_ask_price'] + books['best_bid_price'])/2
bins = np.linspace(0, 1, 51)
books['I_bins'] = pd.cut(books['I'], bins, labels=bins[1:])
books['price_change'] = (books['mid_price'].pct_change()/tick_size).shift(-1)
avg_change = books.groupby('I_bins')['price_change'].mean()
plt.figure(figsize=(8,5))
plt.plot(avg_change)
plt.xlabel('I Value Range')
plt.ylabel('Average Mid Price Change Rate');
plt.grid(True)

img

books['weighted_mid_price'] = books['mid_price'] + books['spread']*books['I']/2
bins = np.linspace(-1, 1, 51)
books['I_bins'] = pd.cut(books['I'], bins, labels=bins[1:])
books['weighted_price_change'] = (books['weighted_mid_price'].pct_change()/tick_size).shift(-1)
avg_change = books.groupby('I_bins')['weighted_price_change'].mean()
plt.figure(figsize=(8,5))
plt.plot(avg_change)
plt.xlabel('I Value Range')
plt.ylabel('Weighted Average Mid Price Change Rate');
plt.grid(True)

img

Penyesuaian harga pertengahan

Dari grafik, perubahan harga pertengahan tertimbang berbanding dengan I yang berbeza jauh lebih kecil, yang menunjukkan bahawa harga pertengahan yang ditimbang adalah kesesuaian yang lebih baik. Tetapi masih ada beberapa peraturan, seperti hampir 0.2 dan 0.8, penyimpangan yang lebih besar. Ini menunjukkan bahawa I masih dapat menyumbang maklumat tambahan. Oleh kerana harga pertengahan tertimbang mengandaikan bahawa pembetulan harga adalah sepenuhnya linear dengan I, ini jelas tidak sesuai dengan realiti, seperti yang dapat dilihat dari grafik di atas, apabila I mendekati 0 dan 1, kelajuan penyimpangan lebih cepat, bukan hubungan linear.

Untuk lebih intuitif, saya akan tentukan semula I:

img

Pada masa ini:

img

Dengan melihat bentuk ini, kita dapat melihat bahawa harga tengah yang ditimbang adalah pengubahsuaian kepada harga tengah purata, faktor pengubahsuaian adalah Spread, dan faktor pengubahsuaian adalah mengenai fungsi I, dan harga tengah tertimbang hanya mengandaikan hubungan ini adalah I / 2. Pada masa ini, faedah pembahagian I yang telah disesuaikan (−1,1) terwujud, I mengenai simetri titik asal, yang memberi kita kemudahan untuk mencari hubungan kesesuaian fungsi. Lihat grafik, fungsi ini harus memenuhi hubungan pangkat ganjil I, sehingga sesuai dengan pertumbuhan yang cepat di kedua belah pihak, dan mengenai simetri titik asal, kita juga dapat melihat bahawa nilai yang berdekatan dengan titik asal adalah linear, ditambah dengan menghampiri I 0, hasil fungsi adalah 0, apabila I adalah 1, hasil fungsi ini adalah 0.5. Oleh itu, kita dapat meneka:

img

N di sini adalah nombor genap positif, dan selepas ujian praktikal, N adalah lebih baik pada 8. Sehingga kini, artikel ini mengemukakan harga tengah ditambah berat yang telah diubah:

img

Pada masa ini, perubahan harga tengah yang diramalkan pada dasarnya tidak berkaitan dengan I. Walaupun hasil ini agak lebih baik daripada harga tengah bertimbang sederhana, tetapi tidak boleh digunakan secara langsung, ini hanya memberi idea. Satu artikel 2017 oleh S. Stoikov menggunakan kaedah rantai Markov.Harga MikroDi sini, anda boleh melihat beberapa gambar yang menarik, dan anda boleh melihat beberapa gambar yang menarik, dan anda boleh melihat beberapa gambar yang menarik.

books['I'] = (books['best_bid_qty'] - books['best_ask_qty']) / (books['best_bid_qty'] + books['best_ask_qty'])
books['weighted_mid_price'] = books['mid_price'] + books['spread']*books['I']/2
bins = np.linspace(-1, 1, 51)
books['I_bins'] = pd.cut(books['I'], bins, labels=bins[1:])
books['weighted_price_change'] = (books['weighted_mid_price'].pct_change()/tick_size).shift(-1)
avg_change = books.groupby('I_bins')['weighted_price_change'].sum()
plt.figure(figsize=(8,5))
plt.plot(avg_change)
plt.xlabel('I Value Range')
plt.ylabel('Weighted Average Mid Price Change Rate');
plt.grid(True)

img

books['adjust_mid_price'] = books['mid_price'] + books['spread']*(books['I'])*(books['I']**8+1)/4
bins = np.linspace(-1, 1, 51)
books['I_bins'] = pd.cut(books['I'], bins, labels=bins[1:])
books['adjust_mid_price'] = (books['adjust_mid_price'].pct_change()/tick_size).shift(-1)
avg_change = books.groupby('I_bins')['adjust_mid_price'].sum()
plt.figure(figsize=(8,5))
plt.plot(avg_change)
plt.xlabel('I Value Range')
plt.ylabel('Weighted Average Mid Price Change Rate');
plt.grid(True)

img

books['adjust_mid_price'] = books['mid_price'] + books['spread']*(books['I']**3)/2
bins = np.linspace(-1, 1, 51)
books['I_bins'] = pd.cut(books['I'], bins, labels=bins[1:])
books['adjust_mid_price'] = (books['adjust_mid_price'].pct_change()/tick_size).shift(-1)
avg_change = books.groupby('I_bins')['adjust_mid_price'].sum()
plt.figure(figsize=(8,5))
plt.plot(avg_change)
plt.xlabel('I Value Range')
plt.ylabel('Weighted Average Mid Price Change Rate');
plt.grid(True)

img

Ringkasan

Harga pertengahan adalah sangat penting untuk strategi frekuensi tinggi, adalah ramalan harga jangka pendek masa depan, jadi harga pertengahan harus tepat sebanyak mungkin. Harga pertengahan yang diperkenalkan di atas adalah berdasarkan data pertalian, kerana hanya satu kumpulan pasaran yang digunakan semasa analisis. Dalam pasaran sebenar, strategi adalah menggunakan semua data sebanyak mungkin, terutamanya perdagangan dalam pasaran sebenar, ramalan harga pertengahan harus diperiksa oleh harga urus niaga sebenar.


Lebih lanjut

LouisSaya tidak faham apa-apa.

FmzeroBerani!