Overall Statistics |
Total Trades 543 Average Win 2.03% Average Loss -0.86% Compounding Annual Return 10.462% Drawdown 25.500% Expectancy 0.495 Net Profit 264.919% Sharpe Ratio 0.637 Probabilistic Sharpe Ratio 4.698% Loss Rate 55% Win Rate 45% Profit-Loss Ratio 2.34 Alpha 0.076 Beta 0.037 Annual Standard Deviation 0.125 Annual Variance 0.016 Information Ratio -0.011 Tracking Error 0.207 Treynor Ratio 2.122 Total Fees $31659.21 Estimated Strategy Capacity $47000000.00 Lowest Capacity Asset SPY R735QTJ8XC9X |
9#region imports from AlgorithmImports import * from statsmodels.tsa.regime_switching.markov_regression import MarkovRegression #endregion class HMMDemo(QCAlgorithm): def Initialize(self): self.SetStartDate(2008, 1, 1) self.SetEndDate(2021, 1, 1) #2. Required: Alpha Streams Models: self.SetBrokerageModel(BrokerageName.AlphaStreams) #3. Required: Significant AUM Capacity self.SetCash(1000000) #4. Required: Benchmark to SPY self.SetBenchmark("SPY") self.assets = ["SPY", "TLT"] # "TLT" as fix income in out-of-market period (high volatility) # Add Equity ------------------------------------------------ for ticker in self.assets: self.AddEquity(ticker, Resolution.Minute) # Set Scheduled Event Method For Kalman Filter updating. self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.BeforeMarketClose("SPY", 5), self.EveryDayBeforeMarketClose) def EveryDayBeforeMarketClose(self): qb = self # Get history history = qb.History(["SPY"], 252*3, Resolution.Daily) # Get the close price daily return. close = history['close'].unstack(level=0) # Call pct_change to obtain the daily return returns = close.pct_change().iloc[1:] # Initialize the HMM, then fit by the standard deviation data. model = MarkovRegression(returns, k_regimes=2, switching_variance=True).fit() # Obtain the market regime regime = model.smoothed_marginal_probabilities.values.argmax(axis=1)[-1] # ============================== if regime == 0: self.SetHoldings([PortfolioTarget("TLT", 0.), PortfolioTarget("SPY", 1.)]) else: self.SetHoldings([PortfolioTarget("TLT", 1.), PortfolioTarget("SPY", 0.)])