Overall Statistics
Total Trades
929
Average Win
0.43%
Average Loss
-0.27%
Compounding Annual Return
11.986%
Drawdown
11.800%
Expectancy
1.005
Net Profit
225.462%
Sharpe Ratio
1.138
Probabilistic Sharpe Ratio
61.961%
Loss Rate
22%
Win Rate
78%
Profit-Loss Ratio
1.58
Alpha
0.102
Beta
0.003
Annual Standard Deviation
0.09
Annual Variance
0.008
Information Ratio
-0.163
Tracking Error
0.179
Treynor Ratio
31.621
Total Fees
$1296.43
Estimated Strategy Capacity
$55000.00
Lowest Capacity Asset
XVZ UZ6Q81R5NIW5
from QuantConnect.Data.Custom.CBOE import *

class RetrospectiveFluorescentOrangeScorpion(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2011,1, 1) # Set Start Date
        self.SetEndDate(2021,6,1)    # Set End Date
        self.SetCash(100000)         # Set Strategy Cash
        self.regime = 0
        self.regime_threshold = 22

        vix = self.AddData(CBOE, "VIX").Symbol
        self.history = self.History(CBOE, vix, 30, Resolution.Daily)
        
        # Define the security universe
        self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage)
        self.tickers = ['PGJ','GLD','TLT','AIA','VWO','XLF','FXY','IYW','IYG','XVZ',"SPY"]
        for symbol in self.tickers:
            self.AddEquity(symbol, Resolution.Daily)
        
        self.Schedule.On(self.DateRules.EveryDay(),self.TimeRules.AfterMarketOpen("SPY", 180), self.SignalRefresh)
        self.Schedule.On(self.DateRules.MonthStart(),self.TimeRules.AfterMarketOpen("SPY", 180), self.Rebalance)
        self.SetBenchmark("SPY")  
        
    def Rebalance(self):
        # Rebalance portfolio monthly
        if self.regime == 0:
            self.SetHoldings('PGJ',0.03)
            self.SetHoldings('GLD',0.05)
            self.SetHoldings('TLT',0.36)
            self.SetHoldings('AIA',0.03)
            self.SetHoldings('VWO',0.03)
            self.SetHoldings('XLF',0.03)
            self.SetHoldings('FXY',0.03)
            self.SetHoldings('IYW',0.36)
            self.SetHoldings('IYG',0.03)
            self.SetHoldings('XVZ',0.03)
       
        else:
            self.SetHoldings('PGJ',0.14)
            self.SetHoldings('GLD',0.08)
            self.SetHoldings('TLT',0.06)
            self.SetHoldings('AIA',0.12)
            self.SetHoldings('VWO',0.03)
            self.SetHoldings('XLF',0.03)
            self.SetHoldings('FXY',0.08)
            self.SetHoldings('IYW',0.15)
            self.SetHoldings('IYG',0.03)
            self.SetHoldings('XVZ',0.25)
    
    def SignalRefresh(self):
        vix = self.AddData(CBOE, "VIX").Symbol
        self.history = self.History(CBOE, vix, 30, Resolution.Daily)
        self.signal_series = [1 if x>self.regime_threshold else 0 for x in self.history.close.values]

        if 1 in self.signal_series:
            if self.regime != 1:
                self.regime = 1
                self.Rebalance()
        else:
            if self.regime != 0:
                self.regime = 0
                self.Rebalance()