Overall Statistics |
Total Trades 161 Average Win 3.56% Average Loss -1.80% Compounding Annual Return 4.455% Drawdown 44.500% Expectancy 0.505 Net Profit 94.999% Sharpe Ratio 0.349 Probabilistic Sharpe Ratio 0.263% Loss Rate 49% Win Rate 51% Profit-Loss Ratio 1.98 Alpha 0.051 Beta -0.074 Annual Standard Deviation 0.129 Annual Variance 0.017 Information Ratio -0.151 Tracking Error 0.228 Treynor Ratio -0.608 Total Fees $1369.20 |
class UncoupledOptimizedRadiator(QCAlgorithm): def Initialize(self): self.SetStartDate(2005, 1, 1) self.SetCash(100000) self.UniverseSettings.Resolution = Resolution.Daily symbols = [ Symbol.Create("VB", 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 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("VB", 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