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 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 |
# Speculation Rollover Strategy # 11 Sectors (XLB, XLC, XLE, XLF, XLI, XLK, XLP, XLRE, XLU, XLV, XLY), equal weight the TOP3 ETF’s on 1st Day of the Month. Hold asset class Sector ETF’s for 1 month. # If ETF is still in the TOPX at month end, Keep It import numpy as np import pandas as pd from datetime import datetime class EmmausAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2018, 1, 1) self.SetEndDate(datetime.now()) self.SetCash(100000) # choose 11 sector ETF's tickers = [ "SPY", # S&P500 ETF "XLB", # Materials "XLC", # Communications "XLE", # Energy "XLF", # Finance "XLI", # Industials "XLK", # Technology "XLP", # Staples "XLRE", # Real Estate "XLU", # Utilities "XLV", # Health Care "XLY"] # Consumer Discretionary self.data = {} for ticker in tickers: symbol = self.AddEquity(ticker, Resolution.Daily).Symbol self.data[symbol] = RateOfChangePercent(1) consolidator = TradeBarConsolidator(CalendarType.Monthly) self.RegisterIndicator(symbol, self.data[symbol], consolidator) self.SetWarmUp(30) self.spy = Identity("SPY") self.SPY_Period = 10 self.SPY_Ind = self.SMA("SPY",self.SPY_Period, Resolution.Daily) # shcedule the function to fire on 1st Day of Month, after 30 minutes self.Schedule.On( self.DateRules.MonthStart("SPY"), self.TimeRules.AfterMarketOpen("SPY", 30), self.Rebalance) def OnData(self, data): if self.spy.Current.Value < self.SPY_Ind.Current.Value : if self.Portfolio.Invested: self.Debug("Overbought Signal") self.Liquidate() else: self.Debug("Not Overbought") def Rebalance(self): if self.IsWarmingUp: return selected = {x[0]: x[1].Current.Value for x in sorted(self.data.items(), key=lambda x: x[1].Current.Value, reverse=False)[:1]} # liquidate the security which is no longer in the top3 momentum list for symbol in self.data: if symbol not in selected: if self.Portfolio[symbol].Invested: self.Liquidate(symbol, 'Not selected') if self.spy.Current.Value < self.SPY_Ind.Current.Value: return for symbol in selected: self.SetHoldings(symbol, 1/len(selected))