Berpikir tentang strategi perdagangan frekuensi tinggi (4)

Penulis:Rumput, Dibuat: 2023-08-08 22:31:47, Diperbarui: 2023-09-18 19:51:25

img

Artikel sebelumnya menunjukkan mengapa parameter harus disesuaikan secara dinamis dan bagaimana menilai estimasi baik atau buruk dengan mempelajari interval kedatangan pesanan. Artikel ini akan berfokus pada data mendalam, studi harga pertengahan (atau yang disebut harga wajar, harga mikro, dll.).

Data dalam

Binance menyediakan unduhan data sejarah penawaran terbaik, yang berisi best_bid_price: harga jual terbaik, yaitu 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 daftar kedua dan lebih dalam.

Pertama, lihat pasar hari itu, naik turun, dan jumlah transaksi hari itu juga mengalami perubahan yang lebih besar dengan fluktuasi pasar, terutama spread (berbeda antara harga jual dan harga beli) yang sangat signifikan menunjukkan fluktuasi pasar. Dalam statistik pasar hari YGG, ada 20% spread waktu yang lebih besar dari 1 tik, yang sangat jarang terjadi di era berbagai robot yang bersaing di pasar.

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

Penawaran yang tidak seimbang

Dari atas, Anda dapat melihat bahwa jumlah pesanan yang dipesan dan pesanan yang dipesan sebagian besar waktu sangat berbeda, dan perbedaan ini memiliki efek prediktif yang kuat terhadap pasar jangka pendek. Alasan yang sama seperti yang disebutkan dalam artikel sebelumnya adalah bahwa jumlah pesanan yang lebih kecil cenderung turun. Jika satu sisi pesanan yang dipesan jauh lebih kecil dari sisi lain, asumsikan bahwa jumlah pesanan jual dan beli yang berikutnya mendekati, sisi pesanan yang lebih kecil akan lebih mungkin dimakan, sehingga mendorong perubahan harga.imgDi mana Q_b mewakili jumlah pesanan yang dipesan (best_bid_qty) dan Q_a mewakili jumlah pesanan yang dijual (best_ask_qty).

Definisi harga pertengahan:img

Gambar di bawah ini menunjukkan hubungan antara tingkat perubahan harga tengah dan ketidakseimbangan I pada interval berikutnya, dan konsistensi yang diharapkan, dengan peningkatan I, harga semakin mungkin naik, dan semakin dekat dengan 1, ukuran perubahan harga juga meningkat. Dalam perdagangan frekuensi tinggi, tujuan memperkenalkan harga tengah adalah untuk memprediksi perubahan harga masa depan dengan lebih baik, yaitu, semakin kecil perbedaan harga masa depan, harga tengah akan lebih baik didefinisikan. Ketidakseimbangan yang jelas diikat memberikan informasi tambahan untuk prediksi strategi, dengan mempertimbangkan hal ini, definisi harga tengah 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

Pengaturan harga tengah

Dari grafiknya terlihat bahwa perubahan harga tengah tertimbang relatif terhadap I yang berbeda jauh lebih kecil, yang menunjukkan bahwa harga tengah tertimbang lebih cocok. Namun masih ada beberapa aturan, seperti di sekitar 0,2 dan 0,8, penyimpangan yang lebih besar. Ini menunjukkan bahwa I masih dapat memberikan informasi tambahan. Karena harga tengah tertimbang mengasumsikan bahwa perubahan harga sepenuhnya linier dengan I, ini jelas tidak sesuai dengan kenyataan, seperti yang dapat dilihat dari grafik di atas, deviasi lebih cepat ketika I mendekati 0 dan 1, bukan hubungan linier.

Untuk lebih intuitif, di sini saya mendefinisikan ulang I:

img

Saat ini:

img

Mengamati bentuk ini, kita dapat menemukan bahwa harga tengah tertimbang adalah perbaikan terhadap harga tengah rata-rata, koefisien dari perbaikan adalah Spread, sedangkan perbaikan adalah tentang fungsi I, dan weighted mid-price hanya mengasumsikan hubungan ini adalah I/2 ‒. Pada saat ini manfaat dari distribusi I yang disesuaikan (−1,1) terwujud, I tentang simetri titik awal, yang memberikan kemudahan bagi kita untuk menemukan hubungan kesesuaian fungsi. Mengamati grafik, fungsi ini harus memenuhi hubungan pangkat ganjil I, sehingga sesuai dengan pertumbuhan cepat di kedua sisi, dan tentang simetri titik awal, kita juga dapat melihat bahwa nilai dekat titik awal adalah linear, ditambah dengan mendekati I0, hasil fungsi adalah 0, ketika I adalah 1, maka hasil fungsi ini adalah 0.5‒. Jadi, kita dapat menebak:

img

Di sini N adalah bilangan genap positif, dan setelah pengujian praktis, N adalah 8 lebih baik. Sampai saat ini, artikel ini mengemukakan nilai tengah terberat yang telah diubah:

img

Pada saat ini, perubahan harga tengah yang diprediksi pada dasarnya tidak terkait dengan I. Hasil ini, meskipun lebih baik daripada harga tengah yang dipertimbangkan secara sederhana, tidak berlaku di dunia nyata, dan hanya memberi gambaran. Sebuah artikel tahun 2017 oleh S. Stoikov menggunakan metode rantai Markov.Harga MikroDi sini, saya akan memberikan beberapa tips untuk membantu Anda dalam membuat aplikasi ini.

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

Pengamatan

Harga tengah sangat penting untuk strategi frekuensi tinggi, adalah prediksi harga jangka pendek di masa depan, jadi harga tengah harus seakurat mungkin. Harga tengah yang diuraikan di atas didasarkan pada data transaksi, karena hanya satu file pasar yang digunakan saat analisis. Di pasar nyata, strategi harus menggunakan semua data sebanyak mungkin, terutama perdagangan yang ada di pasar nyata, dan prediksi harga tengah harus diperiksa oleh harga transaksi yang sebenarnya.


Lebih banyak

LouisSaya tidak mengerti apa yang Anda katakan.

FmzeroAku tidak tahu apa yang terjadi.