Pikiran tentang Strategi Perdagangan Frekuensi Tinggi (4)

Penulis:Lydia, Dibuat: 2023-08-10 13:44:30, Diperbarui: 2023-09-12 15:51:24

img

Pikiran tentang Strategi Perdagangan Frekuensi Tinggi (4)

Artikel sebelumnya menunjukkan perlunya penyesuaian parameter secara dinamis dan cara mengevaluasi kualitas perkiraan dengan mempelajari interval kedatangan pesanan.

Data kedalaman

Binance menyediakan unduhan data historis untuk best_bid_price (harga pembelian tertinggi), best_bid_quantity (kuantitas dengan harga penawaran terbaik), best_ask_price (harga jual terendah), best_ask_quantity (kuantitas dengan harga jual terbaik), dan transaction_time. Data ini tidak termasuk tingkat buku pesanan kedua atau lebih dalam. Analisis dalam artikel ini didasarkan pada pasar YGG pada tanggal 7 Agustus, yang mengalami volatilitas yang signifikan dengan lebih dari 9 juta poin data.

Pertama, mari kita lihat kondisi pasar pada hari itu. Ada fluktuasi besar, dan volume buku pesanan berubah secara signifikan bersama dengan volatilitas pasar. Penyebaran, khususnya, menunjukkan tingkat fluktuasi pasar, yang merupakan perbedaan antara harga jual dan harga jual terbaik. Dalam statistik pasar YGG pada hari itu, penyebaran lebih besar dari satu tik untuk 20% dari waktu. Di era berbagai bot perdagangan yang bersaing dalam buku pesanan, situasi seperti itu menjadi semakin langka.

Dalam [1]:

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

Dalam [2]:

books = pd.read_csv('YGGUSDT-bookTicker-2023-08-07.csv')

Dalam [3]:

tick_size = 0.0001

Dalam [4]:

books['date'] = pd.to_datetime(books['transaction_time'], unit='ms')
books.index = books['date']

Dalam [5]:

books['spread'] = round(books['best_ask_price'] - books['best_bid_price'],4)

Dalam [6]:

books['best_bid_price'][::10].plot(figsize=(10,5),grid=True);

Keluar[6]:

img

Dalam [7]:

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);

Keluar[7]:

img

Dalam [8]:

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

Keluar[8]:

img

Dalam [9]:

books['spread'].value_counts()[books['spread'].value_counts()>500]/books['spread'].value_counts().sum()

Keluar[9]:

img

Kutipan yang Tidak Seimbang

Perbedaan ini memiliki efek prediktif yang kuat pada tren pasar jangka pendek, mirip dengan alasan yang disebutkan sebelumnya bahwa penurunan dalam volume pesanan beli sering menyebabkan penurunan. Jika satu sisi buku pesanan jauh lebih kecil dari yang lain, dengan asumsi pesanan pembelian dan penjualan aktif serupa dalam volume, ada kemungkinan besar sisi yang lebih kecil dikonsumsi, sehingga mendorong perubahan harga.

img

Di mana Q_b mewakili jumlah pesanan beli yang menunggu (best_bid_qty) dan Q_a mewakili jumlah pesanan jual yang menunggu (best_ask_qty).

Tentukan harga pertengahan:

img

Grafik di bawah ini menunjukkan hubungan antara tingkat perubahan harga pertengahan selama interval 1 berikutnya dan ketidakseimbangan I. Seperti yang diharapkan, semakin besar kemungkinan harga akan meningkat seiring dengan peningkatan I dan semakin dekat dengan 1, semakin cepat perubahan harga. Dalam perdagangan frekuensi tinggi, pengenalan harga perantara adalah untuk memprediksi perubahan harga di masa depan dengan lebih baik, yaitu, dan perbedaan harga di masa depan lebih kecil, semakin baik harga perantara didefinisikan.

img

Dalam [10]:

books['I'] = books['best_bid_qty'] / (books['best_bid_qty'] + books['best_ask_qty'])

Dalam [11]:

