The New Short Volatility Instrument Landscape

This post will discuss the consequences of ProShares’ decision to change the investment objective of SVXY, and possible alternatives that various investors can use to try and create an identical exposure if their strategy calls for such an instrument.

So, to begin with, Proshares recently decided to make SVXY http://www.proshares.com/news/proshare_capital_management_llc_plans_to_reduce_target_exposure_on_two_etfs.htmlhalf the ETF it used to be, and overnight, no less. While I myself do not trade options, following some traders on twitter, a few of them got badly burned. In any case, for the purpose of taking near-curve short-vol positions, this renders SVXY far less attractive as far as my proprietary trading strategy goes, as well as others like it.

Essentially, while this turns SVXY into a “safer” buy and hold instrument, in my opinion, it turns it into a worse instrument. Considering that SVXY’s annual fee is 139 bps, traders now pay Proshares 139 bps just to keep half their capital in cash–capital which could have been invested in other strategies, or simply manually kept on the sidelines. Essentially, this is an attempt on Proshares’ part to idiot-proof a product that should not be used by “idiots” in the first place. However, in the battle between entities to idiot-proof a product, and the universe to create a better idiot, it’s a safe bet to bet on the universe creating a better idiot.

So what does this mean going forward in terms of alternatives to replace XIV and SVXY? Well, I’m at a bit of a loss. While my institutional client (whose crowdfund I am a part of) can short VXX, (and rebalance daily) for other individuals out there (such as myself in my own PA), they may not be able to short shares of VXX, and it may become hard to borrow (although a 66% position short TVIX will also obtain the same exposure, again, rebalanced daily, but let’s assume similar constraints), and the borrowing cost may increase. A couple of alternatives are XIVH and the new VMIN, which hasn’t specified its exact new formulation, but to my understanding after a long conversation with Scott Acheychek of REXshares
, a formulation using the term structure futures (that currently are unavailable from the CBOE, but since the implied volatility term structure is at dangerous levels at this point, it’s not problematic yet) that is similar to ZIV except using the 2nd through 6th month instead of 4th through 7th is somewhere in the ballpark.

In any case, let’s look at some alternatives.

As one of my strategy subscribers was kind enough to send me some synthetic XIVH history, I’ll use that (no replication available unless said subscriber wants to post a link for readers to download. If not, I recommend reaching out to Vance Harwood for his replication).

In any case, here’s a fantastic post by Vance Harwood on how XIVH works. I won’t attempt to paraphrase that post, because I think Vance’s explanations of the products in the vol space are in a class of their own, and someone looking for secondhand information would be doing themselves a disservice not to read Vance’s work with regards to learning about the various options available in the vol space.

In any case, let’s compare.

For the record, here’s an updated function to compute the “back of the envelope new VMIN”, which works exactly like ZIV does, except with dr/dt on month 2, and 1-dr/dt on month 6, and a 25% weighting between 2+6, then 3, 4, 5 constant.

