python 基金数据分析_基金定投是最大的投资骗局(Python数据分析专题一)

最近几年微信公众号、头条、微博好多地方都有人喂鸡汤,基金定投财富自由什么的,我今天仔细做了下分析,根本就是骗人的。 先说结果,无脑基金定投别说跑不赢通胀,连银行定期存款都跑不赢,不择时不止盈的定投不可取。

这次专题就是利用python的数据分析功能计算基金定投的收益,这个专题比较简单,适合python数据分析入门的伙伴,下个专题我再往深的做,研究如果用python计算最佳的基金定投策略。

数据源:通过API接口从网易财经上进行调取http://quotes.money.163.com/service/chddata.html?code=0000016&start=19901219&end=20200228&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;VOTURNOVER;VATURNOVER​quotes.money.163.com

直接成为链接了,我加上引号‘http://quotes.money.163.com/service/chddata.html?code=0000016&start=19901219&end=20200228&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;VOTURNOVER;VATURNOVER’ 这里0000001指的是上证指数。注意这串数字要分0和000001两部分看。0代表sh,1代表sz。所以0000001其实是sh000001的意思。同理,0 000300也就是sh000300 沪深300的代码。后面的start和end没什么问题。fields选项中,TCLOSE,HIGH,LOW,TOPEN分别表示当日的收盘,最高,最低,开盘价;LCLOSE表示昨日收盘价。CHG,PCHG,VOTURNOVER,VAT分别表示涨跌额,涨跌幅,成交量,成交金额。

取到数据后,然后我们用python写程序来计算定投的收益。

首先先把需要的模块调用起来

import operator as op

from datetime import datetime,timedelta

这两句是调用两个模块,op那个是运算符, datetime是时间 后面timedelta是时间格式 python最大的优点就是很多的模块里面有很多的函数可以直接使用,不再需要自己编写。

接下来需要一个读取数据的函数,我把数据源文件都放到一个专门的文件夹里方便调取。

(我直接截图吧,程序黏贴过来格式就变了)这个函数主要就是读取数据,并且取出我们需要的对应列的数值。这个函数是购买基金函数,date投资日期,amount投资金额,data指数的日志索引函数,用来获取最终的指数值投资函数,feq是几天投资一次

前面三个函数其实都是给 invest函数服务的,我们最终的变量输入也是直接传递到invest函数里面的,下面就是具体输入和计算的代码。具体验证时很简单,我们就改start_date和end_date 还有1000和14这两个值就可以,需要计算其他指数时就把第一个参数0000001改为对应的指数代码就可以

先看个10年的对比:

定投10年上证指数,累计的收益率仅仅10.33%,如果按照复利算,每年不到1%

再看20年上证指数,收益率能高一点,但是20年累计不到40%,这不是在开玩笑么?5年定期存款基准利率都年化3.6了。。。。。

然后我们在看下深证指数10年累计收益19.26%比上证略高,20年达到了90%,恭喜终于跑赢了银行定期存款。(其实银行定期存款计算复利20年也能超过90%的)

接下来看下创业板,创业板就只有10年的了,创业板10年收益率达到了75%。

好了,可以做个大概的总结了,有兴趣的伙伴可以把上证50 沪深300 创业板50 中证100等等指数都算一遍,我简单说下我的总结。

无脑定投不可取,波动越激烈的指数,定投收益率越高,如果不想操心建议定投创业板,未来有科创板基金建议定投科创板+创业板。

这期简单介绍了一个python计算基金定投收益的方法,python还是挺好用的,如果你用excel自己算恐怕要算死了,代码其实很简单也很好理解。下一期我计划用python尝试去找出最佳的定投投资策略。下面是本期的代码

import operator as op

from datetime import datetime,timedelta

def load(index_no, start_date, end_date):

file = 'D:/python/' + index_no + '.csv'

f = open(file,'r')

indices = {}

for line in f.readlines():

arr = line.strip().split(',')

dt = arr[0]

indices[arr[0]] = arr[3]

return indices

def purchase(date, amount, data):

index_value = data[date]

return amount/float(index_value)

def getIndexValue(date,data):

return data[date]

def invest(index_no,start_date, end_date, amount, feq):

data = load(index_no,start_date,end_date)

sd = datetime.strptime(start_date, '%Y-%m-%d')

ed = datetime.strptime(end_date, '%Y-%m-%d')

curr = sd

total_share = 0; total_amount = 0;total_profit=0

last_index = 0

while True:

#如果当天不是交易日,则往后延一天.

while curr.strftime('%Y-%m-%d') not in data.keys():

curr += timedelta(days = 1)

if curr > ed: break

if curr > ed: # 超过结束日期则停止

break

last_index = float(getIndexValue(curr.strftime('%Y-%m-%d'),data))

#购买基金

shares = purchase(curr.strftime('%Y-%m-%d'), amount, data)

total_share += shares

total_amount += amount

#计算下一个投资日期

curr = curr + timedelta(days = feq)

total_profit = last_index*total_share - total_amount

return total_amount,total_profit

start_date = '2010-01-01'

end_date = '2020-02-28'

total_amount,total_profit = invest('399006',start_date, end_date,500,7)

print('起投日期',start_date)

print('结束日期',end_date)

print('总投资额',total_amount)

print('总收益',round(total_profit))

print('投资收益率',round(total_profit/total_amount*100,2),"%")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值