books['mid_price'] = (books['best_ask_price'] + books['best_bid_price'])/2

Dalam [12]:

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)

Keluar[12]:

img

Di [13]:

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)

Keluar[13]:

img

Mengatur Harga Pertengahan Tertimbang:

Dari grafik, dapat diamati bahwa harga rata-rata tertimbang menunjukkan variasi yang lebih kecil dibandingkan dengan nilai I yang berbeda, yang menunjukkan bahwa itu lebih cocok. Namun, masih ada beberapa penyimpangan, terutama sekitar 0,2 dan 0,8. Ini menunjukkan bahwa saya masih memberikan informasi tambahan. Asumsi hubungan yang benar-benar linier antara istilah koreksi harga dan I, seperti yang tersirat oleh harga rata-rata tertimbang, tidak selaras dengan kenyataan. Dapat dilihat dari grafik bahwa kecepatan penyimpangan meningkat ketika saya mendekati 0 dan 1, yang menunjukkan hubungan non-linier.

Untuk memberikan representasi yang lebih intuitif, berikut adalah definisi ulang dari I:

Definisi I yang direvisi:

img

Pada titik ini:

img

Pada saat pengamatan, dapat diamati bahwa harga tengah tertimbang adalah koreksi terhadap harga tengah rata-rata, di mana istilah koreksi dikalikan dengan spread. Istilah koreksi adalah fungsi I, dan harga tengah tertimbang mengasumsikan hubungan sederhana I/2. Dalam hal ini, keuntungan dari distribusi I yang disesuaikan (-1, 1) menjadi jelas, karena I simetris di sekitar asal, sehingga nyaman untuk menemukan hubungan yang sesuai untuk fungsi. Dengan memeriksa grafik, tampaknya fungsi ini harus memuaskan pangkat I, karena selaras dengan pertumbuhan cepat di kedua sisi ganjil dan simetri asal. Selain itu dapat diamati bahwa nilai di sekitar asal mendekati linier. Selanjutnya, ketika I adalah 0, hasilnya adalah 0, dan ketika I adalah 1, hasilnya adalah 0.5.

img

Di sini N adalah bilangan genap positif, setelah pengujian yang sebenarnya, lebih baik ketika N adalah 8.

img

Pada titik ini, prediksi perubahan harga pertengahan tidak lagi terkait secara signifikan dengan I. Meskipun hasil ini sedikit lebih baik daripada harga pertengahan tertimbang sederhana, ini masih tidak berlaku dalam skenario perdagangan nyata. Ini hanya pendekatan yang diusulkan.Harga Mikrodiperkenalkan menggunakan pendekatan rantai Markov, dan kode terkait disediakan.

Dalam [14]:

books['I'] = (books['best_bid_qty'] - books['best_ask_qty']) / (books['best_bid_qty'] + books['best_ask_qty'])

Di [15]:

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)

Keluar[15]:

img

Di [16]:

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'].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)

Keluar[16]:

img

Ringkasan

Harga pertengahan sangat penting untuk strategi frekuensi tinggi karena berfungsi sebagai prediksi harga masa depan jangka pendek. Oleh karena itu, penting bagi harga pertengahan untuk menjadi seakurat mungkin. Pendekatan harga pertengahan yang dibahas sebelumnya didasarkan pada data buku pesanan, karena hanya tingkat atas buku pesanan yang digunakan dalam analisis. Dalam perdagangan langsung, strategi harus bertujuan untuk memanfaatkan semua data yang tersedia, termasuk data perdagangan, untuk memvalidasi prediksi harga pertengahan terhadap harga transaksi yang sebenarnya. Saya ingat Stoikov menyebutkan di Twitter bahwa harga pertengahan nyata harus menjadi rata-rata tertimbang dari probabilitas penawaran dan meminta harga yang dieksekusi. Masalah ini telah dieksplorasi dalam artikel sebelumnya. Karena batasan panjang, rincian lebih lanjut tentang topik ini akan dibahas dalam artikel berikutnya.


Lebih banyak