syntheticXIV <- function(termStructure, expiryStructure, contractQty = 1) {
  
  # find expiry days
  zeroDays <- which(expiryStructure$C1 == 0)
  
  # dt = days in contract period, set after expiry day of previous contract
  dt  nrow(expiryStructure)] <- nrow(expiryStructure)
  dtXts <- expiryStructure$C1[dt,]
  
  # create dr (days remaining) and dt structure
  drDt <- cbind(expiryStructure[,1], dtXts)
  colnames(drDt) <- c("dr", "dt")
  drDt$dt <- na.locf(drDt$dt)
  
  # add one more to dt to account for zero day
  drDt$dt <- drDt$dt + 1
  drDt <- na.omit(drDt)
  
  # assign weights for front month and back month based on dr and dt
  wtC1 <- drDt$dr/drDt$dt
  wtC2 <- 1-wtC1
  
  # realize returns with old weights, "instantaneously" shift to new weights after realizing returns at settle
  # assumptions are a bit optimistic, I think
  valToday <- termStructure[,1] * lag(wtC1) + termStructure[,2] * lag(wtC2)
  valYesterday <- lag(termStructure[,1]) * lag(wtC1) + lag(termStructure[,2]) * lag(wtC2)
  syntheticRets <- (valToday/valYesterday) - 1
  
  # on the day after roll, C2 becomes C1, so reflect that in returns
  zeroes <- which(drDt$dr == 0) + 1 
  zeroRets <- termStructure[,1]/lag(termStructure[,2]) - 1
  
  # override usual returns with returns that reflect back month becoming front month after roll day
  syntheticRets[index(syntheticRets)[zeroes]] <- zeroRets[index(syntheticRets)[zeroes]]
  syntheticRets <- na.omit(syntheticRets)
  
  # vxxRets are syntheticRets
  vxxRets <- syntheticRets
  
  # repeat same process for vxz -- except it's dr/dt * 4th contract + 5th + 6th + 1-dr/dt * 7th contract
  vxzToday <- termStructure[,4] * lag(wtC1) + termStructure[,5] + termStructure[,6] + termStructure[,7] * lag(wtC2)
  vxzYesterday <- lag(termStructure[,4]) * lag(wtC1) + lag(termStructure[, 5]) + lag(termStructure[,6]) + lag(termStructure[,7]) * lag(wtC2)
  syntheticVxz <- (vxzToday/vxzYesterday) - 1
  
  # on zero expiries, next day will be equal (4+5+6)/lag(5+6+7) - 1
  zeroVxz <- (termStructure[,4] + termStructure[,5] + termStructure[,6])/
    lag(termStructure[,5] + termStructure[,6] + termStructure[,7]) - 1
  syntheticVxz[index(syntheticVxz)[zeroes]] <- zeroVxz[index(syntheticVxz)[zeroes]]
  syntheticVxz <- na.omit(syntheticVxz)
  
  vxzRets <- syntheticVxz
  
  # first attempt at a new VMIN/VMAX, with the 2-6 paradigm -- not for use with actual futures, but to guide ETP analysis
  vmaxToday <- termStructure[,2] * lag(wtC1) + termStructure[,3] + termStructure[,4] + 
    termStructure[,5] + termStructure[,6] * lag(wtC2)
  vmaxYesterday <- lag(termStructure[,2]) * lag(wtC1) + lag(termStructure[,3]) + lag(termStructure[,4]) + 
    lag(termStructure[,5]) + lag(termStructure[,6]) * lag(wtC2)
  syntheticVmax <- (vmaxToday/vmaxYesterday) - 1
  
  zeroVmax <- (termStructure[,2] + termStructure[,3] + termStructure[,4] + termStructure[,5])/
    lag(termStructure[,3] + termStructure[,4] + termStructure[,5] + termStructure[,6]) - 1
  syntheticVmax[index(syntheticVmax)[zeroes]] <- zeroVmax[index(syntheticVmax)[zeroes]]
  
  vmaxRets <- syntheticVmax
  
  
  # write out weights for actual execution
  if(last(drDt$dr!=0)) {
    print(paste("Previous front-month weight was", round(last(drDt$dr)/last(drDt$dt), 5)))
    print(paste("Front-month weight at settle today will be", round((last(drDt$dr)-1)/last(drDt$dt), 5)))
    if((last(drDt$dr)-1)/last(drDt$dt)==0){
      print("Front month will be zero at end of day. Second month becomes front month.")
    }
  } else {
    print("Previous front-month weight was zero. Second month became front month.")
    print(paste("New front month weights at settle will be", round(last(expiryStructure[,2]-1)/last(expiryStructure[,2]), 5)))
  }
  
  return(list(vxxRets, vxzRets, vmaxRets))
}

Let's compare instruments now. The vixTermStructure.R file is one that I have shown before in a separate post. Furthermore, one of these files will not be accessible as it was provided to me by a subscriber, so I will leave it up to them as to whether they wish to share the file or not.

require(downloader)
require(quantmod)
require(PerformanceAnalytics)
require(TTR)
require(Quandl)
require(data.table)
source("vixTermStructure.R")
newVmin <- syntheticXIV(termStructure, expiryStructure)[[3]]*-1

# using xivh data from a subscriber, not public
xivh <- read.csv("xivh.csv", stringsAsFactors = FALSE)
xivh <- xts(xivh[,2], order.by=as.Date(xivh[,1], format = '%m/%d/%Y'))


download("https://dl.dropboxusercontent.com/s/950x55x7jtm9x2q/VXXlong.TXT", 
         destfile="longVXX.txt") #requires downloader package

