SwaptionStrangle

SwaptionStrangle#

class sigtech.framework.strategies.rolling_swaption_baskets.SwaptionStrangle

Baseclasses: _RollingSwaptionStrategyBase

Takes the same position in both a receiver and a payer swaption with the same expiration but different strikes.

A long strangle strategy buys both a receiver and a payer swaption. This generally profits if the floating rate increases or decreases, or if volatility increases.

A short strangle strategy sells both a receiver and a payer swaption. This generally profits if the floating rate remains steady and the volatility remains steady or decreases.

The following RollingOptionsStrategyBase parameters are relevant for this strategy:

  • target_type: Value to target, can be 'Notional', 'Fixed' (same as 'Notional'), 'PV', 'Gamma' or 'Vega'.

  • target_quantity: Quantity to target.

  • rolling_frequencies: List of rolling frequencies, e.g. ['3M'].

  • roll_dates: Explicit list of roll dates.

  • close_out_at_roll: Flag specifying whether to close existing swaption positions before the roll.

Additional attributes:

  • expiry: Swaption expiry.

  • receiver_strike (float): The exercise rate for the receiver swap. Can be 'ATM'. Default is None (equivalent to 'ATM').

  • payer_strike (float): The exercise rate for the payer swap. Can be 'ATM'. Default is None (equivalent to 'ATM').

  • swap_tenor (string): The tenor of the underlying swap.

  • group_name (string): Name of the swaption group. The currency group by default.

  • forward_premium: Optional - to use forward (rather than spot) premium - either a forward premium value, or True to imply it from the swaption value (i.e. start_date 0 npv).

Example usage:

import datetime as dtm
import sigtech.framework as sig

group = sig.SwaptionGroup.get_group('EUR')

swaption_strangle = sig.SwaptionStrangle(
    currency=group.currency,
    start_date=dtm.date(2017, 9, 19),
    end_date=dtm.date(2018, 12, 30),
    group_name=group.name,
    swap_tenor='2Y',
    rolling_frequencies=['2M'],
    maturity='6M',
    strike_type='SPOT',
    receiver_strike='ATM+100bp',
    payer_strike='ATM-100bp',
    target_type='Notional',
    target_quantity=10e6,
    close_out_at_roll=True,
)
payer_strike: Optional[Union[float, str]]
receiver_strike: Optional[Union[float, str]]
swap_tenor: str
roll_options(dt)

Set swaption positions.

Parameters:

dt – Decision datetime.