IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 周内效应对ETF定投的影响分析 -> 正文阅读

[Python知识库]周内效应对ETF定投的影响分析

研究表明,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的初始净值较低,在定投初期能够买到更多的份额,然后在时间复利的作用下,到后期就会被放大。后面有时间的话对这个因素做一个回测,看看猜的对不对:)~~~~

-----------------------------------

原创不易,请多支持

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:24:53  更:2022-11-05 00:26:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 3:20:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计