vxx <- xts(read.zoo("longVXX.txt", format="%Y-%m-%d", sep=",", header=TRUE))
vxx2 <- Quandl("EOD/VXX", start_date="2018-01-01", type = 'xts')
vxx2Rets <- Return.calculate(vxx2$Adj_Close)
vxxRets <- Return.calculate(Cl(vxx))
vxxRets['2014-08-05'] <- .071 # not sure why Helmuth Vollmeier's VXX data has a 332% day here
vxxRets <- rbind(vxxRets, vxx2Rets['2018-02-08::'])

shortVxx <- (vxxRets * -1) - .1/252 # short, cover, rebalance re-short daily, 10% annualized cost of borrow
newSvxy <- shortVxx * .5

In this case, we have four instruments to test out in my proprietary strategy: short VXX (with a fairly conservative 10% cost of borrow), new VMIN, XIVH, new SVXY.

Again, this is not something that readers can replicate, but these are the results from testing when plugging in these new instruments as a replacement for XIV in my aggressive strategy:

newInstruments

And here are their performance statistics, from the following function:

stratStats <- function(rets) {
  stats <- rbind(table.AnnualizedReturns(rets), maxDrawdown(rets))
  stats[5,] <- stats[1,]/stats[4,]
  stats[6,] <- stats[1,]/UlcerIndex(rets)
  rownames(stats)[4] <- "Worst Drawdown"
  rownames(stats)[5] <- "Calmar Ratio"
  rownames(stats)[6] <- "Ulcer Performance Index"
  return(stats)
}


stratStats(compare['2011::'])
                          Short VXX 10% borrow cost      XIVH  new_VMIN   newSVXY
Annualized Return                          0.874800 0.7175000 0.6062000 0.6103000
Annualized Std Dev                         0.366000 0.3409000 0.2978000 0.2845000
Annualized Sharpe (Rf=0%)                  2.390400 2.1048000 2.0356000 2.1454000
Worst Drawdown                             0.272466 0.2935258 0.2696844 0.2460193
Calmar Ratio                               3.210676 2.4444188 2.2478124 2.4806994
Ulcer Performance Index                   10.907803 8.7305137 8.8142560 9.5887865

In other words, the short VXX (or rather, the new SVXY, leveraged twice back to its original state), using a more conservative cost of borrow for shorting than I've seen at other institutions, still delivers superior results to other instruments. Furthermore, XIVH's volume, as of today, was less than 50,000 shares at a price of $14 (so only around $700,000 in volume). The new VMIN and new SVXY lose a lot of aggregate return, though reduce a little bit of drawdown in the process. While the strategy is certainly still attractive from a risk-reward perspective ("only" 60% return per year), it is nevertheless frustrating to not be able to realize its full potential due to lack of instruments.

I personally hope that we may see a return of -1x inverse VIX products by the end of 2018 or sooner. For my own personal trading, looking at the results of this post, at a cursory first glance, my inclination seems to be that for individuals (namely, myself) interested in taking a near-curve short-vol position under the constraints of neither margin (in which case the best alternative would be to leverage the new 50% SVXY lite twice back up to its original settings) nor shorting (in which case short VXX rebalanced daily gives equivalent exposure), nor options (sell VXX calls/buy VXX puts) that XIVH is the best that can be done from a 10,000 foot view. That said, I certainly hope that XIVH will increase its volume from here on out, as it seems to be the best product to trade in order to express a near-month, short-vol bet in the volatility trading space. However, once again, I will be giving Vance Harwood's work a read-over with regards to XIVH, and I recommend any individual determined to remain in the VIX complex after Feb. 5 to do the same.

That said, XIVH does have its own quirks, as it may take a dynamic long vol position from time to time. However, because of the way my particular strategy is set up, its entries on short volatility are what I'd call careful, so as to maximize the chances of XIVH taking a short volatility position. Nevertheless, this is indeed some adverse news for me (I cannot speak for other individuals who may have different constraints with their brokerages). Nevertheless, while I cannot decide for others, I will continue to trade my strategy, as I see it as less of a good thing being better than nothing at all, and ~60% per year is still vastly better than one can achieve in almost any other market without leverage or other sophisticated execution.

