基金定投常见的一种方式是定期定额投资,即每周或每月固定的时间段,向基金公司申购固定份额的基金。基金定投可以平均成本、分散风险,实现自动投资,所以基金定投又称为“懒人投资术”。今天主要用python带大家分析一下,从统计数据上来看,到底什么时候定投获得收益的概率最大。

(本文为学习讨论,不作为投资建议)

整体思路:选取一定的时间段,分别模拟周一至周五定投,比较最终受益情况,确定基金定投最适宜的时间。

下面开始详细介绍:

第一步:网站分析,分析数据交换url

以天天基金网为例,随便找一只基金

打开Chrome自带的开发者工具,点击下一页,从 Network 分页里找到数据传输接口(关于开发者工具的使用,可参见 Crossin:爬虫必备工具,掌握它就解决了一半的问题)

点击此请求,打开响应数据

就是它没错了,接着我们看看该url的参数

Callback可以忽略,fundcode为该基金代码,pageIndex为当前页码,pageSize为返回数据条数,这里一次返回20条,startData和endData分别为起始时间和终止时间,但是都为空值,最后一个参数也不用管。

第二步:requests模拟请求,得到数据

正常情况,应该是for循环,一页一页的取数据,但是我们从第一步可以看到,该url参数中含有起始、截止时间,那我们可以试试,能不能忽略页码信息,以时间为截点得到返回数据,改一下url结构,开始模拟请求:

startDate = '2018-01-13'  #起始时间
endDate = '2020-02-28'   #截止时间
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0','Referer': 'http://fundf10.eastmoney.com/jjjz_{0}.html'.format(fundCode)
}
url = 'http://api.fund.eastmoney.com/f10/lsjz?fundCode={0}&pageIndex={1}&pageSize=5000&startDate={2}&endDate={3}&_=1555586870418?'.format(fundCode, pageIndex, startDate, endDate)
response = requests.get(url, headers=header)
result=json.loads(response.text)
print(result)
for j in result['Data']['LSJZList']:print(j)

返回数据为

确实能按此url结构返回数据,但是貌似只有20条,起初还以为是网站接口限制问题,最后发现是pageSize没有设置,索性直接设置为5000,再来一次

这样就全出来了。

第三步:构造模型,模拟定投计算最终收益

具体过程如下:

先将日期转换为星期,然后将周一至周五分类,以周五定投为例,每次定投100,将每次定投金额按当天净值转化为份额,然后与之前份额累加:

total = [0] * 5   # 到期后总份额
count = [0] * 5   # 每日定投次数
for j in result['Data']['LSJZList'][::-1]:if j['JZZZL']=='':passelse:weekday = int(datetime.strptime(j['FSRQ'], '%Y-%m-%d').weekday())DWJZ = float(j['DWJZ'])   # 净值        total[weekday] = total[weekday]+money/DWJZcount[weekday] += 1

最后根据最后的净值将份额转化为金额:

total_money=[]   #根据份额算出总金额
for t, i in enumerate(total):total_money.append(i*DWJZ)print("周{0}定投最终金额{1}".format(t+1, i*DWJZ), "定投{0}次".format(count[t]))

返回结果:

周1定投最终金额10702.031523199748 定投87次
周2定投最终金额10916.721436831616 定投89次
周3定投最终金额10762.509365370352 定投87次
周4定投最终金额10880.683965470516 定投88次
周5定投最终金额10375.517539233546 定投84次

第四步:用matplotlib画柱状图

1.首先设置正常显示中文标签,SimHei为中文字体,用plt.figure建1个15x8的画布,设置标题内容、字体颜色、字体粗细及大小

plt.rcParams['font.sans-serif'] = ['SimHei']  # windows 用来正常显示中文标签
# plt.rcParams["font.family"] = 'Arial Unicode MS'  # mac 用来正常显示中文标签
plt.figure(figsize=(15, 10), dpi=80)
plt.title('{0}基金模拟定投收益图'.format(fundCode), color='blue', fontweight=800, size=50)
profit_list = [round((i-100*j)/(100*j), 4) for i, j in zip(total_money, count)]  # 到期后总收益率

