在进行基金定投时,通常都会有一个疑问:设置星期几进行定投才能捡到最便宜的筹码呢?
本节内容通过统计沪深300最近16年的数据(2005年1月4日到2021年10月22日)带你解开疑惑,
通过以下url,用户可以注册到自己的tushare账号,登陆账号之后,在账号的个人首页->接口Token中获取对应的Token进行数据获取的钥匙。
url = "https://tushare.pro/register?reg=399376"
首先,需要安装tushare模块
pip install tushare
连接tushare
import tushare as ts
ts.set_token('your token here')#这里填入自己获取的token
pro = ts.pro_api()
以沪深300为例,获取2005年01月04日到2021年10月22日的所有日线数据:
df = pro.index_daily(ts_code='399300.SZ')#沪深300
或者按日期取
df = pro.index_daily(ts_code='399300.SZ', start_date='20050104', end_date='20211022')
接口:index_daily
描述:获取指数每日行情,还可以通过bar接口获取。由于服务器压力,目前规则是单次调取最多取8000行记录,可以设置start和end日期补全。
输入参数
名称 | 类型 | 必选 | 描述 |
---|---|---|---|
ts_code | str | Y | 指数代码 |
trade_date | str | N | 交易日期 (日期格式:YYYYMMDD,下同) |
start_date | str | N | 开始日期 |
end_date | str | N | 结束日期 |
输出参数
名称 | 类型 | 描述 |
---|---|---|
ts_code | str | TS指数代码 |
trade_date | str | 交易日 |
close | float | 收盘点位 |
open | float | 开盘点位 |
high | float | 最高点位 |
low | float | 最低点位 |
pre_close | float | 昨日收盘点 |
change | float | 涨跌点 |
pct_chg | float | 涨跌幅(%) |
vol | float | 成交量(手) |
amount | float | 成交额(千元) |
将数据进行倒序
df = df[::-1].reset_index()
查看数据
df
ts_code | trade_date | close | open | high | low | pre_close | change | pct_chg |
---|---|---|---|---|---|---|---|---|
399300.SZ | 20050104 | 982.7940 | 994.7690 | 994.7690 | 980.6580 | 1000.0000 | -17.2060 | -1.7206 |
399300.SZ | 20050105 | 992.5640 | 981.5770 | 997.3230 | 979.8770 | 982.7940 | 9.7700 | 0.9941 |
399300.SZ | 20050106 | 983.1740 | 993.3310 | 993.7880 | 980.3300 | 992.5640 | -9.3900 | -0.9460 |
399300.SZ | 20050107 | 983.9580 | 983.0450 | 995.7110 | 979.8120 | 983.1740 | 0.7840 | 0.0797 |
399300.SZ | 20050110 | 993.8790 | 983.7600 | 993.9590 | 979.7890 | 983.9580 | 9.9210 | 1.0083 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
399300.SZ | 20211018 | 4874.7753 | 4922.5137 | 4922.5137 | 4844.9383 | 4932.1084 | -57.3331 | -1.1624 |
399300.SZ | 20211019 | 4922.7232 | 4869.3907 | 4928.1433 | 4868.8106 | 4874.7753 | 47.9479 | 0.9836 |
399300.SZ | 20211020 | 4910.1846 | 4926.7727 | 4944.0216 | 4898.3651 | 4922.7232 | -12.5386 | -0.2547 |
399300.SZ | 20211021 | 4928.0156 | 4914.7378 | 4946.1764 | 4893.8525 | 4910.1846 | 17.8310 | 0.3631 |
399300.SZ | 20211022 | 4959.7254 | 4934.8698 | 4989.8870 | 4934.8698 | 4928.0156 | 31.7098 | 0.6435 |
将数据日期trade_date转换成日期格式
import pandas as pd
df["Date"] = pd.to_datetime(df["trade_date"])#将字符串转换成日期
输出转换后的日期
df["Date"]
0 2005-01-04
1 2005-01-05
2 2005-01-06
3 2005-01-07
4 2005-01-10
...
4077 2021-10-18
4078 2021-10-19
4079 2021-10-20
4080 2021-10-21
4081 2021-10-22
Name: Date, Length: 4082, dtype: datetime64[ns]
将日期转换成星期,用0-4表示星期一到星期五
df["weekday"] = df["Date"].dt.dayofweek#日期转换成星期
查看星期去重数据
set(df["weekday"])
{0, 1, 2, 3, 4}
统计各个工作日的均值与涨跌特征
result = df.groupby("weekday")["pct_chg"].describe()
tmp1 = df.groupby("weekday")["pct_chg"].size()#星期个数统计
tmp2 = df[df["pct_chg"]>0].groupby("weekday")["pct_chg"].size()#上涨星期统计
result["success_rate"] = tmp2/tmp1
result.T
weekday | 0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|
count | 797.000000 | 821.000000 | 829.000000 | 822.000000 | 813.000000 |
mean | 0.180544 | 0.013758 | 0.085892 | -0.107176 | 0.098623 |
std | 2.048196 | 1.570551 | 1.593049 | 1.607178 | 1.558436 |
min | -8.747700 | -9.239800 | -6.761300 | -7.294500 | -7.868300 |
25% | -0.755200 | -0.628800 | -0.688100 | -0.873975 | -0.644600 |
50% | 0.272300 | 0.134300 | 0.027400 | -0.086750 | 0.124400 |
75% | 1.287600 | 0.814900 | 0.808500 | 0.684750 | 0.848200 |
max | 8.271700 | 6.714700 | 8.180200 | 9.287900 | 9.342000 |
success_rate | 0.584693 | 0.563946 | 0.512666 | 0.457421 | 0.555966 |
得到最近16年沪深300在周一到周五的上涨概率分别为为:
周一上涨概率:58.4%
周二上涨概率:56.3%
周三上涨概率:51.2%
周四上涨概率:45.7%
周五上涨概率:55.5%
可以看出周一上涨概率最大,周四下跌概率最大
分别将周一到周五的数据抽取出来,然后进行相乘
mon_df = df[df["weekday"]==0].copy()
tue_df = df[df["weekday"]==1].copy()
wed_df = df[df["weekday"]==2].copy()
thu_df = df[df["weekday"]==3].copy()
fri_df = df[df["weekday"]==4].copy()
mon_df["equity_mon"] = (mon_df["pct_chg"]/100+1).cumprod()
tue_df["equity_tue"] = (tue_df["pct_chg"]/100+1).cumprod()
wed_df["equity_wed"] = (wed_df["pct_chg"]/100+1).cumprod()
thu_df["equity_thu"] = (thu_df["pct_chg"]/100+1).cumprod()
fri_df["equity_fri"] = (fri_df["pct_chg"]/100+1).cumprod()
可以得到星期的累记涨跌幅,并进行画图
import matplotlib.pylab as plt
temp = df.copy()
temp["equity_mon"] = mon_df["equity_mon"].copy()
temp["equity_tue"] = tue_df["equity_tue"].copy()
temp["equity_wed"] = wed_df["equity_wed"].copy()
temp["equity_thu"] = thu_df["equity_thu"].copy()
temp["equity_fri"] = fri_df["equity_fri"].copy()
equity_list = ["equity_mon", "equity_tue", "equity_wed", "equity_thu", "equity_fri"]
fig = plt.figure(figsize=(10,6))
ax1 = fig.add_subplot(111)
for i in equity_list:
temp[i] = temp[i].astype("object")
temp[i].fillna(method = "ffill", inplace = True)
temp[i] = temp[i].astype("object")
temp[i].fillna(value = 1, inplace = True)
ax1.plot(temp["Date"], temp[i], label = i)
ax1.legend(loc = "best")
plt.show()
可以看出从2005年开始到2021年:
周一的累计涨幅为3.559659
周二的累计涨幅为1.010604
周三的累计涨幅为1.834925
周四的累计涨幅为0.372335
周五的累计涨幅为2.019456
以1为基准判断,只进行周一投资,获利3.6倍,只进行周四投资亏损63%。
星期四最容易被割韭菜,因此为了捡到相对便宜的筹码,我们的定投应该设置在星期四。
大佬们可以通过替换代码中的ts_code去统计不同指数的涨跌情况。
投资有风险,该教程仅供学习参考,不作为投资建议!!!
代码已同步到github,会慢慢更新~
https://github.com/RxxxxR/quantitative_analysis
Tushare大数据社区