Overall Statistics |
Total Trades 611 Average Win 0.96% Average Loss -0.59% Compounding Annual Return 6.654% Drawdown 17.600% Expectancy 0.205 Net Profit 48.780% Sharpe Ratio 0.681 Probabilistic Sharpe Ratio 21.290% Loss Rate 54% Win Rate 46% Profit-Loss Ratio 1.62 Alpha 0.049 Beta 0.159 Annual Standard Deviation 0.102 Annual Variance 0.01 Information Ratio -0.402 Tracking Error 0.148 Treynor Ratio 0.437 Total Fees $16202.74 |
from datetime import timedelta class MOMAlphaModel(AlphaModel): def __init__(self): self.mom = [] def OnSecuritiesChanged(self, algorithm, changes): #Initialize a 14-day momentum indicator for each symbol for security in changes.AddedSecurities: symbol = security.Symbol self.mom.append({"symbol":symbol, "indicator":algorithm.MOM(symbol, 14, Resolution.Daily)}) #14 def Update(self, algorithm, data): #Sort the list of dictionaries by indicator in descending order ordered = sorted(self.mom, key=lambda kv: kv["indicator"].Current.Value, reverse=True) #Return a group of insights, emitting InsightDirection.Up for the first item of ordered, and InsightDirection.Flat for the second return Insight.Group( [ Insight.Price(ordered[0]["symbol"], timedelta(1), InsightDirection.Up), #Insight.Price(ordered[1]["symbol"], timedelta(1), InsightDirection.Down), Insight.Price(ordered[1]["symbol"], timedelta(1), InsightDirection.Flat), #Insight.Price(ordered[3]["symbol"], timedelta(1), InsightDirection.Down), ]) class FrameworkAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2013, 10, 1) #self.SetEndDate(2013, 12, 1) self.SetCash(1000000) self.reference = "SPY" self.SetBenchmark("SPY") symbols = [ Symbol.Create("GLD", SecurityType.Equity, Market.USA), Symbol.Create("SPY", SecurityType.Equity, Market.USA), ] self.UniverseSettings.Resolution = Resolution.Daily self.SetUniverseSelection(ManualUniverseSelectionModel(symbols)) # Call the MOMAlphaModel Class self.SetAlpha(MOMAlphaModel()) self.SetPortfolioConstruction(EqualWeightingPortfolioConstructionModel()) #self.SetPortfolioConstruction(InsightWeightingPortfolioConstructionModel()) self.SetRiskManagement(MaximumDrawdownPercentPerSecurity(0.002)) self.SetExecution(ImmediateExecutionModel()) self.SetBrokerageModel(BrokerageName.AlphaStreams)