1. 首页 > 基金定投

基金定投计算器(基金定投收益计算模拟-Java)

本人其实没有金融背景,数学也不好,但我会写点代码,可以让电脑替我算!我就想看看基金定投到底能不能有收益?我最后带入了某支真实存在的基金的数据,拿着支付宝看了3年内的数据。期待一下吧!注:不要用此文参考投资。因为我估计我的代码有bug。

先说我理解的定投原理是啥呢?(直觉告诉我我的理解是错的)

假设:长期价格稳定,手续费什么的为0。那么第一天50块钱(起点),第二天40块钱,第三天60块钱,第四天50块钱(终点)。我每天都花1000块钱定投。那我会得到(1000/50)+(1000/40)+(1000/60)+(1000/50) = 81.67份基金。那么按照期望价格计算,此刻市值 81.67*50 = 4083.5(第一天和最后一天都是陪衬)。但是我总共只花了4000块钱。也就是这四天里,第一天和最后一天价格一样。但是我挣了80块钱?

怎么让我觉得挣钱好容易的样子?干脆代码来模拟一下。

首先价格曲线怎么生成?

/**
     * 生成价格曲线
     *
     * @param basePrice     初始价格
     * @param totalIncrease 周期内总涨幅/跌幅
     * @param dailyIncrease 单日价格浮动
     * @param days          天数
     */
    public List<Double> generatePrices(double basePrice, double totalIncrease, double dailyIncrease, int days) {
        double endPrice = basePrice * (1 + totalIncrease); // 预计最终价格
        double diffTotal = endPrice - basePrice; // 预计最终差价
        double diffAvg = diffTotal / days; // 每日平均差价
        ArrayList<Double> result = new ArrayList<>(days); // 价格曲线
        double currentPrice = basePrice; // 当前价格
        for (int day = 0; day < days; day++) {
            double amplitude = dailyIncrease * currentPrice; // 单日最大浮动
            double diffToday = diffAvg + (new Random().nextDouble() - 0.5) * amplitude * 2; // 期望浮动价格 + 噪声
            double priceToday = currentPrice + diffToday; // 今日最终价格
            result.add(priceToday);
            currentPrice = priceToday;
        }
        return result;
    }

生成数来是啥样呢:

起始价格1000,涨幅期望0,日期望涨跌幅5%,时常一年

可以看到这个波动还是挺大的。为了夸张,设定长期价格增长率期望值是0,日均波动2.5%,每天买入100块钱,最终分别得到了+156,-530 和 +4600的收益。才三个样本,真是没什么用。那我就跑一万年取平均试试。得到结果

一万年基金定投平均年收益:2.4%

平均每年收益2.4%。emm...看来我的价格生成函数有问题。不过不影响我继续玩。带入某实际数据看看。毕竟之前都是假设长期来看,价格是稳定的。实际上价格当然可能是天天血崩的啦。

实际存在的基金数据。图片来自支付宝。
我每月采样一次,绘制出来的图

肯定不准确,但咱们也就预估一下就好。首先根据这个曲线大概计算每月的价格浮动,和月初价格,再使用我的价格曲线生成器。(写完了我才发现我超丢了一个月的价格。没事就这样吧,正好避免这个文章变成投资参考。)

输入每月的月初价格和当月的价格变动(抄丢了一个月,凑活用吧)
 double totalProfit = 0;
        for (int i = 0; i < 10000; i++) {
            double own = 0;
            for (Double pri : price) {
                double todayBuy = DAILY_BUY / pri;
                own = own + todayBuy;
            }
            double totalValue = own * 2010;
            double profit = totalValue - DAILY_BUY * price.size();
            totalProfit += profit;
        }
        double threeYearProfitAvg = totalProfit / 10000;
        System.out.println(threeYearProfitAvg);

这里也是,活了一万辈子在2017-2020之间循环一万次。这里最后结算是用的尾盘价格,就不是之前的预期价格了。得到平均盈利:53085.37299926 和收益率 :0.6521544594504063.

那么问题来了。这个收益到底是定投这个行为导致的,还是本身的涨跌导致的?

提示: 今日价格相比2017年价格,增长101%

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 联系QQ15101117,本站将立刻清除。

联系我们

在线咨询:点击这里给我发消息

微信号:666666