Ratio = VXV/VIX
If Ratio < 0.923, then UVXY/VXX is in Contango, we should short the position
If Ratio > 0.923, then UVXY/VXX is in Backwardation, we should go long
Coming from Python, my C# skills are not up to par. I've got tested Python code (with numerous enhancements) that trades this strategy. Below is my feeble attempt to convert it to C# so that everyone can take advantage of it. I did not know how to pull the data from Quandl, so I left that part out.
I'd use VXX, but you can use UVXY for much greater profits, but drawdowns will be HIGH!
using System;
namespace QuantConnect.Algorithm
{
public class Backwardation : QCAlgorithm
{
// UVXY performs better with much higher drawdowns.
static string symbol = "VXX";
decimal ratio = 0;
// Add VXV and VIX data from Quandl or Yahoo here
// YAHOO/INDEX_VIX
// CBOE/VXV
//RollingWindow vixdata = new RollingWindow(1);
//RollingWindow vxvdata = new RollingWindow(1);
public override void Initialize()
{
SetStartDate(2015, 2, 1);
SetEndDate(2015, 9, 9);
SetCash(100000);
AddSecurity(SecurityType.Equity, symbol, Resolution.Minute);
SetWarmup(TimeSpan.FromDays(5));
}
private DateTime last = DateTime.MinValue;
public void OnData(TradeBars data)
{
if (IsWarmingUp) return;
if (Time.Date != last.Date) {
last = Time;
// Calculate ratio of vix to vxv here
// ratio = vixdata/vxvdata;
// Once we have the ratio, we decide what to do
if (ratio < 0.923m) {
// A ratio under 0.923 indicates contango position
// sell short
if (Securities [symbol].Holdings.Quantity <= 0) {
SetHoldings(symbol, -1.5);
}
} else {
// A ratio over 0.923 indicates backwardation, go long
//buy
if (Securities [symbol].Holdings.Quantity >= 0) {
SetHoldings(symbol, 1.5);
}
}
}
}
// Quandl Datahandlers
/*
public void OnData(Quandl data) {
// Handle QUANDL DATA
}
*/
}
}