2021 Ulasan TAQ Cryptocurrency & Strategi Termudah yang Terlewatkan Peningkatan 10 Kali

Penulis:Ninabadass, Dicipta: 2022-04-07 11:36:32, Dikemas kini: 2022-04-13 09:25:23

2021 Ulasan TAQ Cryptocurrency & Strategi Termudah yang Terlewatkan Peningkatan 10 Kali

Kesimpulan 2021 dan Strategi Masa Depan.

2021 hampir berakhir, dan titik panas dari DEFI ke GAMEFI muncul satu demi satu, dan pasaran keseluruhan masih dalam pasaran lembu. Melihat ke belakang sekarang, berapa banyak yang anda peroleh pada tahun 2021? Peluang apa yang dilewatkan? Adakah terdapat pelaburan yang berjaya? Baru-baru ini, saya menarik sebut harga pasaran sejarah tahun lalu dan menemui strategi keuntungan yang tidak dijangka, tetapi ia adalah indeks pelbagai mata wang.

Terdapat terlalu banyak simbol mata wang yang disenaraikan di platform, dan banyak yang ditakdirkan tidak diketahui dan mungkin juga ditarik balik dari perdagangan. Di sini kita memilih simbol mata wang yang telah disenaraikan di Binance Perpetual Swap. Mereka umumnya telah diuji dan diiktiraf sebagai mata wang arus perdana, yang agak selamat. Selepas pemeriksaan sederhana, beberapa mata wang indeks dikeluarkan, dan 134 mata wang akhirnya bertahan.

Dalam [1]: Permintaan import Dari tarikhwaktu tarikhimport,tanggalwaktu Masa import Import panda sebagai pd import numpy sebagai np Import matplotlib.pyplot sebagai plt % matplotlib dalam barisan

Dalam [144]: ##pasangan dagangan semasa Info = permintaan.get"https://fapi.binance.com/fapi/v1/exchangeInfo’) simbol = [s[symbol] untuk s dalam Info.json()[symbols]]

