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 Insurancedppi()
- Dynamic Proportion Portfolio Insuranceobpi()
- Option Based Portfolio Insuranceshpi()
- Step Hedge Portfolio Insuranceslpi()
- Stop Loss Portfolio insuranceimplement 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")