Conclusión y futura estrategia para 2021.ipynb
2021 está llegando a su fin, y los puntos calientes de DEFI a GAMEFI están surgiendo uno tras otro, y el mercado general todavía está en un mercado alcista. Mirando hacia atrás ahora, ¿cuánto has ganado en 2021? ¿Qué oportunidad te perdiste? ¿Hay alguna inversión exitosa? Recientemente, extraje las cotizaciones del mercado histórico del año pasado y encontré una estrategia de lucro inesperadamente simple, pero es un índice multidivisa.
Hay demasiados símbolos de divisas listados en las plataformas, y muchos están destinados a ser desconocidos e incluso pueden retirarse del comercio. Aquí elegimos los símbolos de divisas que han sido listados en Binance Perpetual Swap. Generalmente han sido probados y son reconocidos como monedas convencionales, que son relativamente seguras. Después de una simple detección, algunas monedas del índice fueron eliminadas y 134 monedas finalmente sobrevivieron.
En [1]: solicitudes de importación desde la fecha-hora-fecha de importación,fecha-hora tiempo de importación Importar pandas como pd importar numpy como np Importar matplotlib.pyplot como plt % de matplotlib en línea
En [144]:
##pares de negociación actuales
Información = solicitudes.obtención"https://fapi.binance.com/fapi/v1/exchangeInfo’)
símbolos = [s[
En [154]:
símbolos_f = lista(conjunto(filtro(lambda x: x[-4:] ==
En [155]: Imprimir (simbolos)
Luego, obtenemos sus precios de cierre diarios en el último año, y nos damos cuenta de que algunos símbolos de divisas sólo estuvieron en el mercado durante un corto período de tiempo, por lo que los datos necesitan unidad de procesamiento.
El beneficio final del índice es de aproximadamente 12 veces, es decir, si compras estos 134 símbolos de moneda en promedio el 1 de enero de 2021, el beneficio final de no hacer nada es de 12 veces, y se estima que más del 90% de las personas no superan el índice promedio. Entre ellos, los símbolos de moneda con la mayor disminución: ICP cayó en 93%, DODO cayó en 85% y LINA cayó en 75%. El aumento de casi cien veces: SOL, FTM, LUNA, MATIC, SAND, AXS. Entre ellos, AXS ha aumentado 168 veces y es el mayor caballo oscuro. La mediana aumentó 3 veces. Se puede decir que el índice está impulsado principalmente por las cadenas públicas y los juegos.
Este es un índice de ganancias desesperado. He trabajado duro y probado todo tipo de estrategias, y no he obtenido tanto beneficio como un año en el que no hice ningún esfuerzo adicional. Sin embargo, debe tenerse en cuenta que varios de los aumentos de la relación son demasiado grandes, y obviamente se desvían del índice. Si estos símbolos de moneda no se seleccionan al comienzo del año, la ganancia estará cerca de la mediana, que es mucho menos prominente.
En [157]:
#función para obtener K-línea en cualquier 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
En [164]:
df_all_s = pd.DataFrame ((index=pd.date_range)) start=
En el [165]: df_all_s.tail() #estructura de datos Fuera [1]:
En [174]:
df_all = df_all_s.fillna ((método=
En el [175]: #aumento mediano df_norm.median ((eje=1). gráfico ((tamaño de imagen=(12,4), cuadrícula=Verdadero); Fuera [1]:
En [168]: #ascenso y caída clasificando Imprimir (df_norm.iloc[-1].redondo (df_norm.iloc).sort_values (df_norm.iloc) y ordenar (df_dict)
En [317]: #el retiro máximo del precio actual en comparación con el precio más alto del año pasado imprimir ((((1-df_norm.iloc[-1]/df_norm.max (()) redondo ((2).sort_values (().to_dict (())
En [177]:
df_all_f = pd.DataFrame ((index=pd.date_range)) start=
En el [208]:
# no incluye nuevos símbolos
df = df_all_s[df_all_s.columns[~df_all_f.iloc[0].esnull()]]
Df = df.fillna ((método=
En [212]: #comparado con BTC (df.mean(eje=1)/df.BTCUSDT). gráfico ((figsize=(12,4), cuadrícula=Verdadero); Fuera [1]:
En [213]: # Usar el viejo motor de backtest clase Intercambio:
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)
En el [418]:
# Para una prueba de retroceso más precisa, rastrea la línea k de 1 hora
df_all_s = pd.DataFrame ((index=pd.date_range)) start=
En el [419]:
df = df_all_s[df_all_s.columns[~df_all_f.iloc[0].esnull()]]
Df = df.fillna ((método=
La prueba de retroceso seleccionó todos los símbolos de moneda que figuran en los contratos perpetuos de Binance el 1 de enero de 2021. El período de la línea K es de 1h, y el parámetro es que comienza a comprar cuando el monto de la posición es inferior al 5% del promedio y comienza a vender cuando supera el 5%. Cuando la prueba de retroceso es de todos los símbolos de moneda, el beneficio final de la estrategia es de 7.7 veces. Significativamente peor que el beneficio promedio de 13 veces. Eso también está en mi expectativa. Después de todo, esos símbolos de moneda que aumentaron cien veces son demasiado especiales, y la estrategia equilibrada los venderá a todos.
Si el backtest elige eliminar los 10 símbolos de divisas con el mayor aumento, y solo examina los símbolos de divisas relativamente mediocres, la ganancia final es de 4,8 veces, superando con creces el rendimiento promedio de 3,4 veces.
Si solo se giran los 3 símbolos de moneda con el aumento más alto, la ganancia final es de 373 veces, superando con creces el rendimiento promedio de 160 veces.
En el [494]:
# backtest de todos los símbolos
los símbolos = list(df.iloc[-1].sort_values() [:].index)
e = intercambio ((símbolos, tarifa=0,001, saldo inicial=10000)
Res_list = []
Avg_pct = 1/len (símbolos)
para la fila en df[símbolos].iterrows():
precios = fila [1]
En el caso de las entidades financieras, el importe total de las contribuciones de las entidades financieras a las cuentas de las entidades financieras es el mismo que el importe total de las contribuciones de las entidades financieras a las cuentas de las entidades financieras.
e.Actualización de los precios
para el símbolo en símbolos:
pct = e.cuenta[símbolo][
En el [495]:
Cuenta electrónica[
En el [496]: # backtest rendimiento de todos los símbolos (res.total/10000). gráfico (figsize=12,4), cuadrícula (true) df[símbolos].medio ((eje=1). gráfico ((tamaño de imagen=(12,4), cuadrícula=Verdadero); Fuera[496]:
En el [498]:
#reducir símbolos con un enorme aumento
los símbolos = list(df.iloc[-1].sort_values() [:-10].index)
e = intercambio ((símbolos, tarifa=0,001, saldo inicial=10000)
Res_list = []
Avg_pct = 1/len (símbolos)
para la fila en df[símbolos].iterrows():
precios = fila [1]
En el caso de las entidades financieras, el importe total de las contribuciones de las entidades financieras a las cuentas de las entidades financieras es el mismo que el importe total de las contribuciones de las entidades financieras a las cuentas de las entidades financieras.
e.Actualización de los precios
para el símbolo en símbolos:
pct = e.cuenta[símbolo][
En el [501]:
Cuenta electrónica[
En [499]: (res.total/10000). gráfico (figsize=12,4), cuadrícula (true) df[símbolos].medio ((eje=1). gráfico ((tamaño de imagen=(12,4), cuadrícula=Verdadero); En el caso de las empresas de servicios de telecomunicaciones:
En el [503]:
Solo prueba los símbolos con el mayor aumento
los símbolos = list(df.iloc[-1].sort_values()[-3:].index)
e = intercambio ((símbolos, tarifa=0,001, saldo inicial=10000)
Res_list = []
Avg_pct = 1/len (símbolos)
para la fila en df[símbolos].iterrows():
precios = fila [1]
En el caso de las entidades financieras, el importe total de las contribuciones de las entidades financieras a las cuentas de las entidades financieras es el mismo que el importe total de las contribuciones de las entidades financieras a las cuentas de las entidades financieras.
e.Actualización de los precios
para el símbolo en símbolos:
pct = e.cuenta[símbolo][
En el [504]:
Cuenta electrónica[
En el [505]: (res.total/10000). gráfico (figsize=12,4), cuadrícula (true) df[símbolos].medio ((eje=1). gráfico ((tamaño de imagen=(12,4), cuadrícula=Verdadero); Fuera[505]:
En general, 2021 fue un gran mercado alcista para las monedas copiadas y un año desolador para BTC. El valor de mercado de BTC ha caído del 70% al comienzo del año al 40% ahora, que ya es el nivel más bajo de la historia. Por lo tanto, la ganancia promedio de comprar símbolos de moneda copiada y mantenerlos en el año pasado fue mucho mayor que la de mantener BTC. Mirando hacia adelante a 2022, si piensas que todavía hay varios cientos de veces de monedas nacidas en el mercado actual en el futuro, puedes diversificar audazmente los símbolos de moneda que tienes y esperar pacientemente. Si eres particularmente optimista sobre algunos símbolos de moneda o el mercado promedio, puedes usar la estrategia de rotación para obtener ganancias excesivas sin pensar. Si estás de acuerdo en que las cosas se desarrollarán en la dirección opuesta cuando se vuelvan extremas, puedes pescar en el fondo de BTC para obtener mejores ganancias y seguridad.