【量化】数字货币具有一月效应吗?

什么是一月效应?

A calendar effect (or calendar anomaly) is any market anomaly, different behaviour of stock markets, or economic effect which appears to be related to the calendar, such as the day of the week, time of the month, time of the year, time within the U.S. presidential cycle, decade within the century, etc…–from wikipedia

日历效应(或称日历异象)是指任何市场异常、股市的不同行为或经济效应,似乎都与日历有关,如一周中的哪一天、一个月中的哪一个时间、一年中的哪一个时间、美国总统周期内的哪一个时间、一个世纪内的哪一个十年等。–from DeepL

一月效应是日历效应的一种,表示在一月里股市都是涨的多、跌的少,很多文献都研究过这方面的内容,知网上一大堆,去谷歌学术上搜也是有很多相关的论文。而日历效应中除了一月效应外,还包括了诸如周末效应(weekend effect), 七月效应(July effect), 五月卖出原则(sell in May principle)等等情况。

那么问题来了:比特币市场是否也存在一月效应这种情况呢?如果存在,可以构建什么样的策略赚钱呢?如果不存在,有没有诸如上面说的五月卖出原则、七月效应这种情况呢?

数据选择与处理

我们选择的是], inplace=True) df.drop_duplicates(subset=['Date'], inplace=True) df.reset_index(inplace=True, drop=True) df['Date'] = pd.to_datetime(df['Date']) # 转换时间格式 df = df.resample(rule='1M', on='Date', label='left', closed='left').agg( { 'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last', 'Volume': 'sum', 'Market Cap': 'last', }) df.reset_index(inplace=True) df['month_return'] = df['Close'].pct_change() # 计算月收益率 df = df.dropna() df.head(10)

Date Open High Low Close Volume Market Cap month_return
1 2013-4-30 144 146.93 79.1 128.8 0 1445053941 -0.108897
2 2013-5-31 128.8 129.9 88.5 94.99 0 1078198524 -0.2625
3 2013-6-30 95 107.99 65.53 107.99 0 1240092366 0.136857
4 2013-7-31 107.95 135.75 101.21 133.49 0 1552288465 0.236133
5 2013-8-31 133.09 146.5 118.46 137.34 0 1616584505 0.028841
6 2013-9-30 137.15 217.42 102.25 199.97 0 2384492273 0.456022
7 2013-10-31 199.83 1146.97 198.85 1131.97 0 13646039846 4.660699
8 2013-11-30 1129.37 1156.14 420.51 756.13 119087500 9217167990 -0.332023
9 2013-12-31 760.32 1017.12 738.17 819.03 1157175888 10100339387 0.083187
10 2014-1-31 818.43 853.52 420.41 578.77 1258718100 7208406719 -0.293347

统计分析

首先看下月收益率的波动情况:
在这里插入图片描述

month_return = (Line()
               .add_xaxis(df['Date'].tolist())
               .add_yaxis('月收益率', df['month_return'].tolist(), label_opts=opts.LabelOpts(is_show=False)))
month_return.render_notebook()

可以看到大部分时间的收益率还算平稳,围绕着0进行波动,只有一次的偏离值非常大,具体为什么大,可以看上面的数据。

紧接着我们计算下月均收益率,看下图,只有2、8、12三个月份的收益率为负(相当于闭着眼只要不在这几个月买,第二个月卖掉,长期来看是赚钱的),然后再看中位数的话收益率为负的情况就变多了,尤其是之前看到的那个偏离值被解决了,也就是说3、4、9月份比特币涨的概率还是比较大的(最显著的3、9月份,或许给单图看的更清楚,于是附上,另外图中x轴坐标请自行+1)。

胜率这个指标是通过计算上涨月份数量占总月份数量的比例得出的,也就是说越大代表跌的概率越小。可以看到除了2月到了0.14外…都是0.2以上的概率…

在这里插入图片描述
在这里插入图片描述

