Equity forward payoff¶
The payoff of financial derivatives depends on the performance of a certain underlying in the future. As an example, consider an equity forward contract where a party agrees to purchase one stock of Apple at a predetermined date and price in the future. The contract buyer will make a profit if the market price of the stock is greater than the purchase price they pay (and make a loss otherwise).
This payoff can be written as follows
maturity = date 2023 Aug 31 c = when (at maturity) $ scale (Observe "AAPL" - Const 195.0) $ one "USD" acquisitionDate = date 2023 Aug 01
In this example, the predetermined purchase price (strike price) is
Observe "AAPL" is used to represent the time-dependent market price of Apple, which is unknown
at trade inception.
When lifecycling the claim at maturity, we must provide the observed market value for the
AAPL in order to resolve the claim’s cashflows.
observations = [ ("AAPL", [(date 2023 Aug 31, 200.0)]) ]
This yields the expected payoff
"--- EFFECT on 2023-08-31 ---" "TARGET INSTRUMENT : MyClaim version 0" "RECEIVING" " => 5.0 USD" "GIVING"
You can change the stock’s observed value in the script and see how this impacts the generated cashflows.
As you might have realised, the multiplying factor within a
scale builder does not have to be
a constant or deterministic quantity. It is a generic
Observation, which is a combination of
known amounts (built with
Const) and market observables (built with
building blocks can be combined together using standard algebraic operations (
In the example above, once the maturity date is reached the sub-claim
scale (Observe "AAPL" - Const 195.0) $ one "USD" is acquired and the value of the observation
is looked up in the table for that maturity date.
Floating Rate Note¶
There are cases where we want to explicitly specify the date at which a market observable is evaluated. Take for example the case of a Floating Rate Note, which is a financial instrument that pays a floating coupon based on an interest rate value observed a few days earlier.
An example of such payoff is the following
maturity = date 2023 Aug 31 observation = ObserveAt "USD_LIBOR_3M" (date 2023 Aug 10) * Const 1000000.0 c = when (at maturity) $ scale observation $ one "USD" acquisitionDate = date 2023 Aug 01
- we observe the value of the 3 month US Dollar LIBOR rate on
10 Aug 2023
- we pay a coupon for that rate on
31 Aug 2023
ObserveAt observation builder is used to specify when the rate should be observed.
In order to lifecycle the claim at maturity we must include the rate observation in the table
observations = [ ("USD_LIBOR_3M", [(date 2023 Aug 10, 0.0563)]) ]
which then yields to the expected payout
"--- EFFECT on 2023-08-31 ---" "TARGET INSTRUMENT : MyClaim version 0" "RECEIVING" " => 56300.0 USD" "GIVING"
Interest Rate Swap¶
As an exercise, try to model
- a fixed-for-floating interest rate swap, where the claim owner receives coupons based on a floating rate in exchange for fixed rate coupons.
- a basis rate swap, where the owner receives coupons based on 3 month US Dollar LIBOR and pays coupons based on 6 month US Dollar LIBOR to their counterparty
You now know how to setup payoffs containing complex time-dependent market observables. You have the tools to model a large set of financial products, such as forwards and most interest rate swap variations.