Artikel ini membahas strategi perdagangan frekuensi tinggi dalam mata uang digital, termasuk sumber keuntungan (terutama dari volatilitas pasar yang tinggi dan biaya transaksi bursa), masalah posisi dan kendali posisi, dan metode pemodelan transaksi dengan distribusi Pareto. Selain itu, data transaksi per-potongan dan pesanan teratas yang disediakan oleh Binance juga digunakan untuk uji ulang, dan rencana untuk membahas secara mendalam masalah lain tentang strategi perdagangan frekuensi tinggi dalam artikel berikutnya.
Saya pernah menulis dua artikel sebelumnya tentang perdagangan frekuensi tinggi dalam mata uang digital.Strategi frekuensi tinggi untuk mata uang digital, 5 watt 80 kali lebih kuat dari strategi frekuensi tinggi.Tapi hanya untuk berbagi pengalaman, berbicara secara umum. Kali ini saya berencana menulis serangkaian artikel, memperkenalkan ide perdagangan frekuensi tinggi dari awal, saya berharap untuk menjadi sesingkat mungkin, tetapi karena tingkat saya yang terbatas, pemahaman tentang perdagangan frekuensi tinggi tidak begitu mendalam, artikel ini hanya membuang guideline, saya harap Tuhan benar.
Artikel sebelumnya telah menyebutkan bahwa strategi frekuensi tinggi sangat cocok untuk pasar dengan turun naik yang sangat tajam. Mengkaji variasi harga dalam waktu singkat, yang terdiri dari tren keseluruhan dan goncangan. Tentu saja dapat menghasilkan uang jika kita dapat memprediksi perubahan tren secara akurat, tetapi ini juga yang paling sulit. Artikel ini terutama membahas strategi pembuat frekuensi tinggi, dan tidak akan membahas masalah ini.
1.策略同时挂买单和卖单,第一个问题就是在哪里挂单。挂的离盘口越近,成交的概率越高,但在剧烈波动的行情中,瞬间成交的价格可能离盘口较远,挂的那太近没有能吃到足够的利润。挂的太远的单子成交概率又低。这是一个需要优化的问题。
2.控制仓位。为了控制风险,策略就不能长时间累计过多的仓位。可以通过控制挂单距离、挂单量、总仓位限制等办法解决。
Untuk mencapai tujuan di atas, perlu untuk memperkirakan model dari berbagai aspek, seperti kemungkinan kemungkinan transaksi, keuntungan transaksi, perkiraan pasar, banyak artikel dan makalah tentang hal ini dapat ditemukan dalam kata kunci seperti High-Frequency Trading, Orderbook, dll. Ada banyak rekomendasi di internet, tidak di sini. Selain itu, lebih baik membangun sistem uji balik yang cepat dan dapat diandalkan.
Binance menyediakan data transaksi per butir dan order teratas.UnduhData mendalam dapat diunduh melalui API dalam daftar putih, dan dapat dikumpulkan sendiri. Data transaksi yang digunakan untuk analisis kembali dapat digunakan untuk analisis. Contoh data HOOKUSDT-aggTrades-2023-01-27 digunakan dalam artikel ini.
from datetime import date,datetime
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
Transaksi yang dilakukan secara individual adalah sebagai berikut:
Anda dapat melihat 660.000 data transaksi pada hari itu, transaksi sangat aktif.
trades = pd.read_csv('COMPUSDT-aggTrades-2023-07-02.csv')
trades
664475 baris × 7 kolom
agg_trade_id | harga | jumlah | first_trade_id | last_trade_id | waktu transaksi | adalah_pembeli_pembuat |
---|---|---|---|---|---|---|
120719552 | 52.42 | 22.087 | 207862988 | 207862990 | 1688256004603 | Tidak benar |
120719553 | 52.41 | 29.314 | 207862991 | 207863002 | 1688256004623 | Benar |
120719554 | 52.42 | 0.945 | 207863003 | 207863003 | 1688256004678 | Tidak benar |
120719555 | 52.41 | 13.534 | 207863004 | 207863006 | 1688256004680 | Benar |
… | … | … | … | … | … | … |
121384024 | 68.29 | 10.065 | 210364899 | 210364905 | 1688342399863 | Tidak benar |
121384025 | 68.30 | 7.078 | 210364906 | 210364908 | 1688342399948 | Tidak benar |
121384026 | 68.29 | 7.622 | 210364909 | 210364911 | 1688342399979 | Benar |
Pertama-tama data diproses, perdagangan asli dibagi menjadi kelompok transaksi proaktif pembayaran dan kelompok transaksi proaktif pesanan. Data transaksi agregat asli lainnya adalah satu data pada saat yang sama dengan harga yang sama dan arah yang sama, mungkin akan terjadi jumlah transaksi proaktif 100, jika dibagi menjadi beberapa transaksi dan harga yang berbeda, misalnya untuk pembagian 60 dan 40, akan menghasilkan dua data, yang mempengaruhi perkiraan transaksi pembayaran. Oleh karena itu, perlu digabungkan lagi berdasarkan transact_time.
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
Untuk contoh pembayaran, gambar garis lurus pertama, Anda dapat melihat efek ekor panjang sangat jelas, sebagian besar data terkonsentrasi di sebelah kiri sedikit, tetapi ada juga sedikit transaksi besar yang tersebar di ekor.
buy_trades['quantity'].plot.hist(bins=200,figsize=(10, 5));
为了观察方便,截掉尾部观察.可以看到成交量越大,出现频率越低,且减少的趋势更快。
buy_trades['quantity'][buy_trades['quantity']<200].plot.hist(bins=200,figsize=(10, 5));
Banyak penelitian yang berkaitan dengan distribusi yang memuaskan transaksi. Distribusi yang memuaskan hukum ketenagakerjaan (Power-law distribution) juga dikenal sebagai distribusi Pareto, adalah bentuk distribusi probabilitas yang umum digunakan dalam fisika statistik dan ilmu sosial. Dalam distribusi ketenagakerjaan, ukuran (atau frekuensi) probabilitas suatu peristiwa adalah proporsional dengan suatu indeks negatif dari ukuran peristiwa tersebut.
Gambar di bawah ini menunjukkan probabilitas transaksi yang lebih besar dari suatu nilai, garis biru adalah probabilitas nyata, garis kerucut adalah probabilitas simulasi, di sini jangan bingung parameter spesifik, Anda dapat melihat bahwa ini memang memenuhi distribusi Pareto. Karena probabilitas volume pesanan yang lebih besar dari 0 adalah 1, dan untuk memenuhi standardisasi, persamaan distribusi harus berbentuk sebagai berikut:
Di mana N adalah parameter standar. Di sini memilih rata-rata transaksi M, alpha memilih 2.06. Perkiraan alfa spesifik dapat dihitung kembali dengan nilai P ketika D = N. Secara khusus: alpha = log ((P ((d>M)) / log ((2)). Memilih titik yang berbeda akan sedikit berbeda dengan nilai alpha.
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)
plt.figure(figsize=(10, 5))
plt.grid(True)
plt.title('Diff')
plt.plot(depths, probabilities_s-probabilities);
Tapi perkiraan ini hanya terlihat seperti, di atas gambar, kita menggambar perbedaan antara nilai analog dan nilai nyata. Jika transaksi lebih kecil, kesesuaian sangat besar, bahkan mendekati 10%. Anda dapat memilih titik yang berbeda untuk membuat kemungkinan titik ini lebih akurat melalui perkiraan parameter, tetapi juga tidak memecahkan masalah penyimpangan. Ini ditentukan oleh perbedaan distribusi silindris dan distribusi aktual, dan untuk mendapatkan hasil yang lebih akurat, perlu melakukan modifikasi pada persamaan distribusi silindris.
Untuk pengamatan, r = q/M mewakili volume transaksi standar di sini. Parameter dapat diperkirakan dengan cara yang sama seperti di atas. Gambar di bawah ini menunjukkan bahwa penyimpangan maksimum setelah perbaikan tidak lebih dari 2%, secara teoritis dapat diperbaiki lebih lanjut, tetapi presisi ini juga cukup.
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);
Dengan persamaan perkiraan distribusi volume transaksi, perhatikan bahwa probabilitas persamaan bukanlah probabilitas yang sebenarnya, melainkan probabilitas kondisional. Saat ini dapat dijawab pertanyaan, apakah kemungkinan bahwa pesanan ini lebih besar dari nilai tertentu jika pesanan berikutnya terjadi?
Artikel ini sudah hampir selesai dan masih banyak pertanyaan yang perlu dijawab, yang akan kami coba jawab di artikel-artikel berikut.
Ukuran ok 🐂🍺
FmzeroAku tidak tahu apa yang terjadi.
RumputCSV terlalu besar untuk diunduh sendiri.