Overall Statistics |
Total Trades 7191 Average Win 0.11% Average Loss -0.06% Compounding Annual Return -5.569% Drawdown 43.500% Expectancy -0.158 Net Profit -30.509% Sharpe Ratio -0.297 Probabilistic Sharpe Ratio 0.051% Loss Rate 70% Win Rate 30% Profit-Loss Ratio 1.78 Alpha -0.072 Beta 0.243 Annual Standard Deviation 0.151 Annual Variance 0.023 Information Ratio -0.792 Tracking Error 0.197 Treynor Ratio -0.185 Total Fees $38659.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