// Josh Smith
Gallery

// SMITH, JOSHUA: FINANCE_

>

Finance

[MINOR]
PROJECT 01 / 05
Financial Calculator

> /FINANCE

Financial Calculator

Desktop GUI financial calculator built with Python and tkinter for a finance fundamentals course, covering 19 time-value-of-money and fixed-income calculations.

STACK
  • Python
  • tkinter
COURSE / TYPE
  • Finance Fundamentals
  • Personal Project
View on GitHub

// Features08 ITEMS

  • Simple and compound interest: FV, PV, effective rate, unknown rate, unknown time period
  • Multiple and continuous compounding with configurable periods per year
  • Ordinary annuity and annuity due, both FV and PV
  • Bond pricing using coupon payments and face value discounting
  • Constant and growing perpetuity present value
  • Capitalisation rate and value, and credit multiplier
  • Sun Valley themed GUI with per-calculation input forms
  • Packaged as a standalone .exe via GitHub Releases

// Challenges02 LOGGED

CHALLENGE 01

PROBLEM
Covering the full breadth of a finance course in one cohesive tool
SOLUTION
Modular calculation functions mapped to tabbed/sectioned UI panels, each with its own labelled inputs

CHALLENGE 02

PROBLEM
Distributing a Python GUI app without requiring a Python install
SOLUTION
Compiled to a standalone executable and published as a GitHub Release
PROJECT 02 / 05
Portfolio Construction Case Study

> /FINANCE

Portfolio Construction Case Study

10-week investment portfolio built for a climate-conscious NZ client, covering equity valuation, fixed income, derivatives, and portfolio optimisation across NZX-listed assets.

METHODS
  • CAPM
  • DDM
  • Efficient Frontier
COURSE
  • Intro to Investments
View on GitHub

// Features08 ITEMS

  • Client profile: 30–40 year horizon, ethical NZ-focused mandate, 7–9% return target
  • Equity analysis of MCY and GNE using CAPM, DDM, P/E, and dividend yield
  • Green bond (MCY030) priced via YTM approximation and yield curve forward rate derivation
  • NZX50 short futures hedge modelled against GNE long position
  • Efficient frontier constructed across three assets with correlation matrix
  • Infratil (IFT) added as alternative investment; Sharpe ratios compared across all assets
  • Behavioural finance analysis: anchoring bias identified in GNE dividend yield anchoring
  • FinTech week: Python robo-advisor concept using yfinance for screeing ethical tickers at scale

// Challenges04 LOGGED

CHALLENGE 01

PROBLEM
DDM produced a wildly high intrinsic value ($7.30 vs $2.33 market price) for GNE
SOLUTION
Sensitivity analysis exposed extreme fragility (k−g spread of 2.4%); qualitative risk factors and behavioural bias analysis were used to discount the DDM signal

CHALLENGE 02

PROBLEM
Small NZX universe made meaningful diversification difficult within the ethical mandate
SOLUTION
Supplemented with ASX-listed NZ companies and IFT as a listed infrastructure proxy for private real assets

CHALLENGE 03

PROBLEM
NZX50 futures hedge reduced upside disproportionately for a defensive, long-term position
SOLUTION
Concluded the hedge was unsuitable given GNE's low beta (0.23) and the 35-year horizon; Sharpe ratio logic used to justify not hedging

CHALLENGE 04

PROBLEM
AI-based FinTech tools conflict with the client's climate-conscious values
SOLUTION
Proposed a deterministic Python screener using yfinance. auditable, low-cost, and zero AI compute footprint
PROJECT 03 / 05
Inflation-Indexed Bond Pricing Model

> /FINANCE

Inflation-Indexed Bond Pricing Model

Python model visualising the pull-to-par mechanics of an inflation-indexed bond over 25 years, comparing real vs nominal pricing against a conventional fixed-coupon bond.

STACK
  • Python
COURSE
  • Financial Institutions & Markets
View on GitHub

// Features06 ITEMS

  • Quarterly compounding model over 100 periods (25 years) for a $1,000,000 face-value bond
  • Inflation index computed as (1 + inflation)^t, applied to real cash flows to derive nominal price
  • Pull-to-indexed-par visualisation: nominal bond price converges to growing indexed par at maturity
  • Filled area chart highlighting the discount between bond price and indexed par over time
  • Side-by-side comparison of inflation-indexed bond vs conventional nominal bond pull-to-par paths
  • Separate difference plot confirming both bonds converge to zero discount at maturity

// Challenges02 LOGGED

CHALLENGE 01

PROBLEM
Translating real cash flows into nominal prices across an inflation-adjusted timeline
SOLUTION
Applied the CPI index multiplier I(t) = (1 + inflation)^t to the real PV at each period, cleanly separating real yield arithmetic from nominal price reporting

CHALLENGE 02

PROBLEM
Demonstrating the structural difference between indexed and nominal bond behaviour
SOLUTION
Parametrised both bond types with equivalent real/nominal yield spreads (3.285% real vs 5.285% nominal) so the comparison is economically meaningful, not just cosmetic
PROJECT 04 / 05
Equity Research Report: Texas Instruments (TXN)

> /FINANCE

Equity Research Report: Texas Instruments (TXN)

Sell-side style equity research report valuing Texas Instruments with four methods in Excel, reaching a Sell recommendation and a $120.20 price target against a $187.51 market price.

STACK
  • Excel
METHODS
  • DDM
  • DCF
  • CAPM
  • Comparables
COURSE
  • Investment Analysis
Read the report

// Features07 ITEMS

  • Three-stage dividend discount model: analyst EPS growth, a weighted transition, then 1.98% terminal growth from the 2020–2024 revenue CAGR
  • Discounted free cash flow to equity model sharing the same growth path and required return
  • CAPM required return of 11.68% from the 10-year Treasury yield, beta 1.31, and a 10% market return
  • Relative valuation on price-to-EBITDA and price-to-cash-flow against ADI, NXPI, IFX, MPWR and STM
  • Weighted target price: DCF 30%, relative 30%, DDM 20%, analyst consensus 20%
  • Financial analysis of 2022–2024 earnings, cash flow, capex, leverage and interest coverage
  • Supporting spreadsheet with income statement, balance sheet, cash flow, DDM, DCF and comparables tabs

// Challenges03 LOGGED

CHALLENGE 01

PROBLEM
A 99.9% payout ratio left retention near zero, so PRAT and sustainable-growth estimates gave about 0% growth
SOLUTION
Gave both zero weight and drove interim growth from analyst EPS forecasts instead

CHALLENGE 02

PROBLEM
2024 FCFE was depressed by $4.8B of capex on new 300 mm fabs and $2.4B of net borrowing
SOLUTION
Tested a normalised base year (lower capex, no new borrowing) and found the low value came from the growth rate and required return, not the base year

CHALLENGE 03

PROBLEM
Terminal value made up 67% of both absolute valuations, making them sensitive to the terminal growth rate
SOLUTION
Weighted the absolute models alongside relative multiples and analyst consensus, and showed the Sell call holds for any consensus target below $454
PROJECT 05 / 05
Portfolio Optimisation App

> /FINANCE

Portfolio Optimisation App

Android app applying modern portfolio theory to a user's holdings: it pulls two years of daily prices, estimates returns and covariance, and searches for the max-Sharpe or min-volatility portfolio on an efficient frontier.

STACK
  • Kotlin
  • Jetpack Compose
  • Room
METHODS
  • Monte Carlo
COURSE
  • Mobile App Dev
View on GitHub

// Features07 ITEMS

  • Annualised mean returns and covariance matrix from daily adjusted-close returns (252 trading days)
  • Monte Carlo optimiser: 5,000 random portfolios, keeping the max-Sharpe and min-volatility results
  • Efficient frontier chart of every simulated portfolio
  • Portfolio return, volatility, Sharpe ratio, and beta against the S&P 500 (VOO)
  • Constraints for minimum and maximum weights, short selling, and the risk-free rate
  • Universe of stocks, index ETFs, a bond ETF and gold for diversification
  • Background risk check twice a day that alerts when volatility breaks a user-set limit

// Challenges03 LOGGED

CHALLENGE 01

PROBLEM
Assets trade on different days, so their return series did not line up
SOLUTION
Aligned every price history to the dates all assets traded on before computing covariance

CHALLENGE 02

PROBLEM
Random weights had to respect min/max limits and still sum to 100%
SOLUTION
Sampled long-only weights evenly from a Dirichlet(1) distribution, then clipped and redistributed the remainder until the weights fit

CHALLENGE 03

PROBLEM
Checking whether a set of limits is even achievable before optimising
SOLUTION
Feasibility test that n assets can reach 100% within the bounds, e.g. four assets capped at 20% cannot