Overall Statistics |
Total Trades 3047 Average Win 0.02% Average Loss 0.00% Compounding Annual Return -0.364% Drawdown 3.500% Expectancy -0.487 Net Profit -1.808% Sharpe Ratio -0.309 Probabilistic Sharpe Ratio 0.022% Loss Rate 95% Win Rate 5% Profit-Loss Ratio 9.17 Alpha -0.002 Beta -0.011 Annual Standard Deviation 0.008 Annual Variance 0 Information Ratio -0.593 Tracking Error 0.111 Treynor Ratio 0.22 Total Fees $9690.90 Estimated Strategy Capacity $470000.00 Lowest Capacity Asset SST V2245V5VOQQT |
#region imports from AlgorithmImports import * #endregion class UncorrelatedAssetsDemo(QCAlgorithm): def Initialize(self): #1. Required: Five years of backtest history self.SetStartDate(2014, 1, 1) self.SetEndDate(2019, 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.SetPortfolioConstruction(EqualWeightingPortfolioConstructionModel()) self.SetExecution(ImmediateExecutionModel()) self.assets = ["SHY", "TLT", "IEI", "SHV", "TLH", "EDV", "BIL", "SPTL", "TBT", "TMF", "TMV", "TBF", "VGSH", "VGIT", "VGLT", "SCHO", "SCHR", "SPTS", "GOVT"] # Add Equity ------------------------------------------------ for i in range(len(self.assets)): self.AddEquity(self.assets[i], Resolution.Minute) # Set Scheduled Event Method For Our Model. In this example, we'll rebalance every month. self.Schedule.On(self.DateRules.MonthStart(), self.TimeRules.BeforeMarketClose("SHY", 5), self.EveryDayBeforeMarketClose) def EveryDayBeforeMarketClose(self): qb = self # Fetch history on our universe history = qb.History(qb.Securities.Keys, 252*2, Resolution.Daily) if history.empty: return # Select the close column and then call the unstack method, then call pct_change to compute the daily return. returns = history['close'].unstack(level=0).pct_change().iloc[1:] # Get correlation correlation = returns.corr() # Find 5 assets with lowest absolute sum correlation selected = [] for index, row in correlation.iteritems(): corr_rank = row.abs().sum() selected.append((index, corr_rank)) sort_ = sorted(selected, key = lambda x: x[1]) selected = [x[0] for x in sort_[:5]] # ============================== insights = [] for symbol in selected: insights.append( Insight.Price(symbol, Expiry.EndOfMonth, InsightDirection.Up) ) self.EmitInsights(insights)