效果如下:

2.然后用plt.bar画柱状图大小,第一个代表该日增长的概率,第二个为该日累计增长的收益,plt.bar内的label参数为图签,但是要用plt.legend放止图签与图像重合显示不出来,调整y轴坐标范围以便于查看,最后设置坐标轴粗细。

name_list = ['周一', '周二', '周三', '周四', '周五']
x = range(len(name_list))
minytick=int(min(total_money))-1000
maxytick=int(max(total_money))+1000
plt.bar(x, [i for i in total_money], label='该日定投最终收益', width=0.4, color='y')
# 参数 m、m2、r 用来调整高度比例
m = sum(total_money) / 5
m2 = min(profit_list)
r = 50000
plt.bar([i+0.4 for i in x], [(i-m2)*r + m for i in profit_list], label='该日定投收益率', width=0.4, color='r')
plt.legend(loc="upper left")  # 防止label和图像重合显示不出来
plt.xticks(x, name_list, size=20)   # x坐标
plt.ylim(minytick, maxytick)
plt.yticks(range(minytick, maxytick, 200), size=20) # y坐标
ax = plt.gca();#获得坐标轴的句柄
ax.spines['left'].set_linewidth(3) ; ####设置左边坐标轴的粗细
ax.spines['bottom'].set_linewidth(3) ; ###设置底部坐标轴的粗细

3.完善标签、网格、文字等设置

for a, b, c in zip(x, total_money, count):plt.text(a, b+0.05, '%.1f' % b, ha='center', va='bottom', fontsize=15)plt.text(a, b+100, '定投{}次'.format(c), ha='center', va='bottom', fontsize=15, color='r')
for a, b in zip(x, profit_list):plt.text(a+0.4, (b-m2)*r + m, '%.4f' % b, ha='center', va='bottom', fontsize=15)plt.text(2, maxytick+300, '时间:{0}至{1}'.format(startDate, endDate), fontsize=20)
plt.grid(axis="y")  #生成网格'''

第五步:统计分析

我们先多尝试几只不同基金不同时段的情况,画出直方图:

仅从几个个例很难看出什么规律。所以进一步的,我们随机选10支基金,再随机选10个时间段,画出收益分布的散点图,并计算出平均值:

从上述的统计结果中来看,周四、五定投的收益通常要大于周一、周二定投的收益。

不过我们这里选取的数据量并不多,你也可以自己在代码中增加更多的基金代码和时间来测试。

当然咯,此演示结果仅作为参考,股市变化莫测,不可能完全预测,请大家谨慎操作。

------

欢迎搜索及关注:Crossin的编程教室

这里还有更多精彩。一起学,走得远

