Data
In collecting the data for my project, I first discovered that the current 10 year t-bill return was 1.83%. From Yahoo Finance, I found a couple of similar call options for SPXL and SPY. These had metrics as follows:
1 month SPY: spot=311.66, strike=312, premium=3.35.
1 month SPXL: spot=59.61, strike=60, premium=1.8.
1 year SPY: spot=311.66, strike=312, premium=21.05.
1 month SPXL: spot=59.61, strike=60, premium=10.9.
I also downloaded csv files of five years worth of daily data for both spxl and spy. After setting my working directory, I’ve uploaded both files into R.
spxl <- read.csv("SPXL.csv", header = TRUE)
spy <- read.csv("SPY (1).csv", header = TRUE)
Framework
The first step in implementing my framework is to copy my black-schole function into my program. Since I am just looking at call options, I have simplified it to return just the call premium rather than both the call and put prices.
bsoptFun <- function(s,k,sig,t,r){
d1 <- (log(s/k) + (r + (sig^2)/2)*t)/(sig*sqrt(t))
d2 <- d1 - sig*sqrt(t)
c <- s*pnorm(d1) - k*pnorm(d2)*exp(-r*t)
return(c)
}
Next, using the uniroot function I will provide my function with the option metrics I found from Yahoo finance and backout the implied volatilities. By dividing the volatility for SPXL by the volatility for SPY, I can see what ratio of risk SPXL carries compared to SPY.
sigFun <- function(s,k,c,t,r){
rootFun <- function(sig){
bsoptFun(s,k,sig,t,r) - c
}
uniroot(rootFun, c(0,1))$root
}
xvmon <- sigFun(59.61,60, 1.8 ,13/252, .0183)
xvmon
## [1] 0.3623685
yvmon <- sigFun(311.66,312, 3.35 ,13/252, .0183)
yvmon
## [1] 0.11943
xvyr <- sigFun(59.61,60, 10.9 ,13.5/12, .0183)
xvyr
## [1] 0.4218442
yvyr <- sigFun(311.66,312, 21.05 ,13.5/12, .0183)
yvyr
## [1] 0.1370282
xvmon/yvmon
## [1] 3.03415
xvyr/yvyr
## [1] 3.078521
Following the risk comparison, I’ll create a vector of returns for both of my securities. From this, I’ll find the mean and standard deviation for creating a 10 day simulation for futures price of SPXL and SPY.
spxl$ret[1] <- 0
spy$ret[1] <- 0
for(i in 1:1257){
spxl$ret[i+1] <- log(spxl$Adj.Close[i+1]/spxl$Adj.Close[i])
spy$ret[i+1] <- log(spy$Adj.Close[i+1]/spy$Adj.Close[i])
}
mx <- mean(spxl$ret)
mx
## [1] 0.0009578594
sx <- sd(spxl$ret)
sx
## [1] 0.02552207
alpha1 <- mx - (sx^2)/2
alpha1
## [1] 0.0006321714
my <- mean(spy$ret)
my
## [1] 0.0004471777
sy <- sd(spy$ret)
sy
## [1] 0.008519264
alpha2 <- my - (sy^2)/2
alpha2
## [1] 0.0004108888
Now, I’ll design a Monte Carlo simulation for performing this price simulation. I’ll generate this 10-day forecast 1000 times for both SPY and SPXL. From there I’ll calculate the the average daily returns associated with these forecasts and compare them.
spxlp <- spxl$Adj.Close[1258]
spyp <- spy$Adj.Close[1258]
dx <- mat.or.vec(10,1)
dy <- mat.or.vec(10,1)
vx <- mat.or.vec(1000,1)
vy <- mat.or.vec(1000,1)
set.seed(123)
for(j in 1:1000){
dx[1] <- spxlp*exp(alpha1 + (1-pnorm(runif(1)))*sx)
dy[1] <- spyp*exp(alpha2 + (1-pnorm(runif(1)))*sy)
for(i in 1:9){
dx[i+1] <- dx[i]*exp(alpha1 + (1-pnorm(runif(1)))*sx)
dy[i+1] <- dy[i]*exp(alpha2 + (1-pnorm(runif(1)))*sy)
}
vx[j] <- dx[10]
vy[j] <- dy[10]
}
spxlret <- (mean(vx)/spxlp)^.1
spxlret
## [1] 1.008734
spyret <- (mean(vy)/spyp)^.1
spyret
## [1] 1.00312
(spxlret-1) / (spyret-1)
## [1] 2.798981
rfday <- (1.83^(1/365))-1
(spxlret-1-rfday) / (spyret-1-rfday)
## [1] 4.835968
Results
From the one month options, I saw that SPXL has about 3.034 times the risk that SPY has. For the one year options, this risk increases to about 3.0785 times that of the market. Consequently, I’m inclined to think that this triple leveraged ETF actually does carry about three times the risk of the index, though maybe just slightly more.
As for comparing returns, this is much trickier. I’ll assume that the risk-free rate is known and fixed at 1.83%. Using the Capital Asset Pricing Model requires this assumption, even though it rarely holds and different values for the risk-free rate can change the results quite a bit. After running the Monte Carlo simulation I found that the ratio of returns was 2.8. This seems to suggest that SPXL returns a bit less than three times the SPY. However, when including the risk-free rate in this ratio, I found that SPXL minus the risk-free rate was 4.836 times greater than the SPY minus the risk-free rate.
Returning to my original hypothesis, with how the economy has performed in the last five years I would get the following numerics for my CAPM: \[0.007077 > 3.078521*0.001463\] This actually suggests information contradicting my hypothesis, as I assumed that the equation would look like the following: \(E[R]\)–\(Rf < B*(E[M]\)–\(Rf)\)
While I find these results very interesting, I hesitate to use them as evidence that SPXL is actually underpriced. This is because for this type of analysis, historical trends have a lot of influence on the results. Being in a strong bull market, the results will generally favor the leveraged ETF more than the index. On the flip side, bearish conditions make a leveraged ETF look terrible compared to the regular market. Consequently, I think that in 2 to 5 years the ratio for risk won’t change much, but returns may look totally different. As for now, there may be a stronger mathematical case for leveraged ETFs than I expected.