An option or derivative is a contract giving the owner the right, but not the obligation, to buy (call) or sell (put) an underlying asset at a specified price (aka the strike), on or before a specified date.
call k x = max (x - k) 0
put k x = max (k - x) 0
- Baskets
- an option on a portfolio of underlyings
- Compound options
- Options on other options, e.g. a call on a call
- Path dependent options
- barrier options–payout locked-in when underlying hits trigger
- lookback options–payout based on highest or lowest price during the lookback period
- Asian options–payout derived from average value of underlying over a specified window
- Autocallables–will early redeem if a particular barrier condition is met
- knock-in put
- Sales interact with the customers
- Structurers create new products, often on customer request
- Quants provide mathematical models and formal description of trades (payout functions)
- Risk management validate and sign-off the payout functions
- Traders derive the final price, manage the trade over its lifetime and analyse upcoming events
- Payments systems handle payment events throughout the lifetime of the trade
- \cite{Jones_2000} \citeauthor{Jones_2000} \citetitle{Jones_2000}
- Barclays 2006
- A standardized representation for describing payoffs
- A common suite of tools for trades which use this representation
- Pricing via C / Monte Carlo
- Mathematical / \LaTeX representation / Mathematica for risk management
- pricing and risk management
- barrier analysis
- payments and other lifecycle events
- Trade type is Haskell script
- Trade parameters e.g. start date, strike, expiration date, barrier levels, etc
- Fixings e.g. prices on Asian in
- Pricing via MC or PDE
- \LaTeX
- Payments
- Barriers
- Mathematica
perf :: Date -> Date -> Asset -> Double
perf t1 t2 asset =
observe asset t2 / observe asset t1 - 1
bestOf :: (List Asset, Date, Date) -> Double
bestOf (assets', startDate', endDate') =
foldl1 max perfs where
assets = name "Assets" assets'
startDate = name "Starting date" startDate'
endDate = name "End date" endDate'
perfs = map (perf startDate endDate) assets
cliquetDemo_v2
( name "Asset" -> asset
, name "Global floor" -> gf
, name "Global cap" -> gc
, name "Local floor" -> lf
, name "Local cap" -> lc
, name "Initial date" -> inDate
, name "Dates" -> dates
, name "Payment date" -> payDate
)
= max gf $ min gc $ sum perfs
where
cliquet d d' = (d', max lf $ min lc $ perf d d' asset)
(_, perfs) = mapAccumL cliquet inDate dates