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.

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

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.

```
<- obpi(q = 30, # volume 30 MW (buyer)
cal06_obpi_b 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:

```
<- obpi(q = - 30, # volume -30 MW (seller)
cal06_obpi_s 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")
```