加密市场的市场因子
本文首先分析全加密市场收益率的一般特征,进而按照一定的筛选规则对数据进行过滤,然后分等权重与市值加权两种情况、组建各市值排名下的市场组合,将各组合的收益率联合比特币一起进行相关性分析,最后得出市场因子的可能代理形式。
全市场情况
本节主要侧重分析收益率的情况。先分析了全市场的日收益率情况,然后为后续研究进行一定的数据过滤,最后进行了异常值处理。
阅读本节,有助于了解加密市场的整体情况。
收益率描述
本文的数据来源于coinmarketcap,截止到2023-09-14日,该网站上收录了超过9000种以USD计价的数字货币。
对于0价格、本文将其视为空缺数据、替换为np.nan
、然后采用向下填充方式补齐。
收益率有两种计算方式,价格涨幅与对数价格差。
价格涨幅收益率计算如下:
\[\begin{equation}\label{eq1} rtn_t=(close_t-close_{t-1})/close_{t-1} \end{equation}\]
上式中的\(t\)为第t个交易日。
对数收益率计算如下:
\[\begin{equation}\label{eq2} logRtn_t=log(close_t)-log(close_{t-1}) \end{equation}\]
对数收益率与价格涨幅收益率两者的转换关系为:
\[\begin{equation}\label{eq3} rtn_t=e^{logRtn_t}-1 \end{equation}\]
计算前进行了如下处理,初步避免异常值:
- 将收盘价为0的情况替换为空值
np.nan
,避免出现无穷大收益率;- 采用向下填充的方法填补收盘价空值。
价格涨幅收益率
我们可以看看如果不进行任何处理的所有币种(共9064个币种)的日收益率(共4812个交易日)描述情况,见下表:
价格涨幅收益率描述表
count | mean | std | min | 25% | 50% | 75% | max | |
---|---|---|---|---|---|---|---|---|
rtn | 6.35182e+06 | 276334 | 5.1249e+08 | -1 | -0.033 | -0.001 | 0.024 | 1.26464e+12 |
上表中count指总共的有效样本数(空值不算在内)。
收益率均值达到276334的原因是处在75%之外的异常值产生了巨大影响,其中位数及四分位均处在合理范围内。
由于收益率的计算采用了价格的增幅法、而非对数价格差,故而收益率会呈现出正负不对称的现象、特别是在异常值区间,即上表中的最小收益率仅约-1(对应1日几乎归零、投资者完全亏损),而最大值为1.26464e+12。
我们来看看天量级的最大收益率是怎么产生的。
找到收益率最大值,发现为BBUNNY
于2023-08-05
日出现,该币种前一交易日(2023-08-04
)的收盘价为$8.200000e-13
,而2023-08-05
日收盘价为$1.037006
,涨幅惊人、不过该日的交易量仅仅为$0.18
。如此之低的交易量,实在是不具有真实交易的潜在可能性。
收益率最小值,出现在2023-08-06
的LEET
币,该币种前一日(2023-08-05
)的收盘价为$1.541654
而次日的收盘价为$1.755000e-11
,该日的交易量仅为$260.1
,与最大收益率的BBUNNY
一样交易量实在是太低。
对数收益率
如果采用对数价格差法计算,则最大最小收益率会相当,如下表:
对数收益率描述表
count | mean | std | min | 25% | 50% | 75% | max | |
---|---|---|---|---|---|---|---|---|
logRtn | 6.35182e+06 | -0.004 | 0.231 | -25.199 | -0.034 | -0.001 | 0.024 | 27.866 |
可见此时最大最小值差距不大、正负收益率基本对称。
不过采用对数价格差计算的收益率在计算横截面(cross-section)的投资组合时,会产生很复杂的可加性问题(可参见石川博士在知乎的回答,见这里),不如简单收益率简洁方便。故本文在进行投资组合处采用价格涨幅法计算收益率。
如果不对收益率中存在的异常值进行适当的处理,会对后续研究造成巨大的影响、得出错误结论。
出于涨跌对称的考虑,对异常值处理时选用对数收益率更方便。做投资组合时再根据\(\eqref{eq3}\)式转换回价格涨幅收益率。
投资组合构建
我们先阐述一下投资组合的构建方法,防止后续进行数据过滤、异常值处理时有数据丢失或错误修改引起错误。
为了规避天量级的异常收益率,我们需要对数据进行一定的过滤,过滤后真正有效的收益率是次期收益率\(rtn\_1\)或次期对数收益率\(logRtn\_1\),这是因为我们构建投资组合时用到的筛选值为当期值、但筛选后的效果只有在次期才能体现。
真实的投资必须考虑不能有未来数据,故需要用上一交易周期的数据进行筛选,然后持有到当前交易周期的收盘。由于此时有些币种可能已经不在新筛选出的数据范围内了,故在过滤前需要先计算出每个币(如下文所述的重名、多名现象,对应唯一的cmc_id且唯一symbol才是一个币实体)的次期收益率\(rtn\_1\)或次期对数收益率\(logRtn\_1\)。
用次期收益率\(rtn\_1\)构建投资组合(进行时间上的shift
),就不会有未来数据和数据缺失的问题。
即投资组合构建方式为:用上一期的其他变量进行投资组合筛选、用当期收益率计算投资收益。
交易量市值过滤
规则
将交易量低、市值低的币种过滤掉。制定如下规则:
- 日交易量需要不少于\(\$10^5\);
- 市值不少于\(\$10^6\);
进行筛选。上述筛选会将早期不符合条件的比特币也过滤掉,这是正常的。
重名及多名现象
筛选后剩下的symbol数有2360个、cmc_id(cmc给的唯一id)有2444个,说明有多个不同币种存在简称相同的现象;
在cmc_id固定后对symbol进行二次分组后,发现有2446个币,说明有2个币具有多个symbol简称!
对应的为id=1720
的IOTA
、其还有另一个名字MIOTA
,两者价格、市值、交易量完全一样。
另一个具有两个symbol简称的是EURC
,它的另一个名称为EUROC
,对应在不同交易所或链上的名称,两者之间只存在微小的差异。
过滤后的收益率
此时收益率情况见下表:
过滤后的收益率情况
count | mean | std | min | 25% | 50% | 75% | max | |
---|---|---|---|---|---|---|---|---|
rtn | 1.44167e+06 | 0.031 | 16.763 | -1 | -0.034 | -0.002 | 0.028 | 15695.5 |
可见虽然样本数量显著下降,但是异常值仍然存在。
我们再次检查最大最小值出现的情况。
出现上表中最大收益率的有UNI
(需要注意cmc收录有很多简称均为UNI
的币,本处对应的为id=4307
的UNICORN Token
),对应的时间在2022-10-21
,该币种前日(2022-10-20
)的收盘价为$0.000038
、成交量仅$3.38
,而收益率异常日(2022-10-21
)的收盘价约为$0.598153
、交易量达到$210829.03
;
最小值对应的有WSPP
(对应的id=10841
,BSC
链上的Wolf Safe Poor People
币),对应日期为2021-09-13
、该日价格为$8.398000e-11
、交易量$128837.54
,发现该币种2021-09-12
日的收盘价为$0
、交易量$126266.08
(注意不是近似,而真的是0,同时其交易量不为0!该币种早期有很多0价格),如开篇所述、我们将其视为空并用上个有效价格替换处理,故处理后2021-09-12
日的收盘价为$0.000295
(实际对应2021-07-20
日收盘价)。
由于过滤导致数据集变小,次期收益率能保证投资组合时数据不丢失,次期收益率情况见下表:
过滤后的次期收益率情况
count | mean | std | min | 25% | 50% | 75% | max | |
---|---|---|---|---|---|---|---|---|
rtn_1 | 1.44094e+06 | 0.002 | 0.419 | -1 | -0.034 | -0.002 | 0.027 | 427.365 |
可见异常值情况也存在。
市值排名过滤
按照市值排名进行过滤,是一种截面(cross-section)过滤,指的是只保留截面上市值排名靠前的币种,如果某个交易日数据量不足排名数、则选用当日的全量数据。
全量数据的排名
首先,我们选用全量数据进行观察。
我们作出排名前100、前300、前500、前1000、前2000及全量数据的次期收益率描述情况。
全量数据、市值排名筛选的次期收益率\(rtn\_1\)情况
count | mean | std | min | 25% | 50% | 75% | max | |
---|---|---|---|---|---|---|---|---|
top_100 | 347371 | 25.877 | 15247.5 | -1 | -0.035 | -0.001 | 0.03 | 8.98659e+06 |
top_300 | 861227 | 10.567 | 9683.94 | -1 | -0.037 | -0.001 | 0.032 | 8.98659e+06 |
top_500 | 1.28833e+06 | 7.067 | 7917.66 | -1 | -0.038 | -0.002 | 0.032 | 8.98659e+06 |
top_1000 | 2.19656e+06 | 4.152 | 6063.72 | -1 | -0.038 | -0.001 | 0.032 | 8.98659e+06 |
top_2000 | 3.34636e+06 | 6.786 | 8582.5 | -1 | -0.037 | -0.001 | 0.031 | 1.2867e+07 |
all | 6.35182e+06 | 276334 | 5.1249e+08 | -1 | -0.033 | -0.001 | 0.024 | 1.26464e+12 |
可见单纯进行市值排名过滤,不能起到过滤掉异常收益率的效果。
过滤数据的排名
本小节是对已经采用交易量市值过滤规则后的数据进行排名,然后筛选排名靠前的数据。
仍然作出排名前100、前300、前500、前1000、前2000及全量数据的次期收益率描述情况,如下表:
筛选后数据、市值排名筛选的次期收益率\(rtn\_1\)情况
count | mean | std | min | 25% | 50% | 75% | max | |
---|---|---|---|---|---|---|---|---|
top_100 | 246308 | 0.002 | 0.083 | -0.999 | -0.029 | -0 | 0.026 | 3.556 |
top_300 | 668131 | 0.002 | 0.532 | -0.999 | -0.033 | -0.001 | 0.028 | 427.365 |
top_500 | 938668 | 0.002 | 0.454 | -0.999 | -0.033 | -0.001 | 0.028 | 427.365 |
top_1000 | 1.39848e+06 | 0.002 | 0.425 | -0.999 | -0.034 | -0.002 | 0.027 | 427.365 |
top_2000 | 1.44094e+06 | 0.002 | 0.419 | -1 | -0.034 | -0.002 | 0.027 | 427.365 |
all | 1.44094e+06 | 0.002 | 0.419 | -1 | -0.034 | -0.002 | 0.027 | 427.365 |
可见如想进一步处理异常值,需要额外的办法。
异常值处理
对异常值的任何处理,都可能造成模型与研究结论的改变,需要谨慎使用。
异常值的常用处理办法有放缩法、mad法、均值-方差法三种,这三种方法应该对异常上涨和异常下跌平等的处理,故应该处理次期对数收益率\(logRtn\_1\)。由于加密市场收益率异常值对均值方差影响太大,故均值-方差法不适用,本文不进行讨论。
缩放法的参数为0.02,即将次期对数收益率处在分位数\([0, 0.02]\)和\([0.98, 1]\)的用临界值\(logRtn\_1_{0.02}\)和\(logRtn\_1_{0.98}\)代替。完成缩放后,按照\(\eqref{eq3}\)得出处理后的次期收益率\(rtn\_1\)。
mad(中位数绝对值离差的中位数)的计算如下:
\[\begin{equation}\label{eq4} mad=median(abs(X-median(X))) \end{equation}\]
异常值判断及处理标准为:超过中位数3个mad值的\(logRtn\_1\)视为异常,用\(median\pm 3*mad\)替换。
处理完之后也需要转换为次期收益率\(rtn\_1\)。
对异常值进行处理后的次期收益率情况见下表:
各排名组及各异常值处理后的次期收益率\(rtn\_1\)情况
count | mean | std | min | 25% | 50% | 75% | max | |
---|---|---|---|---|---|---|---|---|
top_100_raw | 246308 | 0.002 | 0.083 | -0.999 | -0.029 | -0 | 0.026 | 3.556 |
top_100_win | 246308 | 0.001 | 0.069 | -0.663 | -0.029 | -0 | 0.026 | 1.448 |
top_100_mad | 246308 | -0.002 | 0.058 | -0.514 | -0.028 | -0.001 | 0.024 | 0.485 |
top_300_raw | 668131 | 0.002 | 0.532 | -0.999 | -0.033 | -0.001 | 0.028 | 427.365 |
top_300_win | 668131 | -0 | 0.071 | -0.663 | -0.033 | -0.001 | 0.028 | 1.448 |
top_300_mad | 668131 | -0.003 | 0.059 | -0.566 | -0.032 | -0.001 | 0.026 | 0.485 |
top_500_raw | 938668 | 0.002 | 0.454 | -0.999 | -0.033 | -0.001 | 0.028 | 427.365 |
top_500_win | 938668 | -0 | 0.07 | -0.663 | -0.033 | -0.001 | 0.027 | 1.448 |
top_500_mad | 938668 | -0.003 | 0.058 | -0.572 | -0.032 | -0.002 | 0.026 | 0.485 |
top_1000_raw | 1.39848e+06 | 0.002 | 0.425 | -0.999 | -0.034 | -0.002 | 0.027 | 427.365 |
top_1000_win | 1.39848e+06 | -0.001 | 0.071 | -0.663 | -0.034 | -0.002 | 0.027 | 1.448 |
top_1000_mad | 1.39848e+06 | -0.004 | 0.058 | -0.572 | -0.033 | -0.002 | 0.026 | 0.485 |
top_2000_raw | 1.44094e+06 | 0.002 | 0.419 | -1 | -0.034 | -0.002 | 0.027 | 427.365 |
top_2000_win | 1.44094e+06 | -0.001 | 0.072 | -0.663 | -0.034 | -0.002 | 0.027 | 1.448 |
top_2000_mad | 1.44094e+06 | -0.004 | 0.058 | -0.572 | -0.034 | -0.002 | 0.026 | 0.485 |
all_raw | 1.44094e+06 | 0.002 | 0.419 | -1 | -0.034 | -0.002 | 0.027 | 427.365 |
all_win | 1.44094e+06 | -0.001 | 0.072 | -0.663 | -0.034 | -0.002 | 0.027 | 1.448 |
all_mad | 1.44094e+06 | -0.004 | 0.058 | -0.572 | -0.034 | -0.002 | 0.026 | 0.485 |
上表中处理方法名称后缀
_raw
代表未经处理的数据、后缀_win
代表缩放法处理的数据、后缀_mad
代表mad法处理的数据。
可见两种处理方法对比,mad对异常值的处理效果更好,不过也意味着更失真,因为加密市场的日涨幅超过10倍是较常见的事情。如果需要研究更准确的投资组合、或者极限抗压情况,则不应该进行收益率异常值处理。
接下来,我们用分缩放法处理、mad法处理、没进行异常值处理3种数据集,应用到市场组合中,观察异常值处理是否合理。
市场组合构建
我们利用上述处理过的收益率来进行市场投资组合,以构建加密市场因子。本节分等权重与市值加权两种情况讨论。
等权重加权会加大市值小的币种权重,有潜在暴涨的可能性,对于很多投机者来说,这意味着机会,故本节也兼顾讨论。市值加权更能反应整体市场情况,反应了整个市场可以容纳的资金情况下的表现。
等权重加权
所谓的等权重加权就是,在每一个交易日,将所有非空值的币种收益率(实际是次期收益率)取均值,也即对收益率取截面平均。如下:
\[\begin{equation}\label{eq5} rtn_{eq}^t=\sum_{j}^{N^t} \frac{1}{N^t}*rtn_j^t \end{equation}\]
上式中的\(t\)为第t个交易日,\(j\)为截面上(第t个交易日内)收益率非空的第j个币种,\(N^t\)为第t个交易日、收益率非空的币种总数。
含经过异常值处理的数据情况
如上计算的等权重加权收益率描述统计情况见下表:
等权重加权下,各排名组及各异常值处理方式的收益率描述情况
count | mean | std | min | 25% | 50% | 75% | max | |
---|---|---|---|---|---|---|---|---|
top_100_raw | 3641 | 0.002 | 0.05 | -0.491 | -0.019 | 0.003 | 0.024 | 0.485 |
top_100_win | 3641 | 0.001 | 0.049 | -0.491 | -0.019 | 0.002 | 0.023 | 0.485 |
top_100_mad | 3641 | -0.002 | 0.047 | -0.491 | -0.019 | -0.001 | 0.017 | 0.485 |
top_300_raw | 3641 | 0.003 | 0.057 | -0.491 | -0.018 | 0.004 | 0.024 | 1.662 |
top_300_win | 3641 | 0.001 | 0.049 | -0.491 | -0.019 | 0.002 | 0.023 | 0.485 |
top_300_mad | 3641 | -0.002 | 0.047 | -0.491 | -0.02 | -0 | 0.018 | 0.485 |
top_500_raw | 3641 | 0.003 | 0.057 | -0.491 | -0.018 | 0.004 | 0.024 | 1.662 |
top_500_win | 3641 | 0.001 | 0.049 | -0.491 | -0.019 | 0.003 | 0.023 | 0.485 |
top_500_mad | 3641 | -0.002 | 0.047 | -0.491 | -0.019 | -0.001 | 0.017 | 0.485 |
top_1000_raw | 3641 | 0.004 | 0.057 | -0.491 | -0.018 | 0.004 | 0.024 | 1.662 |
top_1000_win | 3641 | 0.001 | 0.049 | -0.491 | -0.018 | 0.003 | 0.022 | 0.485 |
top_1000_mad | 3641 | -0.002 | 0.046 | -0.491 | -0.019 | -0.001 | 0.017 | 0.485 |
top_2000_raw | 3641 | 0.004 | 0.057 | -0.491 | -0.017 | 0.004 | 0.024 | 1.662 |
top_2000_win | 3641 | 0.001 | 0.049 | -0.491 | -0.018 | 0.003 | 0.022 | 0.485 |
top_2000_mad | 3641 | -0.002 | 0.046 | -0.491 | -0.019 | -0.001 | 0.017 | 0.485 |
all_raw | 3641 | 0.004 | 0.057 | -0.491 | -0.017 | 0.004 | 0.024 | 1.662 |
all_win | 3641 | 0.001 | 0.049 | -0.491 | -0.018 | 0.003 | 0.022 | 0.485 |
all_mad | 3641 | -0.002 | 0.046 | -0.491 | -0.019 | -0.001 | 0.017 | 0.485 |
上表中的后缀
_raw
代表未经处理的数据、后缀_win
代表缩放法处理的数据、后缀_mad
代表mad法处理的数据。
从上表可见各排名截断下,均值、中位数、标准差均是
raw > win > mad
。
对收益率进行异常值处理不合理
仅仅作出汇总统计表很不直观,且考虑到各组净值的量级差异太大不便直接对比观察,故作出对数净值图,如下:
发现仍然不能很好的观察区分,因而按照排名数进行分组对比。
排名前100的对数净值走势对比如下:
前300如下:
前500:
前1000:
前2000:
全数据:
可见进行收益率异常值处理会导致投资组合结果严重失真。后续研究只采用没有进行收益率异常值处理的数据,并去掉后缀_raw
。
等权重加权的表现
后续不采用收益率异常值处理过的数据进行投资组合研究。各排名组合的对比走势图如下:
可见在等权重加权下,全量数据(经过市值、交易量过滤)投资组合表现最好,且排名选择的范围越大越好、即用来作为组合的排名数越大收益越高。
加入了比特币作为对比的净值分段走势如下:
可见通过等权重加权方式构建的投资组合与比特币的走势具有很强的相关性,各市值排名组合的表现好于比特币,这意味着加密市场具有很好的投资机会可供挖掘。
我们作出各投资组合与比特币收益率之间的相关性,如下:
从相关性数值上证明了btc与各组合间具有很强的相关性。
市值排名前300、500、1000、2000及不进行市值排名过滤的组合效果差别不大。
市值加权
由于市值的限制,我们实际上应用等权重加权进行投资组合的可能性很低,市值排名越靠后的币种的资金容量越有限,较大资金不太容易买卖。故市值加权更具有可投资性。
某一交易日\(t\)的截面上,市值加权收益率的计算如下:
\[\begin{equation}\label{eq6} rtn_{mkt}^t=\sum_{i}^{N^{t-1}} \frac{mkt_i^{t-1}}{\sum_{i}^{N^{t-1}}mkt_i^{t-1}}*rtn_i^t \end{equation}\]
上式中\(N^{t-1}\)代表的上一交易日结束时的币种数量。市值\(mkt\)与收益率\(rtn\)之间有1期的偏差,即利用上一期的市值进行加权获得当期的收益率。
市值加权各组的对数净值表现如下:
对数净值走势非常接近。作出净值分段时序图,如下:
收益率相关性热图如下:
可见市值加权下,各排名组合的相关性非常高、接近1,且都与btc的相关性高达0.96以上。
市值排名前100、300、500、1000、2000及不进行市值排名过滤的组合效果差别不大,均可作为市场因子的代理。
剔除BTC的市场组合
上文讨论了市值加权下各排名组合的相关性情况,可以看出在加密市场中,btc也是一个很好的市场因子代理变量。即然比特币可以作为市场代理,那么加密市场除了比特币之外的其他币种的组合又是什么样子呢?我们将btc从投资组合中剔除,观察不包含btc的市值加权组合情况,并将它们与btc进行对比。
首先作出对数净值走势,如下:
分段走势:
相关性热图:
由净值及相关性可见,除去btc后的各组间的相关性仍然很高,且收益率与btc具有较高的正相关性。
这与人们普遍感觉到的加密市场同涨同跌的现象很符合。
总结
本文回顾
本文进行了如下工作:
- 分析了全加密市场的收益率情况,列举了一些异常收益率的情况;
- 进行了市值与交易量过滤,将交易量及市值过低的币种去掉,得出了市值排名前100、300、500、1000、2000及全量数据(进行了交易量、市值过滤)的潜在投资组合数据集,且尝试进行收益率的异常值处理;
- 在等权重加权下,发现处理后的数据与原数据组合表现的差异很大,故不能对收益率进行异常值处理;
- 进行了等权重加权构建市场组合,发现除排名前100之外的其他组合之间的相关性非常高、接近1;加上btc之后,发现所有投资组合之间的正相关性很高,且选用的排名越大、相较于btc的表现越好;
- 进行了市值加权构建市场组合,发现各排名组合之间的相关性非常高,且均与btc具有很高的相关性,故可以将比特币作为市场代理变量;
- 进一步将比特币从市值加权投资组合中剔除,发现各排名组合之间的相关性仍然很高,且仍与btc具有较高的正相关性。
重要结论
本文说明比特币本身就可以作为全加密市场、市场因子的很好代理。
如需进一步精确,采用市值排名前300、500、1000、2000或全量数据作为市场因子代理的效果差不多。
声明
本文涉及到很多技术细节,略显乏味,希望能供对加密市场感兴趣的研究人员参考,不构成投资建议。
谢谢阅读!