🚫
免责声明:投资有风险,本文仅提供思路,不承担投资成功或者失败带来的任何后果。
前几天在朋友圈里提到了灰度资本和其比特币基金 GBTC。有几个感兴趣的朋友问我该不该用养老金投资 GBTC,以及怎么投。对于这类问题,我一概的回答都是:投资有风险,入市需谨慎。
话是这么说,因为我自己的确也打算把 Roth IRA 的 20% 放入加密货币基金,所以趁着圣诞假期,稍微用 pandas 做了一点点不那么成熟的研究。
在我摆出我的研究结果和策略之前,我想说:
-
如果你长线不看好主流的加密货币,那么这篇文章就权当技术文章看好了,里面的思路也适合其它金融产品的分析。
-
如果你长线看好主流的加密货币,并且愿意自己持有加密货币(放在自己的钱包里或者信得过的交易所),那么你应该选择合适的机会买入加密货币本身,而不是灰度资本发行的基金。本文也就权当技术文章看好了。
-
如果你长线看好主流的加密货币,但因为税务的原因或者担心持有风险的原因,不愿意自己持有或者增持加密货币,想看看相关的基金,那么本文的思路也许对你会有帮助。
❗
注意:目前比特币处在历史高位,近期又逢 SEC 重拳出击 Ripple,整个加密货币市场短线有较大的回调风险,切勿投入过多资金追高。
背景知识
灰度资本是一家专门投资加密货币的基金。其旗下管理的基金产品可以在其官网:https://grayscale.co/gaap-metrics 上看到:
其中,管理规模最大的,也是最著名的,要属 Grayscale Bitcoin Trust。该基金的投资者在投资锁定期结束后(目前是 6 个月),可以选择在二级市场(OTC)通过卖出持有的 GBTC 退出。从上图可以看到,GBTC 12/24/2020 的收盘价是 $27.32,而
每份 GBTC 里含有 0.00095059 个比特币(NAV - Net Asset Value per share)
,以收盘的 BTC-USD 实时价格来看,是 $22.56(灰度官网按 $22.36 计算,这是因为 BTC 是 24 小时交易,而 GBTC 跟随 Nasdaq 交易时间而交易,所以 BTC「收盘价」灰度和雅虎财经的认定不太一样),大致溢价 17.5%。Grayscale Bitcoin Trust 募集到的所有钱(或者比特币),除了扣除管理费之外,其它的都会直接购买比特币,并不会购买其它资产,所以理论上,GBTC 的交易价格应该围绕着 NAV 上下波动,不会偏离太多。
有人可能会质疑了,我直接去买 BTC 不香嘛?干嘛要买 GBTC,被收接近 1/5 的智商税?这里有很多原因:
-
交易风险。就像你可以私下交易购买比特币,获得远比在币安,coinbase 这样的交易所低很多的价格,但你依旧愿意花更高的价格在这些交易所交易一样。
-
可购买性。有些投资账户里的钱是不能直接购买加密货币的,比如你个人的养老金账号。
-
税收。在美国任何投资收入都是会被课以重税的,买入并卖出不超过一年,税收和其它收入并在一起按收入税计算,随随便便超 25%。
❗
注意:
GBTC 不是 ETF,目前灰度发行的任何可在二级市场交易的基金都不是 ETF,其投资风险非常大
。
好,背景就介绍这么多,更多细节请自行 Google 或者在灰度官网上查询,本人跟灰度资本无关,也不持有任何灰度基金,仅出于实验目的在二级市场上买过少许 GBTC。
对于 GBTC,什么是好的交易机会?
作为一个铁骨铮铮的程序员,看到这样的问题,心中自然会想:那么,我们拿一下所有的历史数据,看看 NAV 和币价之间有什么关系不就可以了么?
要实现这样的代码很简单,我们需要一个 python 的库:
yfinance
,它用于获取某只股票(基金,加密货币)在 Yahoo Finance 上的历史数据:
import yfinance as yf
def get_ticker_history(ticker, period='3y'):
t = yf.Ticker(ticker)
return t.history(period=period)
然后,你可以在 Jupyter 里这样调用来获取
BTC
的历史价格(返回的是一个 pandas DataFrame):
这个数据可以直接用
mplfinance
库可视化成大家喜闻乐见的 candlestick chart:
同样的,我们也可以拿
GBTC
的数据,并可视化:
可以看到,二者的走势有极强的相关性。简单计算一下二者收盘价和涨跌幅度的相关性:
def get_close_prices(crypto, stock):
df = pd.DataFrame({'Crypto Close': crypto['Close'], 'Stock Close': stock['Close']}).dropna()
comp = df.pct_change().dropna()
return pd.DataFrame({'Crypto Close': df['Crypto Close'],
'Stock Close': df['Stock Close'],
'Crypto Percent': comp['Crypto Close'],
'Stock Percent': comp['Stock Close'],
'Stock Gain': comp['Stock Close'] - comp['Crypto Close'],
'Stock Outperform': comp['Stock Close'] > comp['Crypto Close'],
}).dropna()
可以得到价格(收盘价)相关系数是 0.962,非常强的相关性,涨跌幅的相关系数是 0.7097,比较强的相关性。
你也许会好奇,究竟 GBTC 走势比 BTC 更好,还是更差呢?五年的数据告诉我们,有 599 天 GBTC 的涨幅高于 BTC,有 659 天低于,但平均涨幅来看,GBTC 高于 BTC 0.05%。总体来说差别不大。
好,我们现在对 BTC 和 GBTC 的相关性有了一个初步的了解。
开胃菜之后,我们就进入正题:找到 GBTC NAV 和 GBTC 间的关系。从灰度的官网我们可以得出这样一个公式:
NAV = BTC * 0.00095059
我们只需把 BTC 和 GBTC 的数据对齐,并计算 NAV,以及溢价的占比即可:
import pandas as pd
def get_crypto_and_stock(crypto_ticker, stock_ticker, crypto_per_share, period='3y'):
crypto = get_ticker_history(crypto_ticker, period=period)
stock = get_ticker_history(stock_ticker, period=period)
df = pd.DataFrame({'Value': crypto['Close'] * crypto_per_share})
df1 = pd.DataFrame({'Percent': (stock['Close'] - df['Value']) / stock['Close']})
df2 = stock.join([df, df1]).dropna()
return (crypto[crypto.index >= df2.index[0]], df2)
我们调用一下看看数据:
这段代码获取了 BTC 和 GBTC 的历史数据,并在 GBTC 原始数据之上添加了
Value
,对应 NAV,以及
Percent
,对应 GBTC 相对 NAV 溢价所占 GBTC 价格的百分比。
有了这个数据,我们简单用 matplotlib 将其可视化即可:
这个图上半部分是 GBTC 的收盘价和 NAV 的对比,两条线中间的部分就是溢价区,它时高时低。下半部分是溢价的百分比,五年间最高探到了 59.5%,最低 3%,25th-percentile 18.5%,75th-percentile 40.2%(我们在开篇的时候计算过,平安夜这一天在 17.5% ,低于 25th-percentile,记住这个数字)。
我很好奇,历史绝佳的买点(min)和历史绝佳的卖点(max)都在哪:
果然,17年 BTC 高点的时候,也是 GBTC 最疯狂的时刻,溢价接近 60%;而今年四月一号,是历史上最好的买点,溢价仅有 3.3%。其实,我们查询一下数据就可以发现,几乎历史级别的好买点,都出在今年(要不怎么说 2020 年是十年一遇的投资机会呢),最后一个小于 8% 溢价的买点是十月七号,是不是感觉错过了一个亿?
从统计学的角度(先假设 BTC 5-10 年的长线看涨),我们如果在溢价低于 18.6% (25th-percentile)买入,就会有不错的收益。为了证明这一假设,我们看看,如果在历史上所有溢价低于 18.6% 的点买入,持有到今年,收益是什么样子(为了便于对比,我们还计算了和 SP500 相比的收益)。代码还是很简单:
def buy_at_25(df, df_sp500, cost=10000):
buy_point = df['Percent'] <= df['Percent'].describe()['25%']
cur_price = df.iloc[-1]['Close']
cur_price_sp = df_sp500.iloc[-1]['Close']
shares = cost / df[buy_point]['Close']
shares_sp = cost / df_sp500[buy_point]['Close']
values = cur_price * shares
values_sp = cur_price_sp * shares_sp
df1 = pd.DataFrame({'Shares': shares,
'Values': values,
'Values SP': values_sp,
'Percent': (values - cost) / cost,
'Percent SP': (values - values_sp) / values_sp
})
return df1
我们运行一下(我选用了
SPY
这支投 SP500 的 ETF 基金作为参考):
(这张图因为相对于 SP500 的收益有一个负数,所以我使用了 line,而不是 area)
可以看到,历史上所有买点都是盈利的(废话)。同样的买点,和 SPY 的收益相比,25th-percentile 是 124% 更多的收益。最差的买点发生在 2017/12/07,这是唯一我们的策略输于 SPY 的策略。
抛开 2017 年这样的「远古时代」导致收益过大(十几二十倍),我们就看 2019 年初至今:
所有出现的 225 个买点,相对于 SP500 的收益都非常惊人,其中,2019 年 2 月 5 日和 6 日,甚至出现了相对于 SP500 收益高出 400% 的机会。就连表现最差的买点,2020/12/14,收益都超过 SP500 20.8%。
事实上一直到今年 12 月之前,在 25-percentile 买点买入 GBTC,都有 100% 以上的收益。就连 12 月出现的五个买点,都有非常惊人的收益:
💡
你是不是突然发现,12/24 平安夜这天有一个不错的买点?GBTC 在这一天溢价「仅有」 17.5%,在 25-percentile 之下。我们过几个月后再回过头来看看它的收益相比 SP500 如何。
再次重申,以上所有计算都建立在比特币长线看涨的前提下,如果遭遇熊市,比如现在的价格是今年 三月十八日的崩盘价格: