Внедрение калькулятора ренты против покупки New York Times

Я заинтересован в том, чтобы воспроизвести калькулятор ренты против покупки New York Times. Однако я изо всех сил пытаюсь воспроизвести рассчитанные затраты даже в самых простых случаях.

В приведенном ниже примере я пытаюсь воспроизвести "Периодические расходы" в случае "Купить" для настроек по умолчанию, с которых я изменил налог на имущество на ноль, а также для всех других ежемесячных расходов (т. Е. На обслуживание, страхование домовладельца). и ежемесячные коммунальные платежи):

import attr


@attr.s
class RentVsBuyCalculator(object):
    # Home Price
    home_price = attr.ib(default=250000)

    # How Long Do You Plan to Stay?
    stay_years = attr.ib(default=9)

    # What Are Your Mortgage Details?
    mortgage_rate = attr.ib(default=0.0367)
    down_payment = attr.ib(default=0.20)
    mortgage_length = attr.ib(default=30)

    # What does the Future Hold?
    home_price_growth_rate = attr.ib(default=0.03)
    rent_growth_rate = attr.ib(default=0.025)
    investment_return_rate = attr.ib(default=0.04)
    inflation_rate = attr.ib(default=0.02)

    # Taxes
    property_tax_rate = attr.ib(default=0.0135)
    marginal_tax_rate = attr.ib(default=0.20)

    # Closing Costs
    closing_costs_buying = attr.ib(default=0.04)
    closing_costs_selling = attr.ib(default=0.06)

    # Maintenance and Fees
    maintenance = attr.ib(default=0.01)
    homeowners_insurance = attr.ib(default=0.0046)
    monthly_utilities = attr.ib(default=100)

    # Additional Renting Costs
    security_deposit = attr.ib(default=1)       # Number of months security deposit
    brokers_fee = attr.ib(default=0)            # Broker's fee
    renters_insurance = attr.ib(default=0.0132)


    @property
    def annuity(self):
        '''Yearly payment for the mortgage'''
        PV = (1 - self.down_payment) * self.home_price  # Present value of the mortgage
        r = self.mortgage_rate                          # Rate per year
        n = self.mortgage_length                        # Number of years
        return r * PV / (1 - (1 + r)**(-n))

    @staticmethod
    def future_value(P, i, n):
        return P * ((1 + i)**n - 1)/i

    @property
    def recurring_costs_buy(self):
        # Total property tax over years to stay
        property_tax = self.property_tax_rate * \
                       self.future_value(P=self.home_price, i=self.home_price_growth_rate, n=self.stay_years) * \
                       (1 - self.marginal_tax_rate)
        maintenance_and_fees = self.home_price * (self.maintenance + self.homeowners_insurance) + \
                               self.monthly_utilities * 12
        return property_tax + (maintenance_and_fees + self.annuity) * self.stay_years


calc = RentVsBuyCalculator(property_tax_rate=0, 
                           marginal_tax_rate=0, 
                           maintenance=0,
                           homeowners_insurance=0,
                           monthly_utilities=0)

print(calc.annuity)
print(calc.recurring_costs_buy)

Если я запускаю этот скрипт, он печатает

11107.107572459248
99963.96815213324

Первый представляет собой аннуитет, подлежащий выплате в конце каждого года (хотя на практике он распределяется в ежемесячных платежах, но указанная процентная ставка является номинальной процентной ставкой). Я проверил это с помощью калькулятора на http://www.moneychimp.com/calculator/annuity_calculator.htm:

Последняя цифра, 99 964 долл. США, - это сумма, которую я ожидал бы для "Периодических расходов" для сценария "Покупка". Однако, если я запускаю калькулятор, я получаю немного меньшее число, а именно $99,055:

Как калькулятор New York Times приходит на этот номер? Есть что-то, что я пропускаю?

0 ответов

Другие вопросы по тегам