写点什么

【量化】用数据验证巴菲特推荐的指数定投的收益真相

  • 2021 年 12 月 15 日
  • 本文字数:2513 字

    阅读完需:约 8 分钟

作者:幻好

来源:恒生LIGHT云社区


最近几年,越来越多的年轻人开始接触基金,购买基金定投理财,本文将通过数据验证指数定投是否真的有效。

背景简述

1993 年巴菲特在《致投资者的信》中首次提到了他的建议,原话是“通过定期投资指数基金,一个什么都不懂的投资者通常都能打败大部分的专业基金经理”。


定期投资指数基金,指的是在固定的时间,以固定的金额,投资到指定的开放式基金中,这是懒人投资理财的最佳方法。这种方式通过积少成多,聚沙成塔,分散和平摊风险,不会因股票市场的一时波动影响正常的生活和情绪。在交易市场中,由于指数编制的方式,指数上涨是大概率事件,这也符合投资是追求确定性的要义。


通过背景介绍,让我们对于指数定投有了一个基本的理解,然而以上说法都是从概念上对于指数定投的相关理解,如果要让人们真正的信服,还需要有真实的数据作为支撑。

概念介绍

讲到指数定投,就不得不先聊聊经常谈到的重要指数:沪深 300,上证 50,中证 500。对于没了解过的人可能只会认为这是大盘指数,并不知道这三者的关系和区别。


首先我们看看三者之间的关系:


4056


沪深 300 :通常指的是 300 只样本股选自沪深两个证券市场,包含的成分股都是市值大、流动性好的主流股票,可以说沪深 300 能相对较好地反映市场上成熟公司的情况,是最能代表中国股市的指数,被称为 A 股市场走势的“晴雨表”。


上证 50:通常指的是沪市所有股票按照规模和流动性进行排列,然后选取前 50 家企业,最后根据规模和流动性给予一定的加权,计算出相应的指数。


中证 500:通常指的是沪深两市小盘股,样本股是全部 A 股剔除沪深 300 成分股以及总市值排名前 300 名的股票后,总市值靠前的 500 只股票,反映沪深两个市场中小市值公司整体状况的指数。

实践验证

前提概述

通过一个简单的定投策略,在大盘波动大情况下,算出最大收益能达到多少。设置每个月 1 号,拿出 2 千元进行指数定投,然后计算出最终能获得多少收益。为了更直观的展示数据,我们直接使用沪深 300 指数收益模拟指数基金收益。


为了能够凸显出指数收益,我们将定期理财收益也作为数据参照,比如货币基金等理财产品年化收益 3.8%左右,计算收益走势。

数据准备

所需的数据通过【恒有数】获取以下相关参数:


证劵代码    prod_code交易日期    trading_date开盘价      open_price最高价      high_price最低价      low_price收盘价      close_price成交数量    business_amount成交额      business_balance涨跌幅      px_change_rate换手率      turnover_ratio涨跌停状态   up_down_status交易状态    turnover_status
复制代码


获取沪深 300 指数近 10 年的数据,如下:


4057

程序设计

以下为相关计算程序代码:


import pandas as pdimport matplotlib.pyplot as pltimport time
"""param pro_code: 定投的产品代码param start_date: 定投的开始日期param end_date: 定投的结束日期return: 返回每日的投资资金信息"""def investment_regular_plan(pro_code, start_date, end_date): pro_data = pd.read_csv('temp/' + str(pro_code) + '.csv', parse_dates=['交易日期'], index_col=['交易日期']) pro_data = pro_data[['prod_code', 'close_price']].sort_index() pro_data = pro_data[start_date:end_date] # 假设年化无风险利率是 3.8% (货币基金等理财产品) pro_data['无风险利率'] = (3.8 / 100 + 1) ** (1.0 / 250) - 1 pro_data['无风险收益_净值'] = (pro_data['无风险利率'] + 1).cumprod() # 每月第一个交易日定投 by_month = pro_data.resample('M', kind='period').first() # 定投购买指数基金 trade_data = pd.DataFrame(index=by_month.index) # 以指数当天收盘点位除以 2000 作为单位基金净值 trade_data['基金净值'] = by_month['close_price'] / 2000 # 每月月初投入 2000 元申购该指数基金 trade_data['money'] = 2000 # 当月的申购份额 trade_data['基金份额'] = trade_data['money'] / trade_data['基金净值'] # 累积申购份额 trade_data['总基金份额'] = trade_data['基金份额'].cumsum() # 累积投入的资金 trade_data['累计定投资金'] = trade_data['money'].cumsum() # 定投购买余额宝等无风险产品 # 当月的申购份额 trade_data['理财份额'] = trade_data['money'] / by_month['无风险收益_净值'] # 累积申购份额 trade_data['总理财份额'] = trade_data['理财份额'].cumsum() temp = trade_data.resample('D').ffill() pro_data = pro_data.to_period('D') # 计算每个交易日的资产(等于当天的基金份额乘以单位基金净值) daily_data = pd.concat([pro_data, temp[['总基金份额', '总理财份额', '累计定投资金']]], axis=1, join='inner') daily_data['基金定投资金曲线'] = daily_data['close_price'] / 2000 * daily_data['总基金份额'] daily_data['理财定投资金曲线'] = daily_data['无风险收益_净值'] * daily_data['总理财份额'] return daily_data

"""程序开始执行"""if __name__ == '__main__': # 运行程序 df = investment_regular_plan('000001.SH', '2011-01-01', '2021-11-11') print(df[['定投成本累计资金', '基金定投累计资金', '理财定投累计资金']].iloc[[0, -1]])
df[['基金定投累计资金', '理财定投累计资金']].plot(figsize=(12, 6)) df['close_price'].plot(secondary_y=True) plt.rcParams['font.sans-serif'] = ['KaiTi'] plt.legend(['指数行情'], loc='upper right') plt.xlabel('交易日期') plt.show()
复制代码

实践结果

通过最近 10 年的数据模拟指数定投,每月投入 2000 元,从 2011-11-11 到 2021-11-11,累计投入成本:262000 元,定投指数基金最终收益是 333672.802026 元,而购买定期买理财的收益最终是 321289.4334 元。


4058

总结

本文主要通过沪深 300 模拟指数定投的收益结果,验证了指数定投优势,坚持指数定投对于小白来说,是一个不错的选择。


但是指数定投并不能完全保证盈利,这也和国家的经济发展有关,最近 10 年的国家的经济实力越来越强才是关键。


投资有风险,入市须谨慎。

发布于: 3 小时前阅读数: 6
用户头像

还未添加个人签名 2018.11.07 加入

还未添加个人简介

评论

发布
暂无评论
【量化】用数据验证巴菲特推荐的指数定投的收益真相