Conclusão de 2021 e futura estratégia.ipynb
2021 está chegando ao fim, e pontos quentes do DEFI ao GAMEFI estão emergindo um após o outro, e o mercado geral ainda está em um mercado de alta. Olhando para trás agora, quanto você ganhou em 2021? Que oportunidade você perdeu? Há investimentos bem sucedidos? Recentemente, eu puxei as cotações do mercado histórico do ano passado e encontrei uma estratégia de lucro inesperadamente simples, mas é um índice multi-moeda.
Há muitos símbolos de moeda listados em plataformas, e muitos estão destinados a ser desconhecidos e podem até ser retirados da negociação. Aqui escolhemos os símbolos de moeda que foram listados no Binance Perpetual Swap. Eles foram geralmente testados e são reconhecidos como moedas convencionais, que são relativamente seguras. Após uma simples triagem, algumas moedas do índice foram removidas e 134 moedas finalmente sobreviveram.
Em [1]: Pedidos de importação a partir da data-hora data de importação, data-hora Tempo de importação importar pandas como pd importar numpy como np importar matplotlib.pyplot como plt % matplotlib em linha
Em [144]:
##pares de negociação atuais
Informações = pedidos.obtenção"https://fapi.binance.com/fapi/v1/exchangeInfo’)
símbolos = [s[
Em [154]:
símbolos_f = list(set(filter(lambda x: x[-4:] ==
Em [155]: Impressão (symbols)
Então, obtemos seus preços de fechamento diários no ano passado, e notamos que alguns símbolos de moeda estavam no mercado apenas por um curto período de tempo, então os dados precisam de processamento de unitização.
O lucro final do índice é de cerca de 12 vezes, ou seja, se você comprar esses 134 símbolos de moeda em média em 1o de janeiro de 2021, o lucro final de não fazer nada é de 12 vezes, e estima-se que mais de 90% das pessoas não superam o índice médio. Entre eles, os símbolos de moeda com o maior declínio: ICP caiu 93%, DODO caiu 85% e LINA caiu 75%. O aumento de quase cem vezes: SOL, FTM, LUNA, MATIC, SAND, AXS. Entre eles, o AXS aumentou 168 vezes e é o maior cavalo negro. A mediana aumentou 3 vezes. Pode-se dizer que o índice é impulsionado principalmente pelas cadeias públicas e jogos.
Este é um rácio de lucro desesperado. Eu trabalhei duro e tentei todos os tipos de estratégias, e eu não fiz tanto lucro como um ano em que eu não fiz nenhum esforço extra. No entanto, deve-se notar que vários dos aumentos do rácio são muito grandes, e obviamente se desviam do índice. Se esses símbolos de moeda não forem selecionados no início do ano, o lucro será próximo da mediana, que é muito menos proeminente.
Em [157]:
# função para obter a linha K em qualquer período
def GetKlines ((símbolo=
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
Em [164]:
df_all_s = pd.DataFrame ((index=pd.date_range ((start=
Em [165]: df_all_s.tail() #estrutura de dados Fora[165]:
Em [174]:
df_all = df_all_s.fillna ((método=
Em [175]: #aumento médio df_norm.median ((eixo=1).plot ((figsize=(12,4), grelha=true); Fora [1]:
Em [168]: #aumento e queda de classificação print ((df_norm.iloc[-1].round ((2).sort_values().to_dict())
Em [317]: #maximo retiro do preço actual em comparação com o preço mais elevado do ano passado print ((((1-df_norm.iloc[-1]/df_norm.max()) redondo(2).sort_values().to_dict())
Em [177]:
df_all_f = pd.DataFrame ((index=pd.date_range ((start=
Em [208]:
Não incluem novos símbolos.
df = df_all_s[df_all_s.columns[~df_all_f.iloc[0].isnull() ]
df = df.fillna ((método=
Em [212]: #comparado com o BTC (df.mean(axis=1)/df.BTCUSDT).plot(figsize=(12,4), grelha=Verdadeiro); Fora[212]:
Em [213]: # Use o velho motor de backtest classe Intercâmbio:
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)
Em [418]:
# Para um backtest mais preciso, rastrear 1 hora k-line
df_all_s = pd.DataFrame ((index=pd.date_range ((start=
Em [419]:
df = df_all_s[df_all_s.columns[~df_all_f.iloc[0].isnull() ]
df = df.fillna ((método=
O backtest selecionou todos os símbolos de moeda listados nos contratos Binance Perpetual em 1 de janeiro de 2021. O período de linha K é de 1h, e o parâmetro é que comece a comprar quando o valor da posição é inferior a 5% da média e comece a vender quando superior a 5%. Quando o backtest é de todos os símbolos de moeda, o lucro final da estratégia é de 7,7 vezes. Significativamente pior do que o lucro médio de 13 vezes. Isso também está na minha expectativa. Afinal, aqueles símbolos de moeda que aumentaram cem vezes são muito especiais, e a estratégia equilibrada os venderá todos.
Se o backtest optar por remover os 10 símbolos de moeda com o maior aumento e examinar apenas os símbolos de moeda relativamente medíocres, o lucro final é de 4,8 vezes, muito superior ao desempenho médio de 3,4 vezes.
Se apenas os 3 símbolos de moeda com o maior aumento forem rotados, o lucro final é de 373 vezes, superando em muito o desempenho médio de 160 vezes.
Em [494]:
# backtest de todos os símbolos
símbolos = list(df.iloc[-1].sort_values()[:].index)
e = intercâmbio ((símbolos, taxa=0,001, saldo inicial=10000)
res_list = []
Avg_pct = 1/len (simbolos)
para a linha de df[simbolos].iterrows():
preços = linha [1]
Total = e.conta[
Em [495]:
e.conta[
Em [496]: # backtest desempenho de todos os símbolos (res.total/10000).plot(figsize=(12,4), grelha = True); df[símbolos].média ((eixo=1).plot(figsize=(12,4), grelha=Verdade); Fora[496]:
Em [498]:
#reduzir símbolos com enorme aumento
símbolos = list ((df.iloc[-1].sort_values()[:-10].index)
e = intercâmbio (simbolos, taxa=0,001, saldo inicial=10000)
res_list = []
Avg_pct = 1/len (símbolos)
para a linha de df[simbolos].iterrows():
preços = linha [1]
Total = e.conta[
Em [501]:
e.conta[
Em [499]: (res.total/10000).plot(figsize=(12,4), grelha = True); df[símbolos].média ((eixo=1).plot(figsize=(12,4), grelha=Verdade); Fora[499]:
Em [503]:
# só testar os símbolos com o maior aumento
símbolos = list(df.iloc[-1].sort_values()[-3:].index)
e = intercâmbio (simbolos, taxa=0,001, saldo inicial=10000)
res_list = []
Avg_pct = 1/len (símbolos)
para a linha de df[simbolos].iterrows():
preços = linha [1]
Total = e.conta[
Em [504]:
e.conta[
Em [505]: (res.total/10000).plot(figsize=(12,4), grelha = True); df[símbolos].média(eixo=1).plot(figsize=(12,4),grid=True); Fora[505]:
Em geral, 2021 foi um grande mercado alcista para moedas cópias e um ano desolador para o BTC. O valor de mercado do BTC caiu de 70% no início do ano para 40% agora, o que já é o nível mais baixo da história. Portanto, o lucro médio de comprar símbolos de moeda cópia e mantê-los no ano passado foi muito maior do que o de manter o BTC. Olhando para frente para 2022, se você acha que ainda existem várias centenas de vezes de moedas nascidas no mercado atual no futuro, você pode diversificar ousadamente os símbolos de moeda que está segurando e esperar pacientemente. Se você é particularmente otimista sobre alguns símbolos de moeda ou o mercado médio, pode usar a estratégia de rotação para obter lucros excessivos sem pensar. Se você concordar que as coisas se desenvolverão na direção oposta quando se tornam extremas, você pode pescar fundo para obter melhores lucros e segurança do BTC.