利用Python使基金定投收益最大
目录
序言
准备工作:
定投频率与收益
日定投
周定投
月定投
涨日与跌日
涨日定投
跌日定投
序言
博主最近沉迷理财,为了不使编程功力减退,特此使用python分析基金定投,文章不会推荐理财产品,各位看看就好。
准备工作:
- 某指数,某基金的历史业绩,爬虫,复制皆可
- python3环境,编译器
定投频率与收益
数据选取的是2018年到2019年9月间的微笑曲线
日定投
定投400个交易日,每日都定投
周定投
每周定投一次,80周
月定投
每月按20交易日算,定投20个月
频率越低收益越高,但三种定投收益相差不超过1%,大多数情况下是频率越高,收益越高,主要与波型有关。
对于如下的波形,日频能够在低点买入,但是周&月频率则较大概率在高点买入,所以日频定投更好
如下波形的微笑曲线,正好与上面相反,日頻不会错过所有高点,而其他两种定投较大概率在低点买入。
涨日与跌日
这里定投就需要每日看盘了,分为涨日买进和跌日买进,定投次数不定,每次金额固定
涨日定投
跌日定投
跌日买进要比涨日买进收益高3%
import pandas as pd
import matplotlib.pyplot as plt
from pylab import mpl
from pandas.plotting import lag_plotdef Cast_Surely(count_list,cast_count,cast_fre,money):#普通定投#count_list 净值序列#money 本金#cast_count 定投次数#cast_fre 定投频率once_cost = money/cast_count #单笔定投金额final_count = count_list[len(count_list)-1] #结束定投净值Share_count = 0 #持有份额mark_count = 0 #上一次定投索引cast_x = [] #定投时间cast_y = [] #定投价格for i in range(len(count_list)):if i == 0:Share_count = once_cost/count_list[i]cast_x.append(i)cast_y.append(count_list[i])elif i-cast_fre == mark_count and i < cast_count*cast_fre:Share_count = Share_count + once_cost/count_list[i]cast_x.append(i)cast_y.append(count_list[i])mark_count = i #标记本次定投位置InCome_final = Share_count*final_count #最终收益return [money,InCome_final,(InCome_final/money-1)*100,cast_x,cast_y]def Cast_Surely_1(data,cast_fre,money):# 涨跌投#count_list 净值数据#money 本金#cast_fre 定投频率count_list = data['收盘']ware_list = data['涨跌幅']final_count = count_list[len(count_list)-1] #结束定投净值Share_count_up = 0 #涨持有份额Share_count_down = 0 #跌持有份额cast_up_x = [] #涨定投时间cast_up_y = [] #涨定投价格cast_down_x = [] #跌定投时间cast_down_y = [] #跌定投价格up_count = 0down_count = 0for i in range(len(count_list)):if ware_list[i] > 0:up_count = up_count + 1elif ware_list[i] < 0:down_count = down_count + 1for i in range(len(count_list)):if ware_list[i] > 0:Share_count_up = money/up_count/count_list[i] + Share_count_upcast_up_x.append(i)cast_up_y.append(count_list[i])elif ware_list[i] < 0:Share_count_down = money/down_count/count_list[i] + Share_count_downcast_down_x.append(i)cast_down_y.append(count_list[i])InCome_final_up = Share_count_up * final_count # 涨最终收益InCome_final_down = Share_count_down * final_count # 跌最终收益return [[money,InCome_final_down,(InCome_final_down/money-1)*100,cast_down_x,cast_down_y],[money,InCome_final_up,(InCome_final_up/money-1)*100,cast_up_x,cast_up_y]]def readfile(file_name):path = 'E:\DataAnalysis\project\money_analysis\Fund_analysis\\'+file_name+'.xls'data = pd.read_excel(path, index_col='时间',sheet_name='上证50指数A')return datadef plotMA(pandas_data,other1,other2,plot_name,a,b,c):title_name = '定投次数:' + str(a) + ' 交易频率:' + str(b) + ' 持有收益率:' + str(c) + '%'fig, ax = plt.subplots()ax.scatter(other1, other2, c='r',label = '投资时刻')ax.plot(range(len(pandas_data['收盘'])), pandas_data['收盘'], 'g--',label=plot_name)plt.xlabel('交易日')plt.ylabel('价值')plt.title(title_name)plt.legend()mpl.rcParams['font.sans-serif'] = ['SimHei']plt.savefig('E:\DataAnalysis\project\money_analysis\Fund_analysis\common\\'+str(a)+'_'+str(b)+'.png')plt.show()'''
filename = '数据'
data = readfile(filename)['2018':]
CS_count = 20
CS_fre = 20
money = 10000Result = Cast_Surely(data['收盘'],CS_count,CS_fre,money)
plotMA(data.copy(),Result[3],Result[4],filename,CS_count,CS_fre,Result[2])
''''''
filename = '数据'
data = readfile(filename)['2018':]
CS_count = 'down'
CS_fre = '跌日'
money = 10000
Result = Cast_Surely_1(data,CS_fre,money)
plotMA(data.copy(),Result[0][3],Result[0][4],filename,CS_count,CS_fre,Result[0][2])
#plotMA(data.copy(),Result[1][3],Result[1][4],filename,CS_count,CS_fre,Result[1][2])
'''
利用Python使基金定投收益最大相关推荐
- 黑科技编程开发,利用Python使图片完美去除水印
网上下载的 pdf 学习资料有一些会带有水印,非常影响阅读.比如下面的图片就是在 pdf 文件上截取出来的. 安装模块 PIL:Python Imaging Library 是 python 上非常强 ...
- python eel 多线程_利用Eel使JavaScript调用Python程序
利用Eel使JavaScript调用Python程序 Eel简介 Eel是一个轻量的python桌面GUI开发第三方库, 它使用HTML/JS作为界面开发语言, 但是能够访问所有的python功能, ...
- 怎么用python找论文_如何利用Python绘制学术论文图表方法
论文中图表形式多样,常用的处理工具有excel.MATLAB以及Python等,excel自处理的方法有两个缺陷: 1.当数据较多时,容易出现excel"翻白眼"的现象: 2.需要 ...
- NLP实战:利用Python理解、分析和生成文本 | 赠书
导读:本文内容参考自<自然语言处理实战:利用Python理解.分析和生成文本>一书,由Hobson Lane等人所著. 本书是介绍自然语言处理(NLP)和深度学习的实战书.NLP已成为深度 ...
- python个人博客搭建说明书_技术分享|利用Python Django一步步搭建个人博客(二)...
原标题:技术分享|利用Python Django一步步搭建个人博客(二) Hello,欢迎来到我们的"利用Python Django一步步搭建个人博客"系列的第二部分.在第一部分中 ...
- python对数据进行合并的函数_利用Python pandas对Excel进行合并的方法示例
前言 在网上找了很多Python处理Excel的方法和代码,都不是很尽人意,所以自己综合网上各位大佬的方法,自己进行了优化,具体的代码如下. 博主也是新手一枚,代码肯定有很多需要优化的地方,欢迎各位大 ...
- python绘制动态模拟图-如何利用Python动态模拟太阳系运转
前言 提到太阳系,大家可能会想到哥白尼和他的日心说,或是捍卫.发展日心说的斗士布鲁诺,他们像一缕光一样照亮了那个时代的夜空,对历史感兴趣的小伙伴可以深入了解一下,这里就不多说了. 太阳以巨大的引力使周 ...
- python推荐系统-利用python构建一个简单的推荐系统
摘要: 快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫. 本文将利用python构建一个简单的推荐系统,在此之前读者需要对pandas和numpy等数据分析包有所了解. 什 ...
- python怎么判断一个文件是否存在-利用Python如何判断一个文件是否存在
通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先判断文件是否存在. 这里将介绍三种判断文件或文件夹是否存在的方法,分别使用os模块.Try ...
最新文章
- CG游戏道具全流程制作视频教程 Artstation – Stylized Game Asset
- 用户表单事件(focus事件)
- 你真的了解try{ return }finally{}中的return?
- 推荐一个妹子,播报汽车新闻
- ie9 background 不显示
- 使用X.509数字证书加密解密实务(一)-- 证书的获得和管理
- JavaScript将负数转换为正数
- 如何利用SQL Server的事务日志?
- 【转】el-cascade设置默认值遇到的坑!
- 报销金额数字小写转大写 总结
- 电子名片帮助实体服装产业快速融入互联网
- vue 下载文档乱码
- 航天信息服务器共享单元,防伪税控主机共享服务器
- 流年似水 启航2019
- 考研英语 - word-list-26
- SPSS与对应分析(类别简单型)
- win10系统连打印机服务器中,win10连不上打印机怎么回事_win10系统连接不上打印机如何解决...
- 脑机接口技术的现状与未来!
- Flutter Web(一)新建项目和登录页
- SCI论文,你是先写中文再翻译么?