复利计算器存款的可变频率、存款金额和每日可变利率

2024-06-17 13:38:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图建立一个计算器,计算复利,但有一些怪癖。明确地: a) 我希望存款金额在每个月的正态分布范围内变化,直到投资结束 b) 我希望每天的利率在正态分布范围内变化,直到投资结束

我从基础开始:

    # -*- coding: utf-8 -*-
    """
    Spyder Editor

    This is a temporary script file.
    """
    import numpy as np
    from tabulate import tabulate
    tabulate.PRESERVE_WHITESPACE = True
    year = 1
    Principal = 1050
    Prev_Principal = 0
    n = 365
    Total_New = 0
    FV_prev = 0
    
    for year in range(1,5):
        RoR = 0.01*np.random.normal(7.43,4.172,1)
        PMT = np.random.normal(575,85.39,1)
        FV = PMT*(12/n)*((1+(RoR/n))**(n*year)-1)/(RoR/n)
        Total = FV + Principal*(1+(RoR/n))**(n*year)
        Total_New  = Total - Total_New
        Net_Gain = Total - (year*12*PMT+Principal)
        print(tabulate([["YEAR","FV","TOTAL","CI", "R%"],[year,np.round(FV,1),np.round(Total,1),np.round(Net_Gain,1),np.round(100*RoR,1)]], headers="firstrow", tablefmt='fancy_grid'))

这个基本版本只输出年底的金额,包括利息以及按年计算的净利息。不幸的是,尽管它改变了利率,但它每年只改变一次。我计划做以下工作,但我不确定它是否正确,无论是在编程方面还是在数学方面。所以我想拿这些:

        FV = PMT*(12/n)*((1+(RoR/n))-1)/(RoR/n)
        Total = FV + Principal*(1+(RoR/n))**(n*year)

和使用 RoR_数组=0.01*np.随机.正常(7.43,4.172365) math.prod((1+RoR_数组/365))

使用RoR_阵列,我基本上尝试创建一个包含365个元素的1D光线,一年中的每一天一个,表示每日利率。 通过“math prod”,我试图克服以下问题: 如果n=365,这意味着该年的利息是固定的,因此每天复利

    Total = FV + Principal*(1+(RoR/365))**(365*1)

但是既然我想要一个可变的每日RoR,那么最好的方法是什么? 因此我使用math.prod