量化入门系列:如何用Python做一个基金定投的回测模型

数据科学实战

共 2208字,需浏览 5分钟

 ·

2021-11-27 13:22


本系列通过实例来介绍量化的入门知识,适合零基础的初学者。本文的量化环境基于Python和AKShare数据接口,安装教程见文末附录。


上一篇文章《如何用EXCEL做一个基金定投的回测模型》用excel建立了一个基础版的定投回测模型,先来回顾一下建模的思路,量化只是工具,会使用工具当然重要,但更重要的是有清晰的思路。整个模型最重要的,就是要得出下面这样图:



这张图上的两条曲线是投入成本和持仓价值,持仓价值在投入成本之上为盈利,反之为亏损,有了这两个数据,就能判断这个策略是不是可行。投入成本是每期定投金额的累计数;持仓价值等于持仓数量乘上当天的收盘价,而持仓数量是每期买入数量的累计数。思路清晰了,建立这个回测模型其实是很简单的事情。


本篇用Python来实现这个模型,首先是导入需要的库:


import akshare as ak    # 导入AKShare数据源import pandas as pd    # 导入pandas库import datetime     # 导入datetime库

然后用AKShare的 ak.stock_zh_index_daily() 数据接口来获取沪深300历史行情数据中的交易日期date和收盘价close这两列,并筛选定投开始日(2015年6月1日)之后的数据:


hs300_df = ak.stock_zh_index_daily(symbol="sh000300")[['date','close']]    # 取沪深300的历史行情数据,只需要日期date和收盘价close这两列数据hs300_df = hs300_df[hs300_df['date']>datetime.date(2015,6,1)].set_index('date')    # 筛选201561日之后的数据,并将日期date设为索引


获取完数据后,开始建立定投回测模型:

fees = 0.001    # 交易手续费率设为千分之一hs300_df['每期定投金额'] = 100    # 每天定投100元hs300_df['累计定投金额'] = hs300_df['每期定投金额'].cumsum()    #‘每期定投金额’的累计值hs300_df['每期定投数量'] = hs300_df['每期定投金额']/hs300_df['close']*(1-fees)    # 每期能买到的股数hs300_df['累计持有数量'] = hs300_df['每期定投数量'].cumsum()    #‘每期定投数量’的累计值hs300_df['累计持仓净值'] = hs300_df['累计持有数量']*hs300_df['close']    # 所持有的全部基金当天收盘后的价值


hs300_df['xxxx'] 的作用是为 hs300_df 这个DataFrame表格新增一列,每列的含义是:


每期定投金额:设定为每天投100元。


累计定投金额:为‘每期定投金额’的累计值,用 .cumsum() 这个函数来计算累计求和。


每期定投数量:每期定投金额 ÷ 当天的收盘价 × (1-交易手续费率)


累计持有数量:为‘每期定投数量’的累计值,用 .cumsum() 这个函数来计算累计求和。


累计持仓净值:累计持有数量 × 当天的收盘价


这几列的内容在上篇文章说过,就不详细说了。


做完后用print函数将 hs300_df 显示出来:


print (hs300_df)


对比下上篇文章中的excel表格,是一摸一样的。


最后用一行代码把‘累计定投金额’和‘累计持仓净值’这两条曲线画出来:


hs300_df[['累计定投金额','累计持仓净值']].plot(figsize=(16,8),grid=True,title='定投的资金曲线图')    # 画图


蓝线为累计定投金额,也就是资金成本;橘线为累计持仓净值。当橘线在蓝线之下时,表明投资出现亏损,反之就是盈利。


下图为沪深300在定投期间的行情,几起几伏,如果是一次性买入,现在还没有回本,但定投已经实现了7.33%的年化收益率(具体计算见上一篇文章),这就是定投的机制在起作用。



这是一个基础版的定投回测模型,下篇文章介绍如何实现一个加强版的定投回测模型:将指数的估值百分位用在定投中,在估值低时多投点,在估值高时少投点。


本文涉及的AKShare数据接口的参数、输出、示例的说明文档如下,建议仔细读一下,对理解获取数据的程序代码很有好处。


指数历史行情数据:

https://www.akshare.xyz/data/index/index.html#section-4


量化投资系列的文章:


1. 量化入门系列:用Anaconda和AKShare搭建免费的Python量化环境

2. 量化入门系列:四行代码实现A股的估值温度计

3. 量化入门系列:沪深300、中证500、中证1000的估值百分位

4. 量化入门系列:行业指数、主题指数、风格指数的估值温度计

5. 量化入门系列:如何用EXCEL做一个基金定投的回测模型



浏览 129
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报