Overall Statistics |
Total Trades 23 Average Win 0.10% Average Loss -0.02% Compounding Annual Return 1.136% Drawdown 0.100% Expectancy 1.363 Net Profit 0.319% Sharpe Ratio 2.442 Loss Rate 57% Win Rate 43% Profit-Loss Ratio 4.51 Alpha 0.012 Beta -0.048 Annual Standard Deviation 0.005 Annual Variance 0 Information Ratio -1.846 Tracking Error 0.005 Treynor Ratio -0.237 Total Fees $23.00 |
import numpy as np ### <summary> ### Basic template algorithm simply initializes the date range and cash. This is a skeleton ### framework you can use for designing an algorithm. ### </summary> class Algorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2017,1,1) self.SetEndDate(2017,4,5) self.SetCash(100000) self.SetWarmUp(5) self.UniverseSettings.Resolution = Resolution.Daily self.AddUniverse(self.CoarseSelectionFunction) self.AddEquity('SPY', Resolution.Daily) self.Schedule.On(self.DateRules.MonthStart("SPY"), self.TimeRules.AfterMarketOpen("SPY", 60), Action(self.Rebalance)) self.changes = None def OnData(self, data): pass def OnSecuritiesChanged(self, changes): self.Debug("checking") self.changes = changes def CoarseSelectionFunction(self, coarse): CoarseWithFundamental = [x for x in coarse if x.HasFundamentalData] sortedByDollarVolume = sorted(CoarseWithFundamental, key=lambda x: x.DollarVolume, reverse=True) self.universe = [x.Symbol for x in sortedByDollarVolume[:20]] return self.universe def Rebalance(self): # liquidate securities that fell out of our universe for security in self.changes.RemovedSecurities: if security.Invested: self.Liquidate(security.Symbol) # invest in securities just added to our universe for security in self.changes.AddedSecurities: self.Debug(security.Price) if not security.Invested: self.MarketOrder(security.Symbol, 10) self.changes = None;