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.
<- 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")