Backtest Period
Markets Traded
Equities / Options
Maximum Drawdown
Period of Rebalancing
Intraday
Return (Annual)
Sharpe Ratio
Standard Deviation (Annual)
Original paper
SSRN-id2525991.pdf630.0KB
Trading rules
- Short position initiation: 9:35 AM EST on FOMC meeting days
- Instrument: VIX futures contract
- Entry: Sell at prevailing bid price
- Exit: 3:30 PM EST on FOMC meeting days
- Exit method: Take offsetting position at prevailing ask price
- No investment on non-FOMC meeting days
Python code
Backtrader
import datetime
import pytz
import backtrader as bt
class ShortVolatilityFOMC(bt.Strategy):
params = dict(
fomc_dates=[],
)
def __init__(self):
self.vix_futures = self.getdatabyname('vix_futures')
def next(self):
current_date = self.datas[0].datetime.date(0)
current_time = self.datas[0].datetime.time(0)
if current_date not in self.params.fomc_dates:
return
if current_time == datetime.time(hour=9, minute=35):
self.sell(data=self.vix_futures, exectype=bt.Order.Limit, price=self.vix_futures.bid[0])
if current_time == datetime.time(hour=15, minute=30):
self.buy(data=self.vix_futures, exectype=bt.Order.Limit, price=self.vix_futures.ask[0])
cerebro = bt.Cerebro()
# Add VIX futures data feed
vix_futures_feed = ...
cerebro.adddata(vix_futures_feed, name='vix_futures')
# Add the strategy
cerebro.addstrategy(ShortVolatilityFOMC, fomc_dates=[...])
# Run the backtest
results = cerebro.run()
Make sure to replace the ...
placeholders with the appropriate data, such as the VIX futures data feed and the list of FOMC meeting dates.