DevGang
Авторизоваться

Построение торговой стратегии Bitcoin Crashes с помощью Python

Криптовалюты могут быть волатильным и непредсказуемым рынком, стоимость отдельных монет которого резко колеблется с течением времени. Однако, несмотря на присущие им риски, многих инвесторов и трейдеров привлекают потенциальные выгоды, которые предлагают криптовалюты. Если вы рассматриваете возможность инвестирования в криптовалюты, одна из стратегий, которую вы могли бы рассмотреть, заключается в выявлении монет, которые, как правило, выигрывают в определенных рыночных условиях.

Один из способов сделать это - протестировать стратегию торговли криптовалютой. Обратное тестирование включает в себя моделирование торговой стратегии на исторических данных, чтобы определить ее вероятную эффективность в будущем. Анализируя, как конкретная монета работала в различных рыночных условиях в прошлом, вы можете получить представление о том, как она может работать в аналогичных условиях в будущем.

Одно рыночное условие, которое вы, возможно, захотите учитывать при поиске криптовалют, которые имеют тенденцию превосходить, — это цена биткойнов. Биткойн часто рассматривается как флагман для рынка криптовалют в целом, и на производительность других монет может влиять цена биткойна. Таким образом, вы можете искать монеты, которые, как правило, лучше, когда цена биткойна падает.

Чтобы найти эти монеты, вы можете протестировать торговую стратегию, которая включает в себя покупку и удержание трех лучших монет, когда цена биткойна падает, и удержание их в течение нескольких недель. Анализируя производительность этих 3 монет в этих условиях, вы можете определить монеты, которые, как правило, лучше работают в периоды рыночного стресса.

Ключевые особенности проекта

  • Загрузите 100 лучших монет с CoinMarketCap.
  • Загрузите ежедневные цены за последний год для этих 100 лучших монет и рассчитайте ежедневную доходность.
  • Узнайте дни, когда цена биткойна значительно снизилась.
  • В эти дни краха найдите 3 самые эффективные монеты, создайте портфель с равными весами и держите его в течение 7 дней.

Прежде чем приступить к работе, вам понадобится следующее:

  • Python: установите версию 3.9.7.
  • Блокнот Jupyter: установите индивидуальную версию Anaconda для вашей операционной системы, она поставляется с уже установленным Jupyter.

Как только это настроено, мы можем продолжить реализацию.

Давайте загрузим пакеты, которые нам понадобятся для всего проекта.

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import requests
import yfinance as yf

Получите 100 лучших символов монет

Во-первых, мы определим функцию для получения списка 100 лучших символов монет из CoinMarketCap. Затем мы можем использовать этот список для получения ежедневных цен на эти монеты с помощью пакета yfinance от Yahoo Finance.

def get_top_100_coins():

    url = 'https://web-api.coinmarketcap.com/v1/cryptocurrency/listings/latest'

    cryptos_list = []

    for start in range(1, 20000, 5000):

        params = {
            'start': start,
            'limit': 5000,
        }

        r = requests.get(url, params=params)
        
        data = r.json()

        for number, item in enumerate(data['data']):

            cryptos_list.append(item['symbol'])

    cryptos_list = [i+'-USD'for i in cryptos_list[:100] if i not in ['USDT', 'USDC', 'DAI', 'PAXG',
                                                                     'TUSD', 'USDP', 'GUSD', 'FEI']]

    return cryptos_list

На этом шаге мы определяем url для нашего запроса как последние списки криптовалют от CoinMarketCap. Затем мы создаем пустой список под названием cryptos_list, который мы будем использовать для хранения имен символов для каждой криптомонеты.

Далее мы проходим по списку и делаем запрос на пакеты по 5000 символов за раз. Для каждого ответа мы добавляем в cryptos_list только данные символа. Это позволяет нам собрать все доступные символы на CoinMarketCap, но затем мы ограничиваем список 100 лучшими монетами и исключаем стабильные монеты, чтобы предотвратить искажение или искажение наших результатов.

