I'm unsure of the syntax to get vix options chain...or even the futures chain..
I tried daily resolution as I read QC does not have minute data... which I fine since I dont make decision based on VIX directly

But then how do I get the options? From the future object, from the Futures.Index.Vix...

I tried multiple combinations with no luck my chains are always empty... is it not meant to work? or am I doing anything wrong.. any code sample would be appreciated! Also does anyone know why are options backtest so painfully slow to launch?
here is what i did:
namespace QuantConnect
public class VixStrength : QCAlgorithm
private const string SYMBOL = "SVXY";
private int barCounter = 0;

private OptionContract currentOpt = null;

public override void Initialize()
// backtest parameters

SetStartDate(year:2017, month:7, day:28);
SetEndDate(year:2017, month:8, day:1);

// cash allocation

//which equity
AddEquity(VixStrength.SYMBOL, Resolution.Minute);

var fut = AddFuture(Futures.Indices.VIX, Resolution.Daily);
var option = AddOption(Futures.Indices.VIX, Resolution.Daily);
option.SetFilter(universe => from symbol in universe
.Expiration(TimeSpan.FromDays(4), TimeSpan.FromDays(15))
where symbol.ID.OptionRight == OptionRight.Call &&
universe.Underlying.Price < symbol.ID.StrikePrice
select symbol);


private OptionContract GetBestOption(Slice slice)
//trying to figure out what is going on
foreach (var k in slice.FuturesChains.Keys)//just making sure there is something there
Debug("fut chain " + k);

foreach (var k in slice.OptionChains.Keys)//just making sure there is something there
Debug("opt chain " + k);

FuturesChain futChain;
slice.FutureChains.TryGetValue(Futures.Indices.VIX, out futChain);
if (futChain == null)
Debug("no futures");
//var fut = (from f in futChain.OrderBy(x => x.Expiry) select f).FirstOrDefault();
OptionChain chain;
var optionSymbol = QuantConnect.Symbol.Create(Futures.Indices.VIX, SecurityType.Option, Market.USA);
if (slice.OptionChains.TryGetValue(optionSymbol, out chain))
Debug("Yeahhh key exists");
var contract = (
from optionContract in chain
.OrderBy(x => x.Strike)
.OrderBy(x => x.Expiry)
select optionContract
return contract;
Debug("no options");
return null;

public override void OnData(Slice data)
if (!data.Bars.ContainsKey(VixStrength.SYMBOL))

if (barCounter == 30)
currentOpt = GetBestOption(data);