作者:幻好
来源: 恒生LIGHT云社区
最近几年,越来越多的年轻人开始接触基金,购买基金定投理财,本文将通过数据验证指数定投是否真的有效。
背景简述
1993年巴菲特在《致投资者的信》中首次提到了他的建议,原话是“通过定期投资 指数基金 ,一个什么都不懂的投资者通常都能打败大部分的专业基金经理”。
定期投资指数基金,指的是在固定的时间,以固定的金额,投资到指定的开放式基金中,这是懒人投资理财的最佳方法。这种方式通过积少成多,聚沙成塔,分散和平摊风险,不会因股票市场的一时波动影响正常的生活和情绪。在交易市场中,由于指数编制的方式,指数上涨是大概率事件,这也符合投资是追求确定性的要义。
通过背景介绍,让我们对于指数定投有了一个基本的理解,然而以上说法都是从概念上对于指数定投的相关理解,如果要让人们真正的信服,还需要有真实的数据作为支撑。
概念介绍
讲到指数定投,就不得不先聊聊经常谈到的重要指数:沪深300,上证50,中证500。对于没了解过的人可能只会认为这是大盘指数,并不知道这三者的关系和区别。
首先我们看看三者之间的关系:
沪深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年的数据,如下:
程序设计
以下为相关计算程序代码:
import pandas as pd
import matplotlib.pyplot as plt
import 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) - 1pro_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元。
总结
本文主要通过沪深300模拟指数定投的收益结果,验证了指数定投优势,坚持指数定投对于小白来说,是一个不错的选择。
但是指数定投并不能完全保证盈利,这也和国家的经济发展有关,最近10年的国家的经济实力越来越强才是关键。
投资有风险,入市须谨慎。