
В предыдущей статье мы рассмотрели распространенное явление на рынке криптовалют: большинство криптовалют, особенно те, которые следуют за колебаниями цен Bitcoin и Ethereum, часто демонстрируют тенденцию к одновременному росту и падению. Этот феномен показывает их высокую корреляцию с основными валютами. Однако степень корреляции между различными криптовалютами различается. Итак, как эта разница в корреляции влияет на рыночную эффективность каждой валюты? В этой статье мы рассмотрим этот вопрос на примере бычьего рынка второй половины 2023 года.
Рынок криптовалют известен своей волатильностью и неопределенностью. Биткоин и Эфириум, как два гиганта рынка, часто играют ведущую роль в ценовых тенденциях. Для поддержания рыночной конкурентоспособности и торговой активности большинство небольших или развивающихся цифровых валют стремятся поддерживать определенную степень ценовой синхронизации с этими основными валютами, особенно с валютами, созданными сторонами проекта. Эта синхронизация отражает психологические ожидания и торговые стратегии участников рынка, что является важным фактором при разработке количественных торговых стратегий.
В области количественной торговли измерение корреляции осуществляется с помощью статистических методов. Наиболее часто используемым показателем является коэффициент корреляции Пирсона, который измеряет степень линейной связи между двумя переменными. Вот некоторые основные концепции и методы расчета:
Коэффициент корреляции Пирсона (обозначается \(r\)) варьируется от -1 до +1, где +1 указывает на идеальную положительную корреляцию, -1 указывает на идеальную отрицательную корреляцию, а 0 указывает на отсутствие линейной корреляции. Коэффициент рассчитывается следующим образом:
\(r = \frac{\sum_{i=1}^{n} (X_i - \bar{X})(Y_i - \bar{Y})}{\sqrt{\sum_{i=1}^{n} (X_i - \bar{X})^2} \sqrt{\sum_{i=1}^{n} (Y_i - \bar{Y})^2}}\)
Здесь \(X_i\) и \(Y_i\) — наблюдаемые значения двух случайных величин, а \(\bar{X}\) и \(\bar{Y}\) — средние значения двух случайных величин соответственно. Используя пакеты Python, связанные с научными вычислениями, очень удобно рассчитывать корреляцию.
В этой статье собраны данные Binance по K-line за 4 часа за весь 2023 год и выбраны 144 валюты, которые были включены в листинг 1 января. Конкретный код загружаемых данных выглядит следующим образом:
import requests
from datetime import date,datetime
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
ticker = requests.get('https://fapi.binance.com/fapi/v1/ticker/24hr')
ticker = ticker.json()
sort_symbols = [k['symbol'][:-4] for k in sorted(ticker, key=lambda x :-float(x['quoteVolume'])) if k['symbol'][-4:] == 'USDT']
def GetKlines(symbol='BTCUSDT',start='2020-8-10',end='2023-8-10',period='1h',base='fapi',v = 'v1'):
Klines = []
start_time = int(time.mktime(datetime.strptime(start, "%Y-%m-%d").timetuple()))*1000 + 8*60*60*1000
end_time = min(int(time.mktime(datetime.strptime(end, "%Y-%m-%d").timetuple()))*1000 + 8*60*60*1000,time.time()*1000)
intervel_map = {'m':60*1000,'h':60*60*1000,'d':24*60*60*1000}
while start_time < end_time:
time.sleep(0.5)
mid_time = start_time+1000*int(period[:-1])*intervel_map[period[-1]]
url = 'https://'+base+'.binance.com/'+base+'/'+v+'/klines?symbol=%s&interval=%s&startTime=%s&endTime=%s&limit=1000'%(symbol,period,start_time,mid_time)
res = requests.get(url)
res_list = res.json()
if type(res_list) == list and len(res_list) > 0:
start_time = res_list[-1][0]+int(period[:-1])*intervel_map[period[-1]]
Klines += res_list
if type(res_list) == list and len(res_list) == 0:
start_time = start_time+1000*int(period[:-1])*intervel_map[period[-1]]
if mid_time >= end_time:
break
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')
return df
start_date = '2023-01-01'
end_date = '2023-11-16'
period = '4h'
df_dict = {}
for symbol in sort_symbols:
print(symbol)
df_s = GetKlines(symbol=symbol+'USDT',start=start_date,end=end_date,period=period)
if not df_s.empty:
df_dict[symbol] = df_s
df_close = pd.DataFrame(index=pd.date_range(start=start_date, end=end_date, freq=period),columns=df_dict.keys())
for symbol in symbols:
df_s = df_dict[symbol]
df_close[symbol] = df_s.close
df_close = df_close.dropna(how='any',axis=1)
Сначала, после нормализации данных, мы рассчитали средний индекс роста и падения цен. Мы видим, что в 2023 году наблюдаются две волны рыночных условий, одна из которых — большой рост в начале года, а другая — большой рост с октября. Пик индекса.
df_norm = df_close/df_close.fillna(method='bfill').iloc[0] #归一化
total_index = df_norm.mean(axis=1)
total_index.plot(figsize=(15,6),grid=True);

Pandas имеет встроенный расчет корреляции. Корреляция с ценой BTC показана на рисунке ниже. Большинство валют имеют положительную корреляцию, что означает, что они следуют за ценой BTC, в то время как некоторые валюты имеют отрицательную корреляцию. Это считается аномалией на рынке цифровой валюты.

corr_symbols = df_norm.corrwith(df_norm.BTC).sort_values().index
Здесь мы грубо разделяем валюты на две группы. Первая группа состоит из 40 валют, которые наиболее коррелируют с ценами BTC, а вторая группа состоит из валют, которые наименее коррелируют с ценами BTC. Индекс двух групп представляет собой среднюю длинную позиция в первой группе и короткая позиция во второй группе. Связь между колебаниями цен и корреляцией с BTC можно рассчитать. Код и результаты следующие:
(df_norm[corr_symbols[-40:]].mean(axis=1)-df_norm[corr_symbols[:40]].mean(axis=1)).plot(figsize=(15,6),grid=True);

Результаты показывают, что валюты с более сильной корреляцией с ценами BTC демонстрируют лучший рост, а короткие продажи валют с низкой корреляцией также играют хорошую роль хеджирования. Неточность здесь в том, что для расчета корреляции используются будущие данные. Далее данные делятся на две группы: одна для расчета корреляции, а другая для расчета доходности после хеджирования. Результаты показаны на рисунке ниже, а вывод все тот же.
Поскольку Bitcoin и Ethereum являются лидерами рынка, их ценовые колебания часто оказывают огромное влияние на весь рынок. Когда цены на биткоины растут, рыночные настроения обычно становятся оптимистичными, и многие инвесторы склонны следовать рыночным тенденциям. Инвесторы могут расценить это как сигнал о том, что весь рынок растет, и начать скупать другие валюты. Монеты, которые тесно связаны с основными валютами, могут испытывать аналогичный рост цен из-за коллективного поведения участников рынка. В это время ожидания рынка относительно ценовых тенденций иногда могут стать самоисполняющимся пророчеством. Валюты с отрицательной корреляцией с Bitcoin уникальны. Возможно, что их фундаментальные показатели ухудшились или они больше не находятся в поле зрения основных инвесторов. Возможно, даже существует рынок, высасывающий кровь для Bitcoin — рынок отказался от них. Они гонитесь за монетами, которые могут поспеть за прибылью.
corr_symbols = (df_norm.iloc[:1500].corrwith(df_norm.BTC.iloc[:1500])-df_norm.iloc[:1500].corrwith(total_index[:1500])).sort_values().index

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