Discount Rate & WACC

This is not investment advice, there is no implication of any guarantee. All investment is risky and you should take advice from actual advisors. EDUCATION ONLY.


Discount Rate

The discount rate is a calculation that allows us to find a company’s intrinsic value and compare it to the asking price. A higher rate means more risk, but higher returns. A lower discount rate is the inverse.


The Weighted Average Cost of Capital, or WACC, is a weighted average of all investments. If you have a diverse portfolio of investments, you need a way to figure out how you are generally performing.


To properly invest, you need to understand value and financial denomination are not the same. The value of money fluctuates all the time, typically decreasing. At the same time, any money not held in a nest egg must be invested to retain value. We use discount rates and weighted averages to understand our positions in growing our value.


Discount Rate

  • n = number of periods

Weighted Average Cost of Capital (WACC)

E = Market value of equity

D = Market value of debt

V = E +D

Re = Equity Cost

Rd = Cost of debt

Tc = Corporate tax rate

Python Code

Discount Value Code - Simple Calculation

We want to start with the simplest exploration of our concept. Let’s take in our expected future value, our present value, and the number of periods

def simple_discount_rate(PV,FV,n):
  dr = (((FV/PV)**(1/n))-1)
  return dr



WACC Code - Simple Calculation

I’m going to simplify the WACC Calculation a bit for simplicity sake. Let’s say we have a portfolio of investments, each with a different return.

Portfolio Example

Investment NameDiscount Rate% of Portfolio
import numpy as np
import pandas as pd
calc = []

investments = pd.DataFrame(np.array([['Stocks', .1, .5], ['Bonds', .04, .3], ['House', .02, .2]]),
                   columns=['Investment Name', 'Discount Rate', '% of Portfolio'])

def simple_wacc(investments_table):
  for n in investments_table.index:
    DR = float(investments_table.loc[n]["Discount Rate"])
    PP = float(investments_table.loc[n]["% of Portfolio"])
    calc.append(DR * PP)
  return sum(calc)

#.066 or 6.6%