研究表明,A股市场存在显著的周内效应,且在不同的市场状态下有所差异。大多数指数在周一的平均收益率最高,周四的平均收益率最低。在上涨市场中,周一和周五的收益率显著为正。在下跌市场中,周二和周三表现相对较好,周一和周四收益率显著为负。根据网友们的回测分析,总体来说,周一表现最好,其次是周五,而周四表现最差。
下面我们来看下ETF基金是否也存在相同的问题,以及大盘和小盘的表现是否有区别。
一、指数基金的周内效应分析
1.涨跌幅统计
这里对沪深300ETF(510300)和创业板ETF(159915)从上市交易以来到2020年9月20日的每个工作日的涨跌幅进行统计,结果如下:
从统计结果看,跟A股一样,沪深300ETF和创业板ETF都是周四跌的最多。周三和周四的涨幅均值和中位数都为负,其它几天涨幅的均值和中位数均为正。胜率方面周三和周四都低于50%。沪深300ETF在一周之中表现最好的是周五,其次是周二,但是这两天的都胜率低于周一;创业板ETF在一周之中表现最好的是周一,其次是周二。
2.周内每日净值统计
假设ETF每周只有某一个工作日,其他交易日不考虑。此时ETF的净值就只和该工作日的涨跌幅有关。这样把每周所有工作日的指数画出来,就能清楚的知道市场的表现。
上图图中的5条曲线分别对应一周内5个工作日的净值。对于沪深300ETF,周五一直表现不错,最终净值为1.59;周二近几年表现也不错,最终净值为1.53;周四表现最差,最终净值为0.76。对于创业板ETF,周二表现最好,最终净值为2.48;周一一和周五也不错,在1.7左右;周四表现最差,最终净值只有0.51。
从上面的数据可以看到,ETF指数基金同样有周内效应,只是大盘和小盘的表现不太一样。
周内效应分析的思路和程序都参考了邢大的文章,链接如下:
https://blog.csdn.net/xingbuxing_py/article/details/109215223
因为数据来源不同,而且索引之类的设置不太一样,做了一下修改,代码如下:
import akshare as ak
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import pandas as pd
# 工作日涨跌幅统计
def workday_statistics(df):
df['change'] = df['close']/df['close'].shift(1) - 1
df = df[df['date'] >= pd.to_datetime('20060101').strftime('%Y-%m-%d')]
df = df[df['date'] <= pd.to_datetime('20200920').strftime('%Y-%m-%d')]
# 计算工作日
df['datex'] = pd.to_datetime(df['date'])
df['week'] = df['datex'].dt.dayofweek
df['week'] += 1
# 统计各个工作日的均值,涨跌幅等
result = df.groupby('week')['change'].describe()
temp1 = df.groupby('week')['change'].size()
temp2 = df[df['change'] > 0].groupby('week')['change'].size()
result['胜率'] = temp2 / temp1
print(result.T)
return df
# 统计各个工作日净值
def week_statistics(df, name):
temp = df[['date', 'week', 'close']].copy()
mon_df = df[df['week'] == 1].copy()
tue_df = df[df['week'] == 2].copy()
wed_df = df[df['week'] == 3].copy()
thu_df = df[df['week'] == 4].copy()
fri_df = df[df['week'] == 5].copy()
mon_df['equity_mon'] = (mon_df['change'] + 1).cumprod()
tue_df['equity_tue'] = (tue_df['change'] + 1).cumprod()
wed_df['equity_wed'] = (wed_df['change'] + 1).cumprod()
thu_df['equity_thu'] = (thu_df['change'] + 1).cumprod()
fri_df['equity_fri'] = (fri_df['change'] + 1).cumprod()
# 合并
temp['equity_mon'] = mon_df['equity_mon']
temp['equity_tue'] = tue_df['equity_tue']
temp['equity_wed'] = wed_df['equity_wed']
temp['equity_thu'] = thu_df['equity_thu']
temp['equity_fri'] = fri_df['equity_fri']
# 填充
equity_list = ['equity_mon', 'equity_tue', 'equity_wed', 'equity_thu', 'equity_fri']
name_list = ['周一', '周二', '周三', '周四', '周五']
k = 0
plt.rcParams['font.sans-serif'] = ['SimHei']
for i in equity_list:
temp[i].fillna(method='ffill', inplace=True)
temp[i].fillna(value=1, inplace=True)
plt.plot(temp['date'], temp[i], label=name_list[k])
k += 1
print("周一:%s" % temp['equity_mon'].iloc[-1])
print("周二:%s" % temp['equity_tue'].iloc[-1])
print("周三:%s" % temp['equity_wed'].iloc[-1])
print("周四:%s" % temp['equity_thu'].iloc[-1])
print("周五:%s" % temp['equity_fri'].iloc[-1])
plt.gca().xaxis.set_major_locator(ticker.MultipleLocator(100)) # 设置x轴密度
plt.xticks(rotation=45) # 旋转45度显示
plt.legend(loc='best')
plt.title(name + "周内效应净值对比")
plt.savefig('ETF周内效应净值对比-' + name + '.png')
plt.show()
code = '510300'
# code = '159915'
df_small = pd.read_csv(code + '.csv', encoding='gbk')
data = df_small[['交易日期', '开盘价', '最高价', '最低价', '收盘价', '成交量']].copy()
# 列名改为英文方便下面操作
data.rename(columns={'交易日期': 'date', '开盘价': 'open', '最高价': 'high', '最低价': 'low',
'收盘价': 'close', '成交量': 'volume'}, inplace=True)
data.index = pd.to_datetime(data.date)
data.index = data.index.strftime('%Y%m%d')
data = data.sort_index()
data['change'] = data['close'].pct_change(periods=1) # 计算涨跌幅=change
df = workday_statistics(data)
week_statistics(df, code)
二、定投的周内效应分析
那么A股的周内效应对于基金定投有没有影响呢?本文针对这一问题,对基金定投的周内效应进行回测。标的还是沪深300ETF(510300)和创业板ETF(159915),选择在周一至周五进行分别进行定投,金额未1000元,在每个交易日以开盘价买入后一直持有,回测开始时间为2012年1月1日,周期分别为3年、5年和10年,手续费为0.03%,没有印花税,没有考虑滑点问题。
3年定投回测结果如下(表格的上一半为159915,下一半为510300):
5年定投回测结果如下:
10年定投回测结果如下:
表格看起来好像不太直观,还是年化收益柱状图好看一点。
从以上数据可以看出,不管是大盘指数还是小盘指数,周内不同时间定投收益的最大差别不会超过2%,也就是说在每周的哪一天定投的最终收益差别非常小。对于长期的ETF定投来说,周内效应的差别基本可以忽略,大家也不用费心去想这个了。
下面来看下ETF定投的最大回撤情况。
从上图可以看到,同一个ETF基金的3年、5年和10年定投最大回撤在周内的差异也非常小,跟年化收益情况类似。
原本还打算试一下周内避开表现差的日子最终收益是否有差别,从以上结果看如果不做其他动作,纯粹的定投持有不动,差别其实不大。
另外对于以开盘价还是收盘价定投,经过回测发现差别也非常小,这里就不详细说明了。
根据以上回测结果,创业板ETF的收益长期要远远高于沪深300ETF,但是对应的最大回撤也较大。收益差别这么大的主要原因我猜是因为创业板ETF的初始净值较低,在定投初期能够买到更多的份额,然后在时间复利的作用下,到后期就会被放大。后面有时间的话对这个因素做一个回测,看看猜的对不对:)~~~~
-----------------------------------
原创不易,请多支持!