# Portfolio Insurance Trading Strategies

Futures trading strategies for price risk management, for commercial hedgers with long or short exposure. All models below aim to achieve a favorable unit price for the energy portfolio, while preventing it from breaching a pre defined cap (floor).

The functions

- `cppi()` - Constant Proportion Portfolio Insurance
- `dppi()` - Dynamic Proportion Portfolio Insurance
- `obpi()` - Option Based Portfolio Insurance
- `shpi()` - Step Hedge Portfolio Insurance
- `slpi()` - Stop Loss Portfolio insurance

implement alternative approaches to achieve this goal. They return S4 objects of type `CPPI`, `DPPI`, `OBPI`, `SHPI` and `SLPI` respectively, with methods `plot()`, `summary()` and `show()`.

We will illustrate with some examples using the synthetic `powcal` data set, which is included in `etrm`. The data set contains daily closing prices for a set of yearly baseload power futures contracts:

    library(etrm)
    data(powcal)

    # the first five contracts
    head(powcal[1:6])
    #>         Date CAL-06 CAL-07 CAL-08 CAL-09 CAL-10
    #> 1 2003-01-02  24.29     NA     NA     NA     NA
    #> 2 2003-01-03  24.91     NA     NA     NA     NA
    #> 3 2003-01-07  24.67     NA     NA     NA     NA
    #> 4 2003-01-08  24.59     NA     NA     NA     NA
    #> 5 2003-01-09  24.39     NA     NA     NA     NA
    #> 6 2003-01-10  24.29     NA     NA     NA     NA

In our example, we will consider the CAL-06 contract, and start trading 500 days prior to the contract expiry.

    day06 <- powcal$Date[!is.na(powcal$`CAL-06`)]
    cal06 <- powcal$`CAL-06`[!is.na(powcal$`CAL-06`)]
    dat06 <- data.frame(Date = day06, CAL06 = cal06)
    dat06 <- tail(dat06, 500)

We will use the `obpi()` function to implement option-based portfolio insurance, e.g. we synthesize an option via a delta hedging scheme. For the `OBPI`strategy, the target price is calculated as an expected cap (floor) given by the option premium-adjusted strike price selected for the delta hedging scheme within a standard Black-76 option pricing framework. The default strike price is set at-the-money. The user may express a view regarding future market development by deviating from this level.

    cal06_obpi_b <- obpi(q = 30,               # volume 30 MW (buyer)
                         tdate = dat06$Date,   # vector with trading days until expiry
                         f = dat06$CAL06,      # vector with futures price
                         k = dat06$CAL06[1],   # default option strike price at-the-money
                         vol = 0.2,            # annualized volatility, for the Black-76 delta hedging
                         r = 0,                # default assumed risk free rate of interest
                         tdays = 250,          # assumed trading days per year
                         daysleft = 500,       # number of days to expiry
                         tcost = 0,            # transaction cost
                         int = TRUE            # integer restriction, smallest transacted unit = 1
                       )

    plot(cal06_obpi_b, legend = "bottom", title = "OBPI strategy buyer CAL-06")

The `summary()` method:

    summary(cal06_obpi_b)
    #> $Description
    #> [1] "Hedging strategy of type OBPI and length 500"
    #>
    #> $Volume
    #> [1] 30
    #>
    #> $Target
    #> [1] 29.83626
    #>
    #> $ChurnRate
    #> [1] 4.333333
    #>
    #> $Stats
    #>       Market Trade Exposed Position     Hedge   Target Portfolio
    #> First  26.82    17      13       17 0.5666667 29.83626  26.82000
    #> Max    39.01    17      17       30 1.0000000 29.83626  29.29433
    #> Min    25.60    -3       0       13 0.4333333 29.83626  26.46833
    #> Last   37.81     0       0       30 1.0000000 29.83626  29.29433

The `show()`method provide details regarding daily values for market price, transactions, exposed volume, futures contract position, the target price and the calculated portfolio price. Further details for a specific instance of a trading strategy can be found in the slots, see for example:

    slotNames(cal06_obpi_b)
    #>  [1] "StrikePrice"  "AnnVol"       "InterestRate" "TradingDays"  "Name"
    #>  [6] "Volume"       "TargetPrice"  "TransCost"    "TradeisInt"   "Results"

The strategy CAL-06 OBPI strategy from a sellers point of view:

    cal06_obpi_s <- obpi(q = - 30,             # volume -30 MW (seller)
                         tdate = dat06$Date,   # vector with trading days until expiry
                         f = dat06$CAL06,      # vector with futures price
                         k = dat06$CAL06[1],   # default option strike price at-the-money
                         vol = 0.2,            # annualized volatility, for the Black-76 delta hedging
                         r = 0,                # default assumed risk free rate of interest
                         tdays = 250,          # assumed trading days per year
                         daysleft = 500,       # number of days to expiry
                         tcost = 0,            # transaction cost
                         int = TRUE            # integer restriction, smallest transacted unit = 1
                       )

    plot(cal06_obpi_s, legend = "bottom", title = "OBPI strategy seller CAL-06")