Загрузите ежедневные цены на все символы

cryptos_list = get_top_100_coins()

crypto_prices_df = yf.download(cryptos_list, start='2022-01-01', end='2022-12-20')

crypto_prices_df = crypto_prices_df.stack()

crypto_prices_df

Используя crypto_list, мы загружаем ежедневные цены на все монеты из Yahoo Finance и складываем их в Multi-Index, используя метод .stack() в Pandas DataFrame. В результате получается DataFrame с ежедневными ценами и объемами для каждой монеты в каждый день.

Рассчитайте ежедневный доход для каждой монеты, а также 7-дневный доход в будущем

crypto_prices_df['ret'] = crypto_prices_df.groupby(level=1)['Adj Close'].transform(lambda x: x.pct_change())

crypto_prices_df['fut_ret_7d'] = crypto_prices_df.groupby(level=1)['Adj Close'].transform(lambda x: x.pct_change(7).shift(-7))

crypto_prices_df

Чтобы рассчитать ежедневную доходность и будущую доходность за 7 дней, мы группируем данные по уровню 1, который группирует данные на уровне монет. Затем мы выбираем столбец Adj Close и используем лямбда-функцию для расчета нужной метрики. Для будущей доходности мы рассчитываем доходность соответствующего дня и сдвигаем ее назад на желаемое количество дней. Наконец, мы используем метод .xs() кадра данных Pandas для выбора данных биткойнов из мультииндекса.

Выберите дни краха, когда доходность биткойнов была ниже -10%

btc = crypto_prices_df.xs('BTC-USD', level=1)

crashes = btc[btc['ret']<-0.1].index.tolist()

crashes

На этом шаге мы выбираем все строки, в которых доходность биткойнов меньше -10%. Затем мы выбираем индекс данных (даты) и преобразуем его в список.

В каждый день краха биткойнов выберите монеты с 3 лучшими доходами и рассчитайте средний доход

top_3_coins = {}

btc = {}

for i in crashes:

    crash = crypto_prices_df.xs(i, level=0)
    
    crash_btc = crypto_prices_df.xs(i, level=0).xs('BTC-USD')

    top_3_coins[i.strftime('%Y-%m-%d')] = crash.sort_values('ret', ascending=False)['fut_ret_7d'][:3].mean()
    
    btc[i.strftime('%Y-%m-%d')] = crash_btc['fut_ret_7d']

df = pd.concat([pd.DataFrame(top_3_coins, index=pd.Series(0)), pd.DataFrame(btc, index=pd.Series(0))]).T

df.columns = ['top_3_coins_7day_future', 'btc_7day_future']

df

Мы создаем два пустых словаря: один для 7-дневной будущей доходности биткойнов, а другой — для средней 7-дневной будущей доходности трех лучших монет. Затем мы выбираем дату сбоя и получаем 7 дней будущего возврата. Наконец, мы объединяем среднюю будущую доходность 3 лучших монет за 7 дней и среднюю будущую доходность биткойнов за 7 дней.

Расчет среднего дохода по этим 6 авариям

df.mean().to_frame('7_days_future_return')

В заключение мы рассчитали средний 7-дневный будущий доход для всех 6 аварий. Наш анализ показал, что портфель из трех самых эффективных монет в день краха превзошел биткойн в течение следующих 7 дней.

Вывод

В этом анализе мы изучили производительность различных криптовалют во время обвалов цен на биткойн. Мы определили даты, когда биткойн испытал крах (определяемый как доход менее -10%), и получили 7 дней будущего дохода для каждого падения. Мы также рассчитали средний 7-дневный будущий доход для трех самых эффективных монет в каждую дату краха.

Наш анализ показал, что портфель из трех самых эффективных монет в день краха превзошел биткойн в течение следующих 7 дней. Это говорит о том, что, возможно, стоит рассматривать эти монеты как потенциальные инвестиции в периоды волатильности рынка.

#Начинающим #Python
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться