Class Autocallable
Structure priced here (single underlier, the classic form):
- Observation dates
observationYears[i]; at each, ifS ≥ autocallBarrier × S₀: redeem notional + the coupon for that period, plus any previously missed coupons whenmemoryCouponsis set (the "Phoenix memory" feature); - At each observation where
S ≥ couponBarrier × S₀but below the autocall barrier: pay the coupon, note continues; - At maturity (the last observation) without autocall: redeem
notional if
S_T ≥ knockInBarrier × S₀, else redeemnotional × S_T/S₀— the equity loss.
Model honesty. Monte Carlo under Black-Scholes GBM with flat
volatility and rates — the standard first pricer, NOT a desk-grade
one: real autocall books are priced on local/stochastic vol because
the knock-in put is deeply smile-sensitive (feed a vol appropriate to
the downside strike region, e.g. from VolSurface, as a
first-order correction). European knock-in (observed at maturity
only), observation-date monitoring (no continuous barriers), no
issuer credit spread — each a documented simplification. Antithetic
variates halve the variance; a fixed seed makes every price
reproducible and every test exact.
Immutable and thread-safe; construction validates, price(double, double, double, double, double, int, long)
allocates only its path scratch (research lane).
-
Constructor Summary
ConstructorsConstructorDescriptionAutocallable(double notional, double[] observationYears, double autocallBarrier, double couponBarrier, double knockInBarrier, double couponPerPeriod, boolean memoryCoupons) -
Method Summary
-
Constructor Details
-
Autocallable
public Autocallable(double notional, double[] observationYears, double autocallBarrier, double couponBarrier, double knockInBarrier, double couponPerPeriod, boolean memoryCoupons) - Parameters:
notional- redemption amount, e.g. 1_000_000observationYears- strictly increasing observation times in years; the last is maturityautocallBarrier- autocall trigger as a fraction of initial spot, e.g. 1.00couponBarrier- coupon trigger as a fraction of initial spot, ≤ autocallBarrier, e.g. 0.80knockInBarrier- protection barrier as a fraction of initial spot, e.g. 0.60couponPerPeriod- coupon per observation period as a fraction of notional, e.g. 0.02memoryCoupons- missed coupons are caught up at the next paying observation (Phoenix memory)
-
-
Method Details
-
price
public double price(double spot, double initial, double vol, double rate, double divYield, int paths, long seed) Monte Carlo present value under GBM.- Parameters:
spot- current underlier level (S₀ for a new issue)initial- the strike-setting initial level S₀ (equal tospotat issue; differs for a seasoned note)vol- Black-Scholes volatility, per √year — pick it from the downside smile region, not ATM (see class doc)rate- continuously-compounded discount ratedivYield- continuous dividend yieldpaths- Monte Carlo paths (antithetic: 2 per draw), e.g. 100_000seed- RNG seed — fixed seed = reproducible price
-
notional
public double notional() -
observations
public int observations()
-