month_return_groupby_mean = (df['month_return'].groupby(df['Date'].dt.month)).mean().round(2)  # 计算月平均收益率
month_return_groupby_median = (df['month_return'].groupby(df['Date'].dt.month)).median().round(2)  # 计算月收益率的中位数
month_return_groupby1 = df[df['month_return']>0].groupby(df['Date'].dt.month)[['month_return']].size()
month_return_groupby2 = df.groupby(df['Date'].dt.month)['month_return'].size()
month_return_groupby_win_rate = (month_return_groupby1 / month_return_groupby2).round(2)  # 计算收益为正的月数占总月数的比例
month_return_groupby_plt1 = (Bar()
                           .add_xaxis(month_return_groupby.index.tolist())
                           .add_yaxis('月均收益率', month_return_groupby_mean.tolist(), stack="stack1", yaxis_index=0)
                           .add_yaxis('月收益率中位数', month_return_groupby_median.tolist(), stack="stack1", yaxis_index=0)
                           .extend_axis(yaxis=opts.AxisOpts())
                           .set_global_opts(yaxis_opts=opts.AxisOpts(type_='value'))
                           .set_series_opts(
                                            label_opts=opts.LabelOpts(
                                            position="inside",
                                            ))
                            )
month_return_groupby_plt2 = (Line()
                            .add_xaxis([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
                            .add_yaxis('胜率', month_return_groupby_win_rate.tolist(), yaxis_index=1, linestyle_opts=opts.LineStyleOpts(width=3))
                            .extend_axis(yaxis=opts.AxisOpts())
                            )
month_return_plt = month_return_groupby_plt2.overlap(month_return_groupby_plt1)
month_return_plt.render_notebook()

另外,我们可以做每个月的净值曲线,就是计算各个月份的涨跌幅累乘情况,下图所展示的由于10月份偏离太大,就另给了个坐标轴(右侧),粗红线就是,其他线从最后一个点看,从上往下分别是9、4、3、6、5、1、7、11、12、8、2月份:

在这里插入图片描述

结论

整个分析下来,比特币的日历效应还是很明显的,其中三月、九月的效果最为明显,只有二月份表现显著差于其他月份,可能是因为过年抛售回家过年???然后三月份过完年又买回来???可以作为买入的参考信息。

1月、3月、4月、6月、9月、10月,胜率都很高,超过0.7.

2月、12月暂时不要考虑做多,尤其2月。

但另外一方面讲,今年(2020)行情在这里摆着,也许12月就涨了呢?但也要谨慎看待,从各个市场的历史来看,一切异象都会因为市场套利而逐渐减弱,从长远来看,这些异象可能会慢慢消失,而消失的表现就在于表现出与以往不同的行情。

从中位数收益率来看,3、9月上涨效应最明显,2月下跌效应最显著。而像5月、11月其实胜率不算太低,55开,但收益率表现不好是为什么?也有可能是之前收益率太高,本身无法超越,因为是月份之间差分,前面上涨太多,后面再上涨也显得收益低;同理,如4月、10月的胜率同样非常高,与前一月份基本持平,但收益情况远逊也是这个道理(中位数10个点也不算低…,更别说平均数了)。

但从平均数来看,只有2月、6月、12月处于负值,也就是说单纯的投资比特币,只要别在这几个月买,短期来看都是赚钱的,但长期来看不管哪个月份买都是赚钱的(但这里我们忽略了绝对值的讨论)。

再看累乘收益率那里,也证实了我们之前的说法.

ETH

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相对来说,ETH的波动性远大于比特币。

从胜率来看,1月、3月、4月、12月的胜率高达0.8,意味着五年里只有一年里相对上一月没有涨,同时没有特别显著的下跌月份,8月、10月算是相对显著下跌月份。

如果仅看中位数,会发现胜率达到0.8的都是显著上涨,但看平均数的话就会发现11月到第二年4月份都是上涨的时机。

EOS

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

整体来看,不具备参考性,毕竟有效时间才仅仅有4年,甚至不少月份只有3年的有效数据(1年=1月),而且整体波动太单调,未来出现新的消息面容易打破这个尴尬局面。

但与BTC、ETH相同的一点在于3月同样存在显著的上涨效应,但下跌较明显的月份三个币种明显不同。

而从中位数来看,只有3月与12月为正值(辣鸡币…),2月、7月的下跌幅度很大,但看平均数时又发现上涨的平均值远比下跌的大,代表着尽管EOS下跌的时间很多,涨起来也是很猛的,像1月、4月仅靠1次上涨就把平均值拉了十几个点。

以上诸多思路、代码借鉴自《这么简单的量化策略,居然能跑赢大盘10倍 | A股周内效应》

Guess you like

Origin blog.csdn.net/food_for_thought/article/details/110005571