栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

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

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

作者:幻好

来源: 恒生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) - 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元。

总结

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

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/723261.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号