| Overall Statistics |
|
Total Trades 34 Average Win 0.17% Average Loss -1.88% Compounding Annual Return 10.818% Drawdown 24.500% Expectancy -0.664 Net Profit 1.733% Sharpe Ratio 0.461 Probabilistic Sharpe Ratio 41.322% Loss Rate 69% Win Rate 31% Profit-Loss Ratio 0.09 Alpha 0 Beta 0 Annual Standard Deviation 0.596 Annual Variance 0.355 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $661.32 |
class MultidimensionalModulatedInterceptor(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2019, 11, 1) # Set Start Date
self.SetEndDate(2020, 1, 1) #Set End Date
self.SetCash(100000) # Set Strategy Cash
self.UniverseSettings.Resolution = Resolution.Daily # Set Resolution to Daily
self.AddUniverse(self.CoarseSelection, self.FineSelection)
self.AddEquity("SPXEW" , Resolution.Daily) # Add SPXEW
self.SetBenchmark("SPXEW") # Benchmark to S&P Equal Weights Index
def CoarseSelection(self, coarse):
# Filter for DollarVolume, Price and Fundamental Data availability
filtered = [x for x in coarse if x.DollarVolume >= 100000 and x.Price > 1 and x.HasFundamentalData]
return [x.Symbol for x in filtered]
def FineSelection(self, fine):
# Filter for market cap, sector, and positive PE
filtered = [f for f in fine if f.CompanyProfile.MarketCap > 50000000 and f.AssetClassification.MorningstarSectorCode != MorningstarSectorCode.FinancialServices and f.ValuationRatios.PERatio > 0]
# sort by PE ascending
sortedByPE = sorted(filtered, key = lambda f : f.ValuationRatios.PERatio, reverse = False)
# retrieve 10 lowest positive PE
return [f.Symbol for f in sortedByPE][:10]
def OnSecuritiesChanged(self, changes):
for security in changes.RemovedSecurities:
self.Liquidate(security.Symbol)
for security in changes.AddedSecurities:
self.SetHoldings(security.Symbol, 0.10)