Der Artikel untersucht die High-Frequency Trading-Strategien für digitale Währungen, einschließlich der Gewinnquellen (vor allem durch starke Marktfluktuationen und Exchange-Verfahren), Hanging Positions und Positionskontrollen, sowie die Modellierung von Transaktionen mit der Pareto-Distribution. Außerdem wird auf die von Binance bereitgestellten Einzeltransaktionen und Best-Langed-Order-Daten verwiesen, und es ist geplant, weitere Fragen der High-Frequency-Trading-Strategien in den folgenden Artikeln zu erörtern.
Ich habe zwei Artikel über hohe Frequenz-Transaktionen in digitalen Währungen geschrieben.Einführung in die High-Frequency-Strategie von Kryptowährungen, 5 Ventilatoren 80 mal stärker als die HochfrequenzstrategieIch habe vor, eine Reihe von Artikeln zu schreiben, die von Anfang an die Idee des Hochfrequenz-Handels vorstellen. Ich hoffe, dass ich es so kurz wie möglich machen kann, aber aufgrund meines begrenzten persönlichen Verständnisses von Hochfrequenz-Handel ist es nicht tiefgründig.
In früheren Artikeln wurde erwähnt, dass die Hochfrequenzstrategie besonders für Märkte geeignet ist, die sehr stark von oben nach unten schwanken. Untersuchen Sie eine Handelssorte, die von Preisänderungen in kurzer Zeit besteht, bestehend aus Gesamttrends und Erschütterungen. Natürlich können Sie Geld verdienen, wenn Sie die Veränderungen der Trends genau vorhersagen können, aber dies ist auch am schwierigsten.
1.策略同时挂买单和卖单,第一个问题就是在哪里挂单。挂的离盘口越近,成交的概率越高,但在剧烈波动的行情中,瞬间成交的价格可能离盘口较远,挂的那太近没有能吃到足够的利润。挂的太远的单子成交概率又低。这是一个需要优化的问题。
2.控制仓位。为了控制风险,策略就不能长时间累计过多的仓位。可以通过控制挂单距离、挂单量、总仓位限制等办法解决。
Um die oben genannten Ziele zu erreichen, ist es notwendig, Modellschätzungen für verschiedene Aspekte wie Transaktionswahrscheinlichkeitswahrscheinlichkeit, Transaktionsgewinn, Marktschätzung zu erstellen. Es gibt viele Artikel und Papiere zu diesem Thema, die unter den Schlüsselwörtern High-Frequency Trading, Orderbook und so weiter zu finden sind. Es gibt auch viele Empfehlungen im Internet.
Binance bietet Transaktionsdaten und die besten Daten für aufgeschlossene Bestellungen.HerunterladenDie Daten müssen in der Whitelist mit einer API heruntergeladen werden und können auch selbst gesammelt werden.
from datetime import date,datetime
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
Die Transaktionen umfassen:
Sie können sehen, dass 660.000 Transaktionsdaten an diesem Tag vorhanden sind und dass die Transaktionen aktiv sind.
trades = pd.read_csv('COMPUSDT-aggTrades-2023-07-02.csv')
trades
664475 Zeilen × 7 Spalten
Agg_trade_id | Preis | Anzahl | erste_Handel_id | Last_trade_id | Transaktionszeit | ist_Käufer_Hersteller |
---|---|---|---|---|---|---|
120719552 | 52.42 | 22.087 | 207862988 | 207862990 | 1688256004603 | Nicht zutreffend |
120719553 | 52.41 | 29.314 | 207862991 | 207863002 | 1688256004623 | Das ist wahr. |
120719554 | 52.42 | 0.945 | 207863003 | 207863003 | 1688256004678 | Nicht zutreffend |
120719555 | 52.41 | 13.534 | 207863004 | 207863006 | 1688256004680 | Das ist wahr. |
… | … | … | … | … | … | … |
121384024 | 68.29 | 10.065 | 210364899 | 210364905 | 1688342399863 | Nicht zutreffend |
121384025 | 68.30 | 7.078 | 210364906 | 210364908 | 1688342399948 | Nicht zutreffend |
121384026 | 68.29 | 7.622 | 210364909 | 210364911 | 1688342399979 | Das ist wahr. |
Zuerst werden die Daten verarbeitet und die ursprünglichen Trades in die Transact-Initiative-Gruppe und in die Transact-Initiative-Gruppe geteilt. Die Daten der ursprünglichen Aggregat-Trade sind jedoch zur gleichen Zeit und zum gleichen Preis in der gleichen Richtung als eine Datenbank. Es kann eine aktive Transaktion von 100 passieren. Wenn mehrere Transaktionen in verschiedene Preise geteilt werden, wie zum Beispiel 60 und 40, werden zwei Daten produziert, die die Transaktionszahl beeinflussen.
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
Als Beispiel für Zahlungen, die zuerst in einer Geraden dargestellt werden, kann man sehen, dass der Langschwanz-Effekt sehr deutlich ist, wobei sich der größte Teil der Daten auf der linken Seite konzentriert, aber auch eine geringe Anzahl großer Transaktionen auf der Rückseite verteilt ist.
buy_trades['quantity'].plot.hist(bins=200,figsize=(10, 5));
为了观察方便,截掉尾部观察.可以看到成交量越大,出现频率越低,且减少的趋势更快。
buy_trades['quantity'][buy_trades['quantity']<200].plot.hist(bins=200,figsize=(10, 5));
Die Power-Law-Verteilung, auch bekannt als Pareto-Verteilung, ist eine in der statistischen Physik und in den Sozialwissenschaften verbreitete Form der Wahrscheinlichkeitsverteilung. In einer Pareto-Verteilung ist die Wahrscheinlichkeit einer Ereignisgröße (oder -frequenz) in einem negativen Index der Ereignisgröße.
Die folgende Abbildung zeigt die Wahrscheinlichkeit, dass ein Auftragsvolumen größer als ein bestimmter Wert ist, mit der blauen Linie für die tatsächliche Wahrscheinlichkeit und der schrägen Linie für die simulierte Wahrscheinlichkeit.
Hier ist N ein standardisierter Parameter. Hier wählt man den Durchschnittstransaktionswert M, hier wählt man Alpha-2.06. Die spezifische Alpha-Schätzung kann durch P-Werte, wenn D = N, zurückgerechnet werden.
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);
Aber diese Schätzung sieht nur so aus, als ob wir in der Abbildung oben die Differenz zwischen dem Analogwert und dem tatsächlichen Wert dargestellt haben. Wenn die Transaktionen kleiner sind, ist die Abweichung sehr groß, sogar nahezu 10%. Es kann durch die Parameterschätzung verschiedene Punkte ausgewählt werden, um die Wahrscheinlichkeit dieses Punktes genauer zu machen, aber auch die Abweichungsprobleme werden nicht gelöst.
Um es kurz zu machen: hier wird die standardisierte Transaktionsmenge mit r = q/M dargestellt. Die Parameter können in der gleichen Weise geschätzt werden wie oben. Die folgende Abbildung zeigt, dass die maximale Abweichung nach der Korrektur nicht mehr als 2% beträgt.
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);
Bei einer Schätzung der Verteilung der Transaktionen ist die Wahrscheinlichkeit der Gleichung nicht die wahre Wahrscheinlichkeit, sondern eine bedingte Wahrscheinlichkeit. Hier kann man die Frage beantworten, wie groß die Wahrscheinlichkeit ist, dass diese Bestellung größer ist als ein bestimmter Wert, wenn der nächste Auftrag stattfindet. Man kann auch sagen, wie groß die Wahrscheinlichkeit ist, dass Bestellungen unterschiedlicher Tiefen ausgeführt werden.
Ich bin fast fertig, aber es gibt noch viele Fragen, die ich beantworten möchte, und die folgenden Artikel werden versuchen, diese zu beantworten.
Ock-Quantität 🐂🍺
fmzeroDas ist ein Schlagzeug!
Das GrasDie CSV ist zu groß, um selbst heruntergeladen zu werden.