Di [154]: symbols_f = list(set(filter(lambda x: x[-4:] == USDT, [s.split(_) [0] untuk s dalam simbol]))- set (([1000SHIBUSDT,1000XECUSDT,BTCDOMUSDT,DEFIUSDT,BTCSTUSDT])) + [SHIBUSDT,XECUSDT] print ((symbols_f)

Di [155]: print(len(symbols_f))

Pasaran pada Tahun Terakhir

Kemudian, kita mendapat harga penutupan harian mereka pada tahun lepas, dan kita perhatikan bahawa beberapa simbol mata wang hanya berada di pasaran untuk jangka masa yang singkat, jadi data memerlukan pemprosesan unitization.

Keuntungan indeks akhir adalah kira-kira 12 kali, iaitu, jika anda membeli 134 simbol mata wang ini secara purata pada 1 Januari 2021, keuntungan akhir daripada tidak melakukan apa-apa adalah 12 kali, dan dianggarkan bahawa lebih daripada 90% orang tidak melebihi indeks purata. Di antara mereka, simbol mata wang dengan penurunan terbesar: ICP jatuh sebanyak 93%, DODO jatuh sebanyak 85%, dan LINA jatuh sebanyak 75%. Peningkatan hampir seratus kali: SOL, FTM, LUNA, MATIC, SAND, AXS. Di antara mereka, AXS telah meningkat sebanyak 168 kali dan merupakan kuda hitam terbesar. Median meningkat 3 kali.

Ini adalah nisbah keuntungan yang putus asa. Saya telah bekerja keras dan mencuba semua jenis strategi, dan saya tidak membuat keuntungan sebanyak tahun ketika saya tidak membuat sebarang usaha tambahan. Walau bagaimanapun, perlu diperhatikan bahawa beberapa peningkatan nisbah terlalu besar, dan jelas menyimpang dari indeks. Jika simbol mata wang ini tidak dipilih pada awal tahun, keuntungan akan dekat dengan median, yang jauh kurang menonjol.

Di [157]: #fungsi untuk mendapatkan K-garis dalam mana-mana tempoh def GetKlines ((simbol=BTCUSDT,start=2020-8-10,end=2021-8-10,period=1h,base=fapi,v = v1): Klines = [] start_time = int(time.mktime(datetime.strptime(start, %Y-%m-%d).timetuple()))1000 + 860601000 end_time = int(time.mktime(datetime.strptime(end, %Y-%m-%d).timetuple()))1000 + 860601000 intervel_map = {m:601000,h:60601000,d:2460601000} sementara start_time < end_time: masa pertengahan = min(masa permulaan+1000*int(periode[:-1])intervel_map[periode[-1], akhir_waktu] url = https://+base+.binance.com/+base+/+v+/klines?simbol=%s&interval=%s&startTime=%s&endTime=%s&limit=1000%(simbol,periode,start_time,mid_time) res = permintaan.get (url) res_list = res.json() jika jenis ((res_list) == senarai dan len ((res_list) > 0: start_time = res_list[-1][0] Klines += res_list elif jenis ((res_list) == senarai: start_time = start_time+1000int(periode[:-1])*intervel_map[periode[-1]] lain: rehat

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

Di [164]: df_all_s = pd.DataFrame ((index=pd.date_range ((start=2021-1-1, end=2021-12-28, freq=1d),kolom=simbol_s) untuk i dalam julat ((len ((simbol_f)): #print ((simbol_s[i]) simbol_s = simbol_f[i] df_s = GetKlines ((simbol=simbol_s,start=2021-1-1,end=2021-12-28,period=1d,base=api,v=v3) df_all_s[simbol_s] = df_s[~df_s.index.duplicated(keep=first)].close

Dalam [165]: df_all_s.tail() #struktur data Keluar[165]:

Dalam [174]: df_all = df_all_s.fillna ((metod=bfill) # isi data df_norm = df_all/df_all.iloc[0] #unitization df_norm.mean ((axis=1).plot ((figsize=(12,4), grid=True); #grafik keuntungan indeks akhir Keluar[174]:img

Dalam [175]: #peningkatan purata df_norm.median ((axis=1).plot ((figsize=(12,4), grid=True); Keluar[175]:img

Dalam [168]: #bangkit dan jatuh menyusun print ((df_norm.iloc[-1].round ((2).sort_values().to_dict())

Dalam [317]: # maksimum pengeluaran harga semasa berbanding dengan harga tertinggi pada tahun lepas print ((((1-df_norm.iloc[-1]/df_norm.max()).bulat(2).sort_values().to_dict())

Dalam [177]: df_all_f = pd.DataFrame ((index=pd.date_range ((start=2021-1-1, end=2021-12-28, freq=1d),kolom=simbol_s) untuk i dalam julat ((len ((simbol_f)): #print ((simbol_s[i]) simbol_f = simbol_f[i] df_f = GetKlines ((symbol=symbol_f,start=2021-1-1,end=2021-12-28,period=1d,base=fapi,v=v1) df_all_f[symbol_f] = df_f[~df_f.index.duplicated ((keep=first) ].close

Dalam [208]: # tidak termasuk simbol baru df = df_all_s[df_all_s.columns[~df_all_f.iloc[0].isnull() ] df = df.fillna ((metode=bfill) df = df/df.iloc[0] df.mean ((axis=1).plot ((figsize=(12,4), grid=True); Keluar[208]:img

Dalam [212]: #dibandingkan dengan BTC (df.mean(axis=1)/df.BTCUSDT).plot ((figsize=(12,4), grid=True); Keluar[212]:img

Dalam [213]: # gunakan enjin backtest lama kelas Pertukaran:

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)

Dalam [418]: #untuk backtest yang lebih tepat, merangkak 1-jam k-garis df_all_s = pd.DataFrame ((index=pd.date_range ((start=2021-1-1, end=2021-12-28, freq=1h),kolom=simbol_s) untuk i dalam julat ((len ((simbol_f)): #print ((simbol_s[i]) simbol_s = simbol_f[i] df_s = GetKlines ((simbol=simbol_s,start=2021-1-1,end=2021-12-28,period=1h,base=api,v=v3) df_all_s[simbol_s] = df_s[~df_s.index.duplicated(keep=first)].close

Dalam [419]: df = df_all_s[df_all_s.columns[~df_all_f.iloc[0].isnull() ] df = df.fillna ((metode=bfill) df = df/df.iloc[0] df.mean ((axis=1).plot ((figsize=(12,4), grid=True); Keluar[419]:img

Prestasi Strategi yang Seimbang

Ujian belakang memilih semua simbol mata wang yang disenaraikan pada kontrak Binance Perpetual pada 1 Januari 2021. Tempoh K-line adalah 1h, dan parameternya adalah mula membeli apabila jumlah kedudukan kurang dari 5% dari purata dan mula menjual apabila melebihi 5%. Apabila ujian belakang adalah semua simbol mata wang, keuntungan strategi akhir adalah 7.7 kali. Semakin buruk daripada keuntungan purata 13 kali. Itu juga dalam jangkaan saya. Lagipun, simbol mata wang yang meningkat seratus kali terlalu istimewa, dan strategi seimbang akan menjualnya semua.

Jika ujian belakang memilih untuk membuang 10 simbol mata wang dengan peningkatan tertinggi, dan hanya memeriksa simbol mata wang yang agak biasa, keuntungan akhir adalah 4.8 kali, jauh melebihi prestasi purata 3.4 kali.

Jika hanya 3 simbol mata wang dengan peningkatan tertinggi diputar, keuntungan akhir adalah 373 kali, jauh melebihi prestasi purata 160 kali.

Dalam [494]: # backtest semua simbol simbol = senarai ((df.iloc[-1].sort_values() [:].index) e = Pertukaran ((simbol, yuran=0.001, baki_awal=10000) res_list = [] avg_pct = 1/len (simbol) untuk baris dalam df[simbol].iterrows(): harga = baris[1] Jumlah = e. akaun[USDT][total] e.Memperbaharui (harga) untuk simbol dalam simbol: pct = e.account[simbol][value]/jumlah jika pct < 0,95*avg_pct: e.Beli ((simbol,harga[simbol],(avg_pct-pct)Jumlah/harga[simbol]) jika pct > 1.05avg_pct: e.Menjual ((simbol,harga[simbol],(pct-avg_pct) *total/harga[simbol]) res_list.append (([e.account[simbol][value] untuk simbol dalam simbol] + [e.account[USDT][total]]) res = pd.DataFrame ((data=res_list, lajur=simbol+[total],index = df.index)

Dalam [495]: e. akaun[USDT] Keluar[495]:

Dalam [496]: # backtest prestasi semua simbol (res.total/10000).plot(figsize=(12,4), grid = Benar); df[simbol].mean ((axis=1).plot ((figsize=(12,4), grid=True); Keluar[496]:img

Dalam [498]: #mengurangkan simbol dengan peningkatan besar simbol = senarai ((df.iloc[-1].sort_values()[:-10].index) e = Pertukaran ((simbol, yuran=0.001, baki_awal=10000) res_list = [] avg_pct = 1/len (simbol) untuk baris dalam df[simbol].iterrows(): harga = baris[1] Jumlah = e. akaun[USDT][total] e.Memperbaharui (harga) untuk simbol dalam simbol: pct = e.account[simbol][value]/jumlah jika pct < 0,95*avg_pct: e.Beli ((simbol,harga[simbol],(avg_pct-pct)Jumlah/harga[simbol]) jika pct > 1.05avg_pct: e.Menjual ((simbol,harga[simbol],(pct-avg_pct) *total/harga[simbol]) res_list.append (([e.account[simbol][value] untuk simbol dalam simbol] + [e.account[USDT][total]]) res = pd.DataFrame ((data=res_list, lajur=simbol+[total],index = df.index)

Dalam [501]: e. akaun[USDT] Keluar[501]:

Dalam [499]: (res.total/10000).plot(figsize=(12,4), grid = Benar); df[simbol].mean ((axis=1).plot ((figsize=(12,4), grid=True); Keluar [499]:img

Dalam [503]: #hanya menguji simbol dengan peningkatan tertinggi simbol = senarai ((df.iloc[-1].sort_values()[-3:].index) e = Pertukaran ((simbol, yuran=0.001, baki_awal=10000) res_list = [] avg_pct = 1/len (simbol) untuk baris dalam df[simbol].iterrows(): harga = baris[1] Jumlah = e. akaun[USDT][total] e.Memperbaharui (harga) untuk simbol dalam simbol: pct = e.account[simbol][value]/jumlah jika pct < 0,95*avg_pct: e.Beli ((simbol,harga[simbol],(avg_pct-pct)Jumlah/harga[simbol]) jika pct > 1.05avg_pct: e.Menjual ((simbol,harga[simbol],(pct-avg_pct) *total/harga[simbol]) res_list.append (([e.account[simbol][value] untuk simbol dalam simbol] + [e.account[USDT][total]]) res = pd.DataFrame ((data=res_list, lajur=simbol+[total],index = df.index)

Dalam [504]: e. akaun[USDT] Keluar[504]:

Dalam [505]: (res.total/10000).plot(figsize=(12,4), grid = Benar); df[simbol].mean ((axis=1).plot ((figsize=(12,4), grid=True); Keluar[505]:img

Kesimpulan

Secara umum, 2021 adalah pasaran bull besar untuk mata wang tiruan dan tahun yang sunyi bagi BTC. Nilai pasaran BTC telah jatuh dari 70% pada awal tahun kepada 40% sekarang, yang sudah menjadi tahap terendah dalam sejarah. Oleh itu, keuntungan purata membeli simbol mata wang tiruan dan memegangnya pada tahun lalu jauh lebih tinggi daripada memegang BTC. Menunggu ke hadapan ke 2022, jika anda berfikir bahawa masih ada beberapa ratus kali mata wang yang dilahirkan di pasaran semasa di masa depan, anda boleh dengan berani mempelbagaikan simbol mata wang yang anda pegang dan menunggu dengan sabar. Jika anda sangat optimis tentang beberapa simbol mata wang atau pasaran purata, anda boleh menggunakan strategi putaran untuk mendapatkan keuntungan berlebihan tanpa berfikir. Jika anda bersetuju bahawa perkara akan berkembang ke arah yang bertentangan apabila mereka menjadi melampau, anda boleh memancing BTC untuk keuntungan dan keselamatan yang lebih baik.


Lebih lanjut