python 获取当前是星期几_基金定投选星期几更划算?[python统计分析]相关推荐

  1. python基金预测分析_基金定投选星期几更划算?[python统计分析]

    基金定投常见的一种方式是定期定额投资,即每周或每月固定的时间段,向基金公司申购固定份额的基金.基金定投可以平均成本.分散风险,实现自动投资,所以基金定投又称为"懒人投资术".今天主 ...

  2. python获取所有a股股票代码_股票量化分析(一)获取A股列表

    2015年的股市是当下的热门话题,同事的朋友弄了一个简单的弹股吐槽单页面单日PV就能达30W+ ,相当于本博客一年的PV量.所以站在技术角度,这里也写几篇关于股票技术面的文章.首先本篇先从获取A股列表 ...

  3. 每个python对象都具有布尔值_百度T7架构师透析Python对象你需要知道这些

    1. Python对象 Python使用对象模型来存储数据.构造任何类型的值都是一个对象. 所有的Python对象都拥有三个特性:身份,类型和值. 身份: 每一个对象都有一个唯一的身份标识自己,任何对 ...

  4. python脚本自动消除安卓版_微信跳一跳脚本重出江湖,python实现安卓iOS自动版与手动版!...

    前面一段时间在GitHub上看到有人利用Python玩一款名为"跳一跳"的微信小程序,于是打算自己也来试一试,毕竟这款小游戏最近吸引了众多人的目光. 演示工具 电脑系统:Win10 ...

  5. python编写代码避免内存增加_读书笔记(6): 编写高质量python代码的59个有效方法-完结...

    前言 <编写高质量python代码的59个有效方法>这本书分类逐条地介绍了编写python代码的有效思路和方法,对理解python和提高编程效率有一定的帮助.本笔记简要整理其中的重要方法. ...

  6. python 实现跳一跳自动化代码_微信跳一跳脚本重出江湖,python实现安卓iOS自动版与手动版!...

    前面一段时间在GitHub上看到有人利用Python玩一款名为"跳一跳"的微信小程序,于是打算自己也来试一试,毕竟这款小游戏最近吸引了众多人的目光. 演示工具 电脑系统:Win10 ...

  7. python实现异步的几种方式_终于搞明白了,异步Python比同步Python究竟快在哪里?...

    大家好,你是否听人们说过,异步 Python 代码比"普通(或同步)Python 代码更快? 果真是那样吗? 同步和异步是什么意思? Web 应用程序通常要处理许多请求,这些请求在短时间内来 ...

  8. 用vs写python和c++需要哪些工具包_从运行效率与开发效率比较Python和C++

    之前有人一直在说python怎么怎么好用,也有人说C++太难了,下面我做了一些笔记: 1.运行效率:C++ >> Python Python代码和C++最终都会变成CPU指令来跑,但一般情 ...

  9. python人工智能入门优达视频_机器学习:优达教你搭建Python 环境的正确姿势

    原标题:机器学习:优达教你搭建Python 环境的正确姿势 为机器学习搭建好 Python 环境听起来简单,但有时候坑还不少.如果此前没有配置过类似的环境,很可能会苦苦折腾各种命令好几个小时.可是我明 ...

最新文章

  1. 用单片机普通IO口(不用ADC功能)采集模拟量
  2. 2.3.8 mysql安全之审计
  3. NAT的extendable参数,使得一个地址被不同接口NAT出去测试
  4. 对Group_concaT函数利用剖析 (转)
  5. 【数据结构基础】-串-顺序结构的基本操作实现
  6. wget在线扒站程序php源码
  7. 泡泡玛特2021年营收44.9亿元 同比增长78.7%
  8. 如何识别服务器网站有病毒,网站有病毒怎么解决?
  9. 360黑客攻防技术分享会
  10. 图片调整大小后变得不清晰了怎么办?
  11. 【IoT】产品设计:OEM、ODM、EMS 的区别是什么?
  12. 乌云曝光铁道部12306网站出现SQL漏洞
  13. windows server backup功能
  14. HPU图论专项(graph)【拓扑--二分图--最小生成树---树的直径---并查集--奇偶树---最小环---强联通】
  15. iOS-APP-运行时防Crash工具XXShield练就
  16. flv直播流播放视频,websocket响应造成内存泄漏 浏览器崩溃
  17. ITRON入门之任务(TASK)的理解
  18. # Codeforces Round #548 (Div. 2)C Edgy Trees
  19. 英文字母替换加密(大小写转换+后移1位)
  20. Java中的日志级别

热门文章

  1. 75个PPT下载丨2020中国系统架构师大会PPT分享(SACC2020)
  2. AWS RDS强制升级的应对之道——版本升级的最佳实践
  3. Oracle 19c: RAC 集群技术的坚持与放弃(含PPT下载)
  4. 程序媛记一次在线创建索引被kill案例及应对措施
  5. 华为云开天aPaaS 上线,服务千万开发者,使能行业场景化创新
  6. 关于物联网规则引擎技术,你想要知道的都在这儿!
  7. 【万字长文】探讨可信构架之道
  8. 疫情按下快进键,电商抢占市场红利需可靠的助力
  9. 性能优化挑战重重,鲲鹏 HPC 如何突破算力桎梏?
  10. 【华为云技术分享】鲲鹏开发套件:让应用软件迁移调优So Easy