Schlussfolgerung 2021 und künftige Strategie.ipynb
2021 geht zu Ende, und Hotspots von DEFI bis GAMEFI entstehen nacheinander, und der Gesamtmarkt befindet sich immer noch in einem Bullenmarkt. Rückblickend, wie viel haben Sie 2021 verdient? Welche Gelegenheit haben Sie verpasst? Gibt es erfolgreiche Investitionen? Vor kurzem zog ich die historischen Marktkurse des vergangenen Jahres und fand eine unerwartet einfache Profit-Strategie, aber es ist ein Multi-Währungsindex.
Es gibt zu viele Währungssymbole, die auf Plattformen gelistet sind, und viele sind dazu bestimmt, unbekannt zu sein und können sogar aus dem Handel genommen werden. Hier wählen wir die Währungssymbole aus, die auf Binance Perpetual Swap gelistet wurden. Sie wurden im Allgemeinen getestet und als Mainstream-Währungen anerkannt, die relativ sicher sind. Nach einem einfachen Screening wurden einige Indexwährungen entfernt und 134 Währungen überlebten schließlich.
In [1]: Einfuhranträge ab Datum/Zeit Datum der Einfuhr,Datum/Zeit Einfuhrzeit Import von Pandas als PD Import von Numpy als np Import von matplotlib.pyplot als plt % Matplotlib inline
In [144]:
##aktuelles Handelspaar
Info = Anfragen.get"https://fapi.binance.com/fapi/v1/exchangeInfo’)
Symbole = [s[
In [154]:
symbols_f = list(set(filter(lambda x: x[-4:] ==
In [155]: Print ((Len))
Dann erhalten wir ihre täglichen Schlusskurse im vergangenen Jahr, und wir bemerken, dass einige Währungssymbole nur für eine kurze Zeit auf dem Markt waren, so dass die Daten eine Einheitlichkeitsverarbeitung benötigen.
Der endgültige Indexgewinn beträgt etwa das 12-fache, das heißt, wenn Sie diese 134 Währungssymbole im Durchschnitt am 1. Januar 2021 kaufen, beträgt der endgültige Gewinn, wenn Sie nichts tun, das 12-fache, und es wird geschätzt, dass mehr als 90% der Menschen den Durchschnittsindex nicht übertreffen. Unter ihnen waren die Währungssymbole mit dem größten Rückgang: ICP fiel um 93%, DODO fiel um 85% und LINA fiel um 75%. Der Anstieg von fast hundertmal: SOL, FTM, LUNA, MATIC, SAND, AXS. Unter ihnen ist AXS um das 168-fache gestiegen und ist das größte dunkle Pferd. Der Median stieg um das 3-fache. Man kann sagen, dass der Index hauptsächlich von den öffentlichen Ketten und Spielen getrieben wird. Um Überlebensverzerrungen zu vermeiden, ohne die neu gelisteten Währungssymbole zu berücksichtigen, erzielte er im Laufe des Zeitraums auch einen Gewinn von fast 11-fachen. Es ist einfach das 7-fache
Dies ist eine verzweifelte Gewinnquote. Ich habe hart gearbeitet und alle möglichen Strategien ausprobiert, und ich habe nicht so viel Gewinn gemacht wie ein Jahr, in dem ich keine zusätzlichen Anstrengungen unternommen habe. Allerdings sollte beachtet werden, dass mehrere der Verhältnissteigerungen zu groß sind und offensichtlich vom Index abweichen. Wenn diese Währungssymbole nicht zu Beginn des Jahres ausgewählt werden, wird der Gewinn nahe dem Median liegen, der viel weniger prominent ist.
In [157]:
# Funktion, um die K-Linie in jeder Periode zu erhalten
def GetKlines ((Symbol=
df = pd.DataFrame(Klines,columns=['time','open','high','low','close','amount','end_time','volume','count','buy_amount','buy_volume','null']).astype('float')
df.index = pd.to_datetime(df.time,unit='ms')
profit df
In [164]:
df_all_s = pd.DataFrame ((index=pd.date_range ((start=
In [165]: df_all_s.tail() #Datenstruktur Ausgeschaltet[1]:
In [174]:
df_all = df_all_s.fillna(methode=
In [175]: #mediane Zunahme df_norm.median ((Achse=1).Plot ((Figgröße=(12,4),Gitter=True); Ausgeschaltet[1]:
In [168]: #Aufstieg und Abstieg sortieren print ((df_norm.iloc[-1].round ((2).sort_values (().to_dict())
In [317]: #maximaler Rückzug des aktuellen Preises im Vergleich zum höchsten Preis des letzten Jahres print ((((1-df_norm.iloc[-1]/df_norm.max()).rund(2).sort_values().to_dict())
In [177]:
df_all_f = pd.DataFrame ((index=pd.date_range ((start=
In [208]:
# keine neuen Symbole enthalten
df = df_all_s[df_all_s.Spalten[~df_all_f.iloc[0].isnull() ]
df = df.fillna ((Methode=
In [212]: #verglichen mit BTC (df.mean(Achse=1)/df.BTCUSDT).Graph ((figsize=(12,4),Gitter=True); Ausgeschaltet[1]:
In [213]: # Verwenden Sie die alte Backtest-Engine Klasse Austausch:
def __init__(self, trade_symbols, fee=0.0004, initial_balance=10000):
self.initial_balance = initial_balance #initial asset
self.fee = fee
self.trade_symbols = trade_symbols
self.account = {'USDT':{'realised_profit':0, 'unrealised_profit':0, 'total':initial_balance, 'fee':0}}
for symbol in trade_symbols:
self.account[symbol] = {'amount':0, 'hold_price':0, 'value':0, 'price':0, 'realised_profit':0,'unrealised_profit':0,'fee':0}
def Trade(self, symbol, direction, price, amount):
cover_amount = 0 if direction*self.account[symbol]['amount'] >=0 else min(abs(self.account[symbol]['amount']), amount)
open_amount = amount - cover_amount
self.account['USDT']['realised_profit'] -= price*amount*self.fee #deduct service fee
self.account['USDT']['fee'] += price*amount*self.fee
self.account[symbol]['fee'] += price*amount*self.fee
if cover_amount > 0: #close first
self.account['USDT']['realised_profit'] += -direction*(price - self.account[symbol]['hold_price'])*cover_amount #profit
self.account[symbol]['realised_profit'] += -direction*(price - self.account[symbol]['hold_price'])*cover_amount
self.account[symbol]['amount'] -= -direction*cover_amount
self.account[symbol]['hold_price'] = 0 if self.account[symbol]['amount'] == 0 else self.account[symbol]['hold_price']
if open_amount > 0:
total_cost = self.account[symbol]['hold_price']*direction*self.account[symbol]['amount'] + price*open_amount
total_amount = direction*self.account[symbol]['amount']+open_amount
self.account[symbol]['hold_price'] = total_cost/total_amount
self.account[symbol]['amount'] += direction*open_amount
def Buy(self, symbol, price, amount):
self.Trade(symbol, 1, price, amount)
def Sell(self, symbol, price, amount):
self.Trade(symbol, -1, price, amount)
def Update(self, close_price): #update asset
self.account['USDT']['unrealised_profit'] = 0
for symbol in self.trade_symbols:
self.account[symbol]['unrealised_profit'] = (close_price[symbol] - self.account[symbol]['hold_price'])*self.account[symbol]['amount']
self.account[symbol]['price'] = close_price[symbol]
self.account[symbol]['value'] = abs(self.account[symbol]['amount'])*close_price[symbol]
self.account['USDT']['unrealised_profit'] += self.account[symbol]['unrealised_profit']
self.account['USDT']['total'] = round(self.account['USDT']['realised_profit'] + self.initial_balance + self.account['USDT']['unrealised_profit'],6)
In [418]:
#für einen genaueren Backtest, crawlen Sie die 1-Stunden-K-Linie
df_all_s = pd.DataFrame ((index=pd.date_range ((start=
In [419]:
df = df_all_s[df_all_s.Spalten[~df_all_f.iloc[0].ist null()]]
df = df.fillna ((Methode=
Der Backtest wählte alle auf den Binance Perpetual-Kontrakten aufgeführten Währungssymbole am 1. Januar 2021 aus. Die K-Linienperiode beträgt 1h, und der Parameter ist, dass man mit dem Kauf beginnt, wenn die Positionssumme weniger als 5% des Durchschnitts beträgt, und mit dem Verkauf beginnt, wenn sie über 5% liegt. Wenn der Backtest mit allen Währungssymbolen durchgeführt wird, beträgt der endgültige Strategiegewinn 7,7 Mal. Wesentlich schlechter als der durchschnittliche Gewinn von 13 Mal. Das liegt auch in meiner Erwartung. Schließlich sind diese Währungssymbole, die um einhundertmal gestiegen sind, zu speziell, und die ausgewogene Strategie wird sie alle verkaufen.
Wenn der Backtest die 10 Währungssymbole mit dem höchsten Anstieg entfernt und nur die relativ mittelmäßigen Währungssymbole untersucht, beträgt der endgültige Gewinn 4,8 Mal, was die durchschnittliche Leistung von 3,4 Mal weit übersteigt.
Wenn nur die 3 Währungssymbole mit dem höchsten Anstieg gedreht werden, beträgt der endgültige Gewinn 373-mal, was die durchschnittliche Leistung von 160-mal weit übersteigt.
In [494]:
#Backtest aller Symbole
Symbole = list ((df.iloc[-1].sort_values() [:].index)
e = Wechselkurs (Symbole, Gebühr = 0,001, initial_balance = 10000)
Res_list = []
Ausnahme für die Ausrüstung für die Verarbeitung von Daten
für die Zeile in df[Symbole].iterrows():
Preise = Zeile [1]
Gesamt = e.Konto[
In [495]:
e.Konto[
In [496]: #Backtest Leistung aller Symbole (res.total/10000).plot ((figsize=(12,4), Raster = True); df[Symbole].mean ((Achse=1).plot ((Figurgröße=(12,4),Gitter=True); Außen[496]:
In [498]:
Verringern Sie Symbole mit einer enormen Zunahme
Symbole = list ((df.iloc[-1].sort_values() [:-10].index)
e = Wechselkurs (Symbole, Gebühr = 0,001, initial_balance = 10000)
Res_list = []
Ausnahme für die Ausrüstung für die Verarbeitung von Daten
für die Zeile in df[Symbole].iterrows():
Preise = Zeile [1]
Gesamt = e.Konto[
In [501]:
e.Konto[
In [499]: (res.total/10000).plot ((figsize=(12,4), Raster = True); df[Symbole].mean ((Achse=1).plot ((Figurgröße=(12,4),Gitter=True); Aus [499]:
In [503]:
#Testen Sie nur die Symbole mit dem höchsten Anstieg
Symbole = list ((df.iloc[-1].sort_values()[-3:].index)
e = Wechselkurs (Symbole, Gebühr = 0,001, initial_balance = 10000)
Res_list = []
Ausnahme für die Ausrüstung für die Verarbeitung von Daten
für die Zeile in df[Symbole].iterrows():
Preise = Zeile [1]
Gesamt = e.Konto[
In [504]:
e.Konto[
In [505]: (res.total/10000).plot ((figsize=(12,4), Raster = True); df[Symbole].mean ((Achse=1).plot ((Figurgröße=(12,4),Gitter=True); Ausgeschaltet[505]:
Im Allgemeinen war 2021 ein großer Bullenmarkt für Kopiewährungen und ein einsames Jahr für BTC. Der Marktwert von BTC ist von 70% zu Beginn des Jahres auf 40% gesunken, was bereits das niedrigste Niveau in der Geschichte ist. Daher war der durchschnittliche Gewinn durch den Kauf von Kopiewährungssymbolen und deren Halten im vergangenen Jahr viel höher als durch das Halten von BTC. Wenn Sie sich 2022 vorstellen, wenn Sie denken, dass es in Zukunft noch mehrere hundert Mal mehr Währungen auf dem aktuellen Markt gibt, können Sie die Währungssymbole, die Sie halten, mutig diversifizieren und geduldig warten. Wenn Sie besonders optimistisch über ein paar Währungssymbole oder den durchschnittlichen Markt sind, können Sie die Rotationsstrategie verwenden, um ohne nachzudenken überschüssige Gewinne zu erzielen. Wenn Sie zustimmen, dass sich die Dinge in die entgegengesetzte Richtung entwickeln, wenn sie extrem werden, können Sie BTC für bessere Gewinne und Sicherheit nach unten fischen.