【Python量化分析100例】Day2-星期几最容易被割韭菜

1 背景

在进行基金定投时,通常都会有一个疑问:设置星期几进行定投才能捡到最便宜的筹码呢?

本节内容通过统计沪深300最近16年的数据(2005年1月4日到2021年10月22日)带你解开疑惑,

2 获取数据

2.1 登陆Tushare

通过以下url,用户可以注册到自己的tushare账号,登陆账号之后,在账号的个人首页->接口Token中获取对应的Token进行数据获取的钥匙。

url = "https://tushare.pro/register?reg=399376"

2.2 用pyhton连接tushare

首先,需要安装tushare模块

pip install tushare

连接tushare

import tushare as ts
ts.set_token('your token here')#这里填入自己获取的token
pro = ts.pro_api()

2.3 用pyhton获取数据

以沪深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

2.4 用pyhton进行数据分析

将数据日期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()

【Python量化分析100例】Day2-星期几最容易被割韭菜_第1张图片

可以看出从2005年开始到2021年:

周一的累计涨幅为3.559659

周二的累计涨幅为1.010604

周三的累计涨幅为1.834925

周四的累计涨幅为0.372335

周五的累计涨幅为2.019456

以1为基准判断,只进行周一投资,获利3.6倍,只进行周四投资亏损63%。

3 总结

星期四最容易被割韭菜,因此为了捡到相对便宜的筹码,我们的定投应该设置在星期四。

大佬们可以通过替换代码中的ts_code去统计不同指数的涨跌情况。

投资有风险,该教程仅供学习参考,不作为投资建议!!!

代码已同步到github,会慢慢更新~

4 Reference

https://github.com/RxxxxR/quantitative_analysis

Tushare大数据社区

你可能感兴趣的:(量化分析100例,1024程序员节,python,量化投资,量化分析,金融量化)