Overall Statistics |
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio -0.397 Tracking Error 0.206 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
#region imports from AlgorithmImports import * #endregion from QuantConnect.DataSource import * import pandas as pd import numpy as np from scipy import stats class VX_TS_Algorithm(QCAlgorithm): # ------------------------------------------------------------------------------------------------ def Init_system_part(self) -> None: # self.SetStartDate(2012,1,1) self.SetStartDate(2020,1,1) self.SetEndDate(datetime.now().date() - timedelta(1)) self.SetCash(10000) # ------------------------------------------------------------------------------------------------ def Init_equity_part(self) -> None: self.SetBenchmark(self.AddEquity("SPY", self.var_resolution).Symbol) # Define the Equity self.sym_svxy = self.AddEquity("SVXY", self.var_resolution).Symbol self.equity_vxx = self.AddEquity("VXX", self.var_resolution) self.equity_vxx.SetDataNormalizationMode(DataNormalizationMode.Raw) self.sym_vxx = self.equity_vxx.Symbol self.option_vxx = self.AddOption("VXX", self.var_resolution) self.option_vxx.SetFilter(-3, 3, timedelta(40), timedelta(60)) # ------------------------------------------------------------------------------------------------ def UpdateRollingWindow(self, sender, updated) -> None: if self.vix3m_vix_RY_over_sma.IsReady: self.vix3m_vix_RY_over_sma_window.Add(self.vix3m_vix_RY_over_sma.Current.Value) self.vix_window.Add(self.vix_sma.Current.Value) # ------------------------------------------------------------------------------------------------ def Init_vix_part(self) -> None: # Define the symbol and "type" of our generic data self.sym_vix = self.AddData(CBOE, 'VIX', self.var_resolution).Symbol self.sym_vix3m = self.AddData(CBOE, 'VIX3M', self.var_resolution).Symbol # Set up default Indicators, these are just 'identities' of the closing price self.vix_sma = self.SMA(self.sym_vix, 1, self.var_resolution) self.vix3m_sma = self.SMA(self.sym_vix3m, 1, self.var_resolution) # ------------------------------------------------------------------------------------------------ def Init_vx_futures_part(self) -> None: self.var_vxData = None # VIX Future data symbol self.sym_vx = self.AddData(VIXCentralContango, "VX", self.var_resolution).Symbol # ------------------------------------------------------------------------------------------------ def Initialize(self) -> None: self.Init_system_part() # Define the internal variable self.var_resolution = Resolution.Daily self.Init_equity_part() self.Init_vix_part() self.Init_vx_futures_part() # ------------------------------------------------------------------------------------------------ def OnData(self, slice: Slice) -> None: # Check data readiness --------------------------------------------- data_missing = False if not slice.ContainsKey(self.sym_vxx): self.Debug(f"vx_ts> {self.Time} ERROR VXX data missing..." ) data_missing = True if not slice.ContainsKey(self.sym_svxy): self.Debug(f"vx_ts> {self.Time} ERROR SVXY data missing..." ) data_missing = True # Get the VX data if (not slice.ContainsKey(self.sym_vx)) or (slice[self.sym_vx] is None): self.Debug(f"vx_ts> {self.Time} ERROR VX data of VIXCentralContango missing..." ) data_missing = True # Wait for all indicators to fully initialize if not (self.vix_sma.IsReady and self.vix3m_sma.IsReady ): self.Debug(f"vx_ts> {self.Time} ERROR VIX, VIX3M Indicator etc. data missing..." ) data_missing = True if data_missing: return # Data is ready, start data process ----------------------------------