Overall Statistics |
Total Trades 157 Average Win 4.32% Average Loss -1.94% Compounding Annual Return 6.783% Drawdown 37.900% Expectancy 0.763 Net Profit 179.207% Sharpe Ratio 0.501 Probabilistic Sharpe Ratio 1.191% Loss Rate 45% Win Rate 55% Profit-Loss Ratio 2.23 Alpha 0.07 Beta -0.066 Annual Standard Deviation 0.127 Annual Variance 0.016 Information Ratio -0.112 Tracking Error 0.227 Treynor Ratio -0.967 Total Fees $1706.51 |
class TransdimensionalHorizontalAtmosphericScrubbers(QCAlgorithm): def Initialize(self): self.SetStartDate(2005, 1, 1) self.SetCash(100000) self.UniverseSettings.Resolution = Resolution.Daily symbols = [Symbol.Create("MCD", SecurityType.Equity, Market.USA)] self.AddUniverseSelection(ManualUniverseSelectionModel(symbols)) self.AddAlpha(UnemploymentRateAlpha(self)) self.SetPortfolioConstruction(EqualWeightingPortfolioConstructionModel()) self.SetExecution(ImmediateExecutionModel()) self.AddRiskManagement(NullRiskManagementModel()) def OnData(self, data): pass # Algorithm framework model that produces insightsa class UnemploymentRateAlpha: def __init__(self, algorithm): self.rate = algorithm.AddData(UNRATE, "UNRATE", Resolution.Daily, None, False, 1).Symbol unemployment_history = algorithm.History([self.rate], timedelta(35)) unemployment_numbers = unemployment_history.loc[self.rate].value.dropna() self.lastRate = unemployment_numbers.values[0] def Update(self, algorithm, slice): insights = [] if not slice.ContainsKey(self.rate): return [] if slice[self.rate].Value < self.lastRate: insights.append( Insight.Price("MCD", timedelta(days=22), InsightDirection.Up) ) self.lastRate = slice[self.rate].Value return insights def OnSecuritiesChanged(self, algorithm, changes): pass class UNRATE(PythonData): def GetSource(self, config, date, isLiveMode): return SubscriptionDataSource("https://www.dropbox.com/s/u0qz2t5oavxb2ud/UNRATE.csv?dl=1", SubscriptionTransportMedium.RemoteFile) def Reader(self, config, line, date, isLiveMode): if not (line.strip() and line[0].isdigit()): return None rate = UNRATE() rate.Symbol = config.Symbol data = line.split(',') rate.Time = datetime.strptime(data[0], "%Y-%m-%d") + timedelta(days=31) rate.Value = data[1] return rate