天天看點

比特币下跌與加密貨币的關聯效應(附代碼)

作者:Pawel Lachowicz

前言

比特币價格突然下跌經常導緻相關加密貨币也随之波動。在今天的文章中,我們将對這一現象進行定量的研究分析。具體來說,我們将分析比特币在2021年3月13日達到61788美元之後進行抛售的市場情況,根據Coinbase Pro的資料,僅僅兩天後,比特币價格就跌至54568美元。

我們通過程式設計來計算加密資産的時間依賴fraction,1分鐘收盤價格的反應方式與比特币完全相同。這種方法與經典的線性相關方法不同,因為它捕捉的是瞬時價格運動,而不是價格點之間的長期關系。在最後我們得出結論,在某些交易時段,跟随比特币的資産比例可能高達95%至100%。我們還假設計算的平均瞬時相關性5分鐘滾動均值可以用作加密資産的短期(滞後)抛售風險度量。

資料整理

import ccrypto as cc
import numpy as np
import pandas as pd
import pickle
import matplotlib.pyplot as plt
 
grey = (.8,.8,.8)
 
# 下載下傳 BTC OHLC 
b = cc.getCryptoSeries('BTC', 'USD', freq='h', ohlc=True, exch='Coinbase', \
                            start_date='2021-03-13 00:00')
fig, ax1 = plt.subplots(1,1, figsize=(12,7))
ax1.plot(b.BTCUSD_H, 'b:')
ax1.plot(b.BTCUSD_C, 'k')
ax1.plot(b.BTCUSD_L, 'r:')
ax1.grid()
plt.title('BTC Price: Max %.2f, Min %.2f' % (b.BTCUSD_H.max(), b.BTCUSD_L.min()))
           
比特币下跌與加密貨币的關聯效應(附代碼)

接下來,我們在Coinbase上擷取一些當下熱點的加密貨币收盤價時間序列(1分鐘)。我們希望通過1分鐘的價格時間序列來了解價格變動的原因,盡可能準确地測量特定加密資産價格對比特币本身的最直接或間接的回報。

ccys = ['BTC', 'ETH', 'LTC', 'LINK', 'BCH', 'XLM', 'WBTC', 'AAVE', 'EOS', 'ATOM',
        'XTZ', 'DASH', 'GRT', 'MKR', 'SNX', 'ALGO', 'COMP', 'ZEC', 'ETC', 'YFI',
        'CGLD', 'OMG', 'UNI', 'UMA']
           
timeseries = {}
fi = True
plt.figure(figsize=(12,7))
for ccy in ccys:
    timeseries[ccy] = cc.getCryptoSeries(ccy, 'USD', freq='m', exch='Coinbase', \
                            start_date='2021-03-15 00:00')

    if fi:
        df = timeseries[ccy]
        fi = False
    else:
        df = pd.merge(left=df, right=timeseries[ccy], how='left', 
                      left_index=True, right_index=True)
        
    plt.plot((timeseries[ccy]-timeseries[ccy].mean())/timeseries[ccy].std(), color=grey)
plt.plot((timeseries['BTC']-timeseries['BTC'].mean())/timeseries['BTC'].std(), 
         color='r', label='Bitcoin')
plt.legend(loc=3)
plt.grid()
plt.ylabel('Standardised Price')
plt.xlabel('Date/Time')
plt.savefig("/Users/pawel/Desktop/trig2.png", bbox_inches='tight')
           

對價格序列進行标準化:

比特币下跌與加密貨币的關聯效應(附代碼)

從上圖直覺感受,不是每一種加密貨币都像比特币那樣頻繁交易。有趣的是,交易方向與比特币模式非常一緻。

将資料轉換為1分鐘收益序列:

df_ret = df.pct_change(periods=1)
 
mask = df_ret.isna()
df_ret[mask] = np.nan 
 
df_ret.dropna(how='all', axis=0, inplace=True)
 
del df_ret['GRTUSD']
del df_ret['ALGOUSD']
del df_ret['CGLDUSD']
del df_ret['UMAUSD']
           

通過人工檢視收益矩陣表,我們去除了4個資産。由于缺乏足夠的資料而導緻時間序列為0。

瞬時相關性

df_ret_dir = df_ret.copy()

display(df_ret_dir.head(10))
           
比特币下跌與加密貨币的關聯效應(附代碼)

接下來進行資料轉換,這是最重要的一部分!我們逐行移動存儲1分鐘收益率的DataFrame。對于每一行,我們讀出第一個單元格的值。如果小于0,則将btc_sign指派為負,否則指派為正。接下來,覆寫整行,對給定加密貨币的收益率和比特币的收益率進行符号比較。

for i in range(0, df_ret.shape[0]):
    row = df_ret.iloc[i]
    btc_sign = -1 if df_ret.iloc[i][0] < 0.0 else 1
    df_ret_dir.iloc[i] = np.sign(row) == btc_sign
           

我們可以看到給定的資産是否遵循比特币顯示的交易方向。我們可以将其稱為加密貨币收益率與比特币之間的瞬時相關性。

最後,我們得到df_ret_dir DataFrame轉換成如下形式:

display(df_ret_dir.head(10))
           
比特币下跌與加密貨币的關聯效應(附代碼)

3、研究結論

對df_ret_dir DataFrame的每一個時間戳(行)進行如下計算:

fraction = df_ret_dir.astype(int).sum(axis=1) / df_ret_dir.shape[1]

display(pd.DataFrame(fraction, columns=['Fraction']))
           
比特币下跌與加密貨币的關聯效應(附代碼)
fig, ax1 = plt.subplots(1,1, figsize=(12,9))
 
for ccy in ret.columns.tolist():
    ax1.plot((df[ccy]-df[ccy].mean())/df[ccy].std(), color=grey)
    
ax1.plot((df['BTCUSD']-df['BTCUSD'].mean())/df['BTCUSD'].std(), 'r-', label='1-min BTCUSD')
ax1.grid()
ax1.set_ylabel('Normalised Price')
ax1.set_xlabel('Date and Time')
ax2 = ax1.twinx()
ax2.plot(ratio.iloc[1:], '-', color='#f09547', alpha=0.35, label='1-min Fraction')
ax2.plot(fraction.rolling(5).mean(), color='#f09547', label='5-min rolling average fraction')
ax2.set_ylabel('Fraction')
ax2.legend(loc=4)
ax1.legend(loc=3)
ax1.set_xlim([pd.to_datetime('2021-03-15 00:00'), pd.to_datetime('2021-03-15 13:00')])
plt.savefig("/Users/pawel/Desktop/trig6.png", bbox_inches='tight')
           
比特币下跌與加密貨币的關聯效應(附代碼)

大家看上圖比特币突然抛售期間。在某些交易時段,BTC的資産比例可能高達95%甚至100%(橙色曲線)。我們假設計算的平均瞬時相關性5分鐘滾動均值可以用作加密資産的短期(滞後)抛售風險度量。

2021年3月15日10:20,3分鐘滾動平均fraction:

fig, ax1 = plt.subplots(1,1, figsize=(12,7))
 
for ccy in ret.columns.tolist():
    ax1.plot((df[ccy]-df[ccy].mean())/df[ccy].std(), color=grey)
    
ax1.plot((df['BTCUSD']-df['BTCUSD'].mean())/df['BTCUSD'].std(), 'r-', label='1-min BTCUSD')
ax1.grid()
ax1.set_ylabel('Normalised Price')
ax1.set_xlabel('Date and Time')
ax2 = ax1.twinx()
ax2.plot(fraction.rolling(3).mean(), color='#f09547', label='3-min rolling average ratio')
ax2.set_ylabel('Fraction')
ax2.legend(loc=1)
ax1.legend(loc=3)
ax1.set_ylim([-2.1, 0])
ax1.set_xlim([pd.to_datetime('2021-03-15 08:30'), pd.to_datetime('2021-03-15 13:00')])
plt.title('Max Fraction = %.1f%% at %s' % 
          (100*(fraction[fraction.index > '2021-03-15 08:30']).max(), 
           fraction[fraction.index > '2021-03-15 08:30'].index[fraction[fraction.index > 
                                                               '2021-03-15 08:30'].argmax()]))
           

95%的資産同時(或者可能是)受比特币影響:

比特币下跌與加密貨币的關聯效應(附代碼)

最可能的解釋可能是與緊跟BTC/XXX空間價格波動的高頻交易算法有關,并在不到60秒的時間尺度上做出反應。

比特币下跌與加密貨币的關聯效應(附代碼)

關于Python金融量化

比特币下跌與加密貨币的關聯效應(附代碼)

專注于分享Python在金融量化領域的應用。加入知識星球,可以免費擷取30多g的量化投資視訊資料、量化金融相關PDF資料、公衆号文章Python完整源碼、量化投資前沿分析架構,與部落客直接交流、結識圈内朋友等。

比特币下跌與加密貨币的關聯效應(附代碼)

繼續閱讀