| Overall Statistics |
|
Total Trades 4283 Average Win 0.20% Average Loss -0.13% Compounding Annual Return 17.633% Drawdown 13.600% Expectancy 0.801 Net Profit 802.287% Sharpe Ratio 1.327 Probabilistic Sharpe Ratio 82.927% Loss Rate 31% Win Rate 69% Profit-Loss Ratio 1.62 Alpha 0.12 Beta 0.288 Annual Standard Deviation 0.113 Annual Variance 0.013 Information Ratio 0.275 Tracking Error 0.165 Treynor Ratio 0.522 Total Fees $6682.01 Estimated Strategy Capacity $3900000.00 Lowest Capacity Asset VTI S551B7YE6N39 |
# Trading based on CBOE vix-vxv ratio
from QuantConnect.Data.Custom.CBOE import *
class VirtualRedDogfish(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2008, 1, 1)
self.SetCash(100000)
self.AddEquity("QQQ", Resolution.Minute).Symbol
self.AddEquity("TLT", Resolution.Minute).Symbol
self.AddEquity("VXX", Resolution.Minute).Symbol
self.AddEquity("SPY", Resolution.Minute).Symbol
self.AddEquity("TQQQ", Resolution.Minute).Symbol
self.AddEquity("TMF", Resolution.Minute).Symbol
self.AddEquity("UVXY", Resolution.Minute).Symbol
self.AddEquity("SVXY", Resolution.Minute).Symbol
self.AddEquity("SSO", Resolution.Minute).Symbol
self.AddEquity("QLD", Resolution.Minute).Symbol
self.AddEquity("IEF", Resolution.Minute).Symbol
self.AddEquity("UBT", Resolution.Minute).Symbol
self.AddEquity("VTI", Resolution.Minute).Symbol
self.vix = 'CBOE/VIX'
self.vxv = 'CBOE/VXV'
self.AddData(QuandlVix, self.vix, Resolution.Daily)
self.AddData(Quandl, self.vxv, Resolution.Daily)
self.SetWarmUp(100, Resolution.Daily)
self.vix_sma = self.SMA(self.vix, 1, Resolution.Daily)
self.vxv_sma = self.SMA(self.vxv, 1, Resolution.Daily)
self.ratio = IndicatorExtensions.Over(self.vxv_sma, self.vix_sma)
self.spySMA = self.SMA("SPY", 100, Resolution.Daily)
self.spySMADaily = self.SMA("SPY",400, Resolution.Hour)
self.Schedule.On(self.DateRules.WeekStart("QQQ"), self.TimeRules.AfterMarketOpen("QQQ", 10), self.WeekTrade)
self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.AfterMarketOpen("SPY", 10), self.DayTrade)
def WeekTrade(self):
if not (self.vix_sma.IsReady or self.vxv_sma.IsReady or self.ratio.IsReady):
return
if self.spySMA is None or not self.spySMA.IsReady:
return
self.SPXLHoldings = 0
self.TQQQHoldings = 0
if self.Securities["SPY"].Price >= self.spySMA.Current.Value:
# self.SetHoldings("SPY",0.25)
# self.SetHoldings("IEF",0)
if self.ratio.Current.Value < .923:
self.SetHoldings("UVXY", 0.1)
self.SetHoldings("TLT", 0.0)
self.SetHoldings("QQQ", 1)
self.SetHoldings("IEF", 0.0)
else:
self.SetHoldings("UVXY", 0.0)
self.SetHoldings("TLT", 0.3)
self.SetHoldings("QQQ", 0.7)
self.SetHoldings("IEF", 0.0)
self.SetHoldings
if self.Securities["SPY"].Price >= 1.1*self.spySMA.Current.Value:
self.SetHoldings("UVXY", 0.05)
else:
# self.SetHoldings("SPY",0)
# self.SetHoldings("IEF",0.25)
if self.ratio.Current.Value <= .923:
self.SetHoldings("UVXY", 0.10)
self.SetHoldings("TLT", 0.20)
self.SetHoldings("QQQ", 0.10)
self.SetHoldings("IEF", 0.0)
else:
self.SetHoldings("UVXY", 0.0)
self.SetHoldings("TLT", 0.40)
self.SetHoldings("QQQ", 0.30)
self.SetHoldings("IEF", 0.0)
def DayTrade(self):
if self.spySMADaily is None or not self.spySMADaily.IsReady:
return
if self.Securities["SPY"].Price >= self.spySMADaily.Current.Value:
self.SetHoldings("VTI", 0.25)
self.SetHoldings("IEF", 0)
else:
self.SetHoldings("VTI", 0)
self.SetHoldings("IEF", 0.25)
class QuandlVix(PythonQuandl):
def __init__(self):
self.ValueColumnName = "Close"