Заключение и будущая стратегия на 2021 год.ipynb
2021 год подходит к концу, и горячие точки от DEFI до GAMEFI появляются одна за другой, и общий рынок все еще находится на бычьем рынке. Оглядываясь назад, сколько вы заработали в 2021 году? Какую возможность вы упустили? Есть ли какие-либо успешные инвестиции? Недавно я просмотрел историю котировок рынка прошлого года и нашел неожиданно простую стратегию получения прибыли, но это мультивалютный индекс.
На платформах перечислено слишком много валютных символов, и многие из них обречены быть неизвестными и могут даже быть изъяты из торговли. Здесь мы выбираем валютные символы, которые были перечислены на Binance Perpetual Swap. Они, как правило, были протестированы и признаны основными валютами, которые относительно безопасны. После простого скрининга некоторые индексные валюты были удалены, и 134 валюты, наконец, выжили.
В [1]: запросы на импорт от даты времени даты ввоза, даты времени Время импорта Импорт панды как pd импортировать нумпи как np Импортировать matplotlib.pyplot как plt % матрицы в строке
В [144]:
##текущая торговая пара
Информация = запросы.получать"https://fapi.binance.com/fapi/v1/exchangeInfo’)
символы = [s[
В [154]:
symbols_f = list(set(filter(lambda x: x[-4:] ==
В [155]: print(len(символы_f))
Затем мы получаем их ежедневные цены за последний год, и мы замечаем, что некоторые валютные символы были на рынке только в течение короткого периода времени, поэтому данные нуждаются в обработке унитации.
Окончательная прибыль индекса примерно в 12 раз, то есть, если вы покупаете эти 134 валютных символа в среднем 1 января 2021 года, конечная прибыль от ничего не делать в 12 раз, и, по оценкам, более 90% людей не превосходят средний индекс. Среди них, валютные символы с самым большим снижением: ICP упал на 93%, DODO упал на 85%, и LINA упала на 75%. Увеличение почти в сто раз: SOL, FTM, LUNA, MATIC, SAND, AXS. Среди них AXS увеличился в 168 раз и является самой большой темной лошадью. Медиана увеличилась в 3 раза. Можно сказать, что индекс в основном движится публичными сетями и играми. Чтобы предотвратить предвзятость выживания, за исключением вновь перечисленных валютных символов в течение периода, он также достиг прибыли почти в 11 раз. Это просто держание BTC.
Это отчаянное соотношение прибыли. Я много работал и пробовал всевозможные стратегии, и я не получал столько прибыли, сколько в год, когда я не прилагал никаких дополнительных усилий. Однако следует отметить, что несколько увеличений соотношения слишком велики и, очевидно, отклоняются от индекса. Если эти валютные символы не выбраны в начале года, прибыль будет близка к медиане, которая гораздо менее заметна.
В [157]:
#функция для получения K-линии в любом периоде
def GetKlines ((символ=
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
В [164]:
df_all_s = pd.DataFrame ((index=pd.date_range ((start=
В [165]: df_all_s.tail() # структура данных Выход[165]:
В [174]:
df_all = df_all_s.fillna ((method=
В [175]: #медианное увеличение df_norm.median ((ось=1).плот ((размер фига=(12,4), сетка=правда); Выход[175]:
В [168]: # подъем и падение сортировки print ((df_norm.iloc[-1].round ((2).sort_values().to_dict())
В [317]: #максимальный вывод текущей цены по сравнению с самой высокой ценой за последний год print ((((1-df_norm.iloc[-1]/df_norm.max()).round(2).sort_values().to_dict())
В [177]:
df_all_f = pd.DataFrame ((index=pd.date_range ((start=
В [208]:
# не включает новые символы
df = df_all_s[df_all_s.columns[~df_all_f.iloc[0].isnull() ]
df = df.fillna ((метод=
В [212]: #по сравнению с BTC (df.mean(axis=1)/df.BTCUSDT).graph ((figsize=(12,4),grid=True); Выход[212]:
В [213]: # Используйте старый тест-двигатель класс Обмен:
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)
В [418]:
#для более точного обратного теста, сканируйте 1-часовую K-линию
df_all_s = pd.DataFrame ((index=pd.date_range ((start=
В [419]:
df = df_all_s[df_all_s.columns[~df_all_f.iloc[0].isnull() ]
df = df.fillna ((метод=
В обратном тесте были отобраны все валютные символы, перечисленные на контрактах Binance Perpetual 1 января 2021 года. Период K-линии составляет 1h, и параметр заключается в том, что начать покупать, когда сумма позиции составляет менее 5% от среднего, и начать продавать, когда она превышает 5%. При обратном тесте всех валютных символов, окончательная прибыль стратегии составляет 7,7 раза. Значительно хуже средней прибыли в 13 раз. Это также в моем ожидании. В конце концов, те валютные символы, которые увеличились в сто раз, слишком особенны, и сбалансированная стратегия продаст их все.
Если в обратном тесте будет удалено 10 валютных символов с наибольшим увеличением, и будут рассмотрены только относительно посредственные валютные символы, конечная прибыль составит 4,8 раза, что значительно превышает среднюю производительность в 3,4 раза.
Если вращаются только три валютных символа с наибольшим увеличением, конечная прибыль составляет 373 раза, что намного превышает среднюю производительность в 160 раз.
В [494]:
#Backtest всех символов
символы = list(df.iloc[-1].sort_values() [:].index)
e = обменные символы, плата = 0,001, первоначальный_баланс = 10000)
res_list = []
avg_pct = 1/len (символы)
для строки в df[символы].iterrows():
цены = строка[1]
сумма = e.account[
В [495]:
e.счет[
В [496]: #Backtest производительность всех символов (res.total/10000).плот ((figsize=(12,4), сетка = True); df[символы].средняя ((ось=1).плот ((размер фига=(12,4), сетка=Правда); Выход[496]:
В [498]:
# уменьшить символы с огромным увеличением
символы = list ((df.iloc[-1].sort_values() [:-10].index)
e = обменные символы, плата = 0,001, первоначальный_баланс = 10000)
res_list = []
avg_pct = 1/len (символы)
для строки в df[символы].iterrows():
цены = строка[1]
сумма = e.account[
В [501]:
e.счет[
В [499]: (res.total/10000).плот ((figsize=(12,4), сетка = True); df[символы].средняя ((ось=1).плот ((показать размер=(12,4), сетка=Правда); Выход из строя[499]:
В [503]:
# только проверьте символы с самым высоким увеличением
символы = list(df.iloc[-1].sort_values()[-3:].index)
e = обменные символы, плата=0,001, начальное_остаток=10000)
res_list = []
avg_pct = 1/len (символы)
для строки в df[символы].iterrows():
цены = строка[1]
сумма = e.account[
В [504]:
e.счет[
В [505]: (res.total/10000).плот ((figsize=(12,4), сетка = True); df[символы].средняя ((ось=1).плот ((размер фига=(12,4), сетка=Правда); Выход[505]:
В целом, 2021 год был большим бычьим рынком для копийных валют и пустынным годом для BTC. Рыночная стоимость BTC упала с 70% в начале года до 40% сейчас, что уже является самым низким уровнем в истории. Поэтому средняя прибыль от покупки копирайтных валютных символов и их хранения в прошлом году была намного выше, чем от хранения BTC. Ожидая 2022 года, если вы думаете, что в будущем на текущем рынке еще несколько сотен раз родится валюта, вы можете смело диверсифицировать валютные символы, которые вы держите, и терпеливо ждать. Если вы особенно оптимистичны по отношению к нескольким валютным символам или среднему рынку, вы можете использовать стратегию вращения, чтобы получить избыточную прибыль без раздумий. Если вы согласитесь, что вещи будут развиваться в противоположном направлении, когда они станут экстремальными, вы можете рыбачить вниз BTC для лучшей прибыли и безопасности.