| 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