Overall Statistics |
Total Trades 5713 Average Win 0.10% Average Loss -0.06% Compounding Annual Return 0.182% Drawdown 24.400% Expectancy 0.013 Net Profit 1.061% Sharpe Ratio 0.068 Probabilistic Sharpe Ratio 0.652% Loss Rate 62% Win Rate 38% Profit-Loss Ratio 1.64 Alpha 0.011 Beta -0.035 Annual Standard Deviation 0.109 Annual Variance 0.012 Information Ratio -0.509 Tracking Error 0.165 Treynor Ratio -0.213 Total Fees $45987.81 |
import numpy as np class AlphaFiveUSTreasuries(QCAlgorithm): def Initialize(self): #1. Required: Five years of backtest history self.SetStartDate(2014, 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 = ["IEF", "SHY", "TLT", "IEI", "SHV", "TLH", "EDV", "BIL", "SPTL", "TBT", "TMF", "TMV", "TBF", "VGSH", "VGIT", "VGLT", "SCHO", "SCHR", "SPTS", "GOVT"] self.symbols = {} # Add Equity ------------------------------------------------ for i in range(len(self.assets)): self.symbols[self.assets[i]] = self.AddEquity(self.assets[i],Resolution.Minute).Symbol self.Schedule.On(self.DateRules.Every(DayOfWeek.Monday), self.TimeRules.AfterMarketOpen("IEF", 1), self.EveryDayAfterMarketOpen) def EveryDayAfterMarketOpen(self): qb = self # Fetch history on our universe df = qb.History(qb.Securities.Keys, 5, Resolution.Daily) # Make all of them into a single time index. df = df.close.unstack(level=0) # Calculate the truth value of the most recent price being less than 1 std away from the mean classifier = df.le(df.mean().subtract(df.std())).tail(1) # Get indexes of the True values classifier_indexes = np.where(classifier)[1] # Get the Symbols for the True values classifier = classifier.transpose().iloc[classifier_indexes].index.values # Get the std values for the True values (used for magnitude) magnitude = df.std().transpose()[classifier_indexes].values # Zip together to iterate over later selected = zip(classifier, magnitude) # ============================== insights = [] for symbol, magnitude in selected: insights.append( Insight.Price(symbol, timedelta(days=5), InsightDirection.Up, magnitude) ) self.EmitInsights(insights) def OnData(self, data): pass