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

202xxx 2021-10-28 12:07:33
Python 分析 量化 化分 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()

可以看出从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大数据社区

版权声明
本文为[202xxx]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_37474682/article/details/120939672

  1. 保姆级教程!将 Vim 打造一个 IDE (Python 篇)
  2. python给定两个函数和定义域,判定两个函数是否构造为复合函数。
  3. 求 python3.8 有条件的递增方法
  4. 如何让python的//运算得到一个小数点不是0的结果
  5. 关于#matlab# #算法# #python#的问题:校园导航制作
  6. python的字典编程练习。!
  7. Python类的实例化应用实现输入打印
  8. python的字典编程练习,!
  9. 调试来自于逐飞的MM32F3277移植有MicroPython开发板
  10. 求 python3.8 有条件的递增递减算法
  11. 如何才能在python中实现动态宽度对齐输出
  12. 14道Python基础练习题(附答案)
  13. python写一个正则,匹配内容以“关于”,(代转)开头的那句话,要怎么写正则?
  14. 来个Python能做的救救孩子.
  15. Python爬虫,写完程序获取不到结果,
  16. python for循环和while循环打印九九乘法表
  17. Python异常
  18. Python请设计一能产生某月份月历的程序,能提示用 户输入某月份第1天是星期几,并将该月份的月历打印出来,求
  19. Python入门语法(简洁不啰嗦)
  20. Python入门与各种系统安装部署应用
  21. 你只认识大众汽车的车标怎么能行?赶紧用python采集所有车标学习一下
  22. python回文词如何以文件形式解决python问题
  23. 工作排程中Bat调用Python 程式无发打开(一闪而过)?
  24. python题目不会写求朋友们帮帮忙
  25. pythonwx内进行for循环导致窗体未响应
  26. Python自动化测试框架,谁才是你的唯一?
  27. 如何删除anaconda文件夹里的python.exe
  28. python爬取数据报错求解决一下
  29. Python编写程序求复利率,复利计算公式为
  30. 每周最怕编程课,懂python的朋友看看我吧
  31. 使用python批量将csv文件转为txt文件
  32. 用python写程序!!救命!!
  33. Python编写程序,输入年龄和出生年份,输入姓名和年龄
  34. Python爬虫,关于Xpath定位与预期不符
  35. python 批量计算的数据 print()到console的数据如何全部保存到指定路径文档,目前只能保存最后一个文件的
  36. 安装Python时出现错误:显示发现windows7 怎么弄
  37. 关于python中的PiP升级,尝试过很多遍了还是这个问题
  38. 这个怎么整啊,刚接触python
  39. 用python做图形旋转,opencv如何自动旋转图片到正常的水平位置
  40. Python零基础入门:字符串使用详解(常用方法及使用案例)
  41. Python Qt GUI设计:QPrinter打印图片类(基础篇—21)
  42. python中一维数组怎么转置
  43. 遇到一个问题,关于Python的复数的
  44. python批量将文件夹里的csv文件转成txt文件
  45. Python 彻底搞懂列表推导式|初级到进阶(实例30+)
  46. python爬虫,遇到urllib.error.URLError: <urlopen error [Errno 11001] getaddrinfo failed>错误
  47. Python程序设计输入五到十之间的整数n,生成并输出一个n位的验证码,不能把大小写字母和数字全写出来
  48. python程序打包之后没运行tkinter
  49. python提取多个Excel文件内目的格内容按一定格式写入新的Excel。
  50. pandas读取csv文件文件末尾都是NaN值,发生了什么?
  51. Python使用matplotlib可视化自定义背景色实战:自定义可视化图像的背景色(Background Color)
  52. 大学生Python实验的列表与元组
  53. python 关于线程的参数args的问题
  54. 如何用python将pdf转成网页html的格式
  55. python基础题 运行后卡在某一步 随后电脑疯狂运转发声 等待无果
  56. 求大神教怎么用python写字
  57. 云计算开发:Python3-expandtabs()方法详解
  58. 9000字深度整理: 全网最详细 Pandas 合并数据集操作总结!
  59. python这个代码有错误,请帮我修改
  60. python redis自带门神 lock 方法