Overall Statistics
Total Trades
203
Average Win
0.20%
Average Loss
-0.05%
Compounding Annual Return
10.300%
Drawdown
25.300%
Expectancy
1.406
Net Profit
39.823%
Sharpe Ratio
0.549
Probabilistic Sharpe Ratio
14.908%
Loss Rate
56%
Win Rate
44%
Profit-Loss Ratio
4.47
Alpha
0
Beta
0
Annual Standard Deviation
0.151
Annual Variance
0.023
Information Ratio
0.549
Tracking Error
0.151
Treynor Ratio
0
Total Fees
$207.11
Estimated Strategy Capacity
$270000.00
Lowest Capacity Asset
XVZ UZ6Q81R5NIW5
from QuantConnect.Python import PythonQuandl
from QuantConnect.Data.Custom import *

class RetrospectiveFluorescentOrangeScorpion(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2018,1, 1) # Set Start Date
        self.SetEndDate(2021,6,1)    # Set End Date
        self.SetCash(100000)         # Set Strategy Cash
        self.regime = 0
        
        # Add VIX signal
        self.AddFuture(Futures.Indices.VIX).SetFilter(timedelta(0), timedelta(days=90))
        self.latest_VX = None
        self.vx_identity = Identity("VX")
        self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage)
        # Define the security universe
        self.tickers = ['PGJ','GLD','TLT','AIA','VWO','XLF','FXY','DBA','IYG','XVZ',"SPY"]
        for symbol in self.tickers:
            self.AddEquity(symbol, Resolution.Daily)
        
        self.Schedule.On(self.DateRules.MonthStart(),self.TimeRules.AfterMarketOpen("SPY", 180), self.Rebalance)
        self.PlotIndicator("VIX", self.vx_identity)
    
    def OnData(self, data):
        for chain in data.FutureChains:
            if chain.Key.Value == "VX": 
                front_VX = sorted(chain.Value, key = lambda x: x.Expiry)[0]
                self.latest_VX = front_VX.LastPrice

        # if 1 in signal:
        #     if self.regime != 1:
        #         self.regime = 1
        #         self.Rebalance()
        #     self.regime = 1
        # else:
        #     if self.regime != 0:
        #         self.regime = 0
        #         self.Rebalance()
        #     self.regime = 0
        
    def OnEndOfDay(self):
        if self.latest_VX:
            self.vx_identity.Update(self.Time, self.latest_VX)
           
    def Rebalance(self):
        # Rebalance portfolio monthly
        if self.regime == 0:
            self.SetHoldings('PGJ',0.19)
            self.SetHoldings('GLD',0.04)
            self.SetHoldings('TLT',0.04)
            self.SetHoldings('AIA',0.04)
            self.SetHoldings('VWO',0.04)
            self.SetHoldings('XLF',0.22)
            self.SetHoldings('FXY',0.04)
            self.SetHoldings('DBA',0.04)
            self.SetHoldings('IYG',0.30)
            self.SetHoldings('XVZ',0.04)
       
        else:
            self.SetHoldings('PGJ',0.04)
            self.SetHoldings('GLD',0.04)
            self.SetHoldings('TLT',0.04)
            self.SetHoldings('AIA',0.04)
            self.SetHoldings('VWO',0.09)
            self.SetHoldings('XLF',0.30)
            self.SetHoldings('FXY',0.04)
            self.SetHoldings('DBA',0.04)
            self.SetHoldings('IYG',0.25)
            self.SetHoldings('XVZ',0.40)