币种的涨跌与比特币的相关性关系

Author: 小草, Created: 2023-11-16 16:53:56, Updated: 2023-11-17 21:36:53

img

在之前的文章中,我们探讨了数字货币市场中的一个普遍现象:多数数字货币,尤其是那些跟随比特币和以太坊的价格波动,常常表现出同涨同跌的趋势。这种现象揭示了它们与主流币种之间的高度相关性。但是,不同的数字货币之间的相关性程度也有所不同。那么,这种相关性的差异究竟如何影响各个币种的市场表现呢?在本文中,我们将以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科学计算相关包,可以很方便计算相关性。

数据收集

本文收集了币安2023年全年的4hK线数据,选取了1月1号就上架的144个币种。具体下载数据代码如下:

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年有两波行情,其中年初一波大涨,还有就是10月份开始的大涨,目前基本上处于指数的高点。

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);

img

相关性分析

pandas自带相关性计算,和BTC价格相关性和最弱的如下图,大部分币种的相关性为正,意味着它们跟随BTC的价格,而还有部分币种相关性为负,这在数字货币行情中,算是一种异常。

img

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);

img

结果表明与BTC价格相关性更强的币种涨幅更好,并且做空相关性低的币种也起到了很好的对冲作用。这里不严谨的地方是计算相关性时使用了未来数据,下面再把数据分为两组,一组计算相关性,另一组用来计算对冲后的收益,结果如下图所示,结论依然相同。

比特币和以太坊作为市场的领导者,其价格走势往往会对整个市场产生巨大影响。当这些比特币种价格上涨时,市场情绪通常会变得乐观,许多投资者倾向于跟随市场趋势。投资者可能会将此视为整个市场上涨的信号,并开始购买其他币种。由于市场参与者的集体行为,与主流币种高度相关的币种可能会经历类似的价格涨幅。这时市场对于价格走势的预期有时会成为自我实现的预言。而与比特币相关性为负的币种,则是特立独行的 ,可能它们的基本面转差或者已经不在主流投资者的视野范围内,甚至可能存在比特币的吸血行情——市场抛弃了它们去追逐能够跟上涨幅的币种。

corr_symbols = (df_norm.iloc[:1500].corrwith(df_norm.BTC.iloc[:1500])-df_norm.iloc[:1500].corrwith(total_index[:1500])).sort_values().index 

img

总结

本文皮尔逊相关系数,文章揭示了币种间的相关性程度。文章展示了如何获取数据计算币种间的相关性,并利用这些数据来评估市场趋势。揭示了数字货币市场中价格波动的同步性不仅是市场心理和策略的反映,还可以通过科学的方法来量化和预测。这对于量化交易策略的设计尤为重要。

本文的思路可供扩展的地方还有很多,如可以计算滚动相关性,分别计算上涨和下跌时的相关性等等,可以分析出更多的有效信息。


More

mztcoin 好,相关性分析可以与之前的做空超涨做多超跌策略结合一下