| 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 ----------------------------------