In any case, that is the update after the Proshares announcement. It is a tough pill to swallow, and I hope that better options will emerge in the future for those individuals that respect the history of short vol products, think twice before entering into positions, and accept the losses that come with the territory as a result of using such products.

Thanks for reading.

NOTE: I am seeking full-time employment, long-term consulting projects, and networking in relation to my skill set. For those that are interested in my skill set, feel free to reach out and leave a note to me on my LinkedIn profile.

Advertisements

11 thoughts on “The New Short Volatility Instrument Landscape

  1. Hi Ilya, could you add ZIV in there too, for comparison? Since the new VMIN should be similar to ZIV but with a little more near term weight, it would be nice to see the difference graphically here.

    • Hi there.

      Substituting ZIV for SVXY (that is, if you go short vol, you are only allowed to go long ZIV, regardless of whether or not it would have been ZIV before) yields the worst results:

      Short VXX 10% borrow cost XIVH new_VMIN newSVXY ZIVstrat
      Annualized Return 0.875 0.718 0.606 0.610 0.534
      Annualized Std Dev 0.366 0.341 0.298 0.284 0.281
      Annualized Sharpe (Rf=0%) 2.390 2.105 2.036 2.145 1.900
      Worst Drawdown 0.272 0.294 0.270 0.246 0.229
      Calmar Ratio 3.211 2.444 2.248 2.481 2.331
      Ulcer Performance Index 10.908 8.731 8.814 9.589 8.164

      While ZIV is a fantastic instrument, it isn’t a catch-all, and using it inappropriately gives up a lot of upside.

      • Thanks Ilya, it’s very interesting, I have a long-short-cash strat of my own where substituting ZIV vs newSVXY is just about a wash, but that’s different than your long-short_nearterm-short_midterm-cash foursome strat.

  2. Pingback: Quantocracy's Daily Wrap for 03/03/2018 | Quantocracy

  3. Ilya, have you considered VIX futures ( for your institutional client ) ? Make your own “XIV” !

    Replicating the “former XIV” with futures ( weekly rebalancing instead of daily should suffice ). Pro: compared to inefficient ETNs you have much better liquidity, no borrowing costs, you can apply any level of leverage you feel comfortable with. Contra: not really applicable for small retail accounts, futures account necessary.

    For medium account sizes that cannot afford to trade a combination of 1st and 2nd futures contract you can trade only the second contract and if your signals are valid you will still come up with an attractive trading system.

    • Helmuth,

      The signals really depend on the rebalancing decay for their profitability, unfortunately. Beyond this, my institutional clients can short VXX. My retail trade-followers can’t in some cases.

      -Ilya

  4. Ilya, there is no such thing as a “rebalancing decay profit” for ETNs. VXX is a plain vanilla futures strategy and if there is no contango in the futures market there is no decay you can profit from by rebalancing. Furthermore, apart from the huge borrowing cost, the risk profile of a “short VXX” is very different from “long SVXY/XIV” especially in times of market stress. Think limited vs. unlimited risk.

  5. Hi Ilya

    For newSvxy, is it correct to also take into account the 10% borrowing cost that you apply for shortVxx? Shouldn’t NewSvxy simply be (vxxRets * -1)?

    Thanks

    Your code:
    shortVxx <- (vxxRets * -1) – .1/252 # short, cover, rebalance re-short daily, 10% annualized cost of borrow
    newSvxy <- shortVxx * .5

  6. Hello Ilya:
    I always enjoy your posts and most important your R codes. Much appreciate for your sharing thoughts and codes so many can learn from here.
    Please note that if NewSvxy simply be (vxxRets * -1) * 0.5 as note by others.
    The Max Drawdown for newsvxy is 45% at near end of 2011, 37% at early 2016 and 35% at early 2018.
    Or use 0.5 * XIV return data, for verify purpose.
    The Max Drawdown for newsvxy is 37% at near end of 2011, 33% at early 2016 and we know what happen at early 2018.
    Your chart show max drawdown for newsvxy is 24% at beginning 2016.
    Sorry I don’t go through much details on your data.
    Thanks again for your R codes.

  7. Please ignore my comments above, your chart or performance results are come from your own proprietary strategy using the data in your post. So the performance results are much better than the buy and hold results. Thanks.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s