Overall Statistics
Total Trades
658
Average Win
5.02%
Average Loss
-0.21%
Compounding Annual Return
-1.993%
Drawdown
54.700%
Expectancy
-0.247
Net Profit
-22.393%
Sharpe Ratio
-0.019
Probabilistic Sharpe Ratio
0.001%
Loss Rate
97%
Win Rate
3%
Profit-Loss Ratio
23.39
Alpha
-0.044
Beta
0.556
Annual Standard Deviation
0.149
Annual Variance
0.022
Information Ratio
-0.544
Tracking Error
0.14
Treynor Ratio
-0.005
Total Fees
$871.56
Estimated Strategy Capacity
$6500000.00
Lowest Capacity Asset
OEF RZ8CR0XXNOF9
# region imports
from AlgorithmImports import *
# endregion

class VIXPredictsStockIndexReturns(QCAlgorithm):

    def Initialize(self):

        self.SetStartDate(2006, 1, 1)  
        self.SetEndDate(2018, 8, 1)    
        self.SetCash(100000)          
        self.AddEquity("OEF", Resolution.Daily)
        self.vix = self.AddData(CBOE, "VIX", Resolution.Daily).Symbol
        self.window = RollingWindow[float](252*2)
        hist = self.History([self.vix], 1000, Resolution.Daily)
        for close in hist.loc[self.vix]['close']:
            self.window.Add(close)


    def OnData(self, data):
        if not data.ContainsKey(self.vix): return
        self.window.Add(self.Securities[self.vix].Price)
        if not self.window.IsReady: return 
        history_close = [i for i in self.window]

        if self.Securities[self.vix].Price > np.percentile(history_close, 90):
            self.SetHoldings("OEF", 1)
        elif self.Securities[self.vix].Price < np.percentile(history_close, 10):
            self.SetHoldings("OEF", -1)