| Overall Statistics |
|
Total Trades 825 Average Win 0.89% Average Loss -0.99% Compounding Annual Return 21.446% Drawdown 45.500% Expectancy 0.274 Net Profit 167.591% Sharpe Ratio 0.68 Probabilistic Sharpe Ratio 15.530% Loss Rate 33% Win Rate 67% Profit-Loss Ratio 0.90 Alpha 0.089 Beta 1.166 Annual Standard Deviation 0.278 Annual Variance 0.077 Information Ratio 0.513 Tracking Error 0.201 Treynor Ratio 0.162 Total Fees $1254.47 Estimated Strategy Capacity $7500000.00 Lowest Capacity Asset MRO R735QTJ8XC9X |
# top dollar volume top MAR(History) universe
from AlgorithmImports import *
#
# -------------------------------------------------------
N_DV = 50; N_MOM = 10; FAST = 50; SLOW = 200; LEV = 1.00;
# -------------------------------------------------------
class UglyBrownDolphin(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2017, 5, 25)
self.SetEndDate(2022, 6, 16)
self.SetCash(100000)
self.UniverseSettings.Resolution = Resolution.Minute
self.AddUniverse(self.CoarseSelectionFunction)
self.selectedSymbols = []
self.universeMonth = -1
def CoarseSelectionFunction(self, universe):
if self.Time.month == self.universeMonth:
return self.selectedSymbols
stocks = [x for x in universe if (x.HasFundamentalData)]
price_above_10 = [x for x in stocks if (x.Price > 10)]
dollar_volume = sorted(price_above_10, key = lambda c: c.DollarVolume, reverse=True)
dollar_volume_top = [c.Symbol for c in dollar_volume[:N_DV]]
hist = self.History(dollar_volume_top, SLOW, Resolution.Daily)
C = hist['close'].unstack(level = 0)
mar = C[-FAST:].mean() / C[-SLOW:].mean()
top_mar = mar.sort_values(ascending = False)[:N_MOM]
self.selectedSymbols = [self.Symbol(str(x)) for x in top_mar.index]
self.Plot("Universe", "top_dv_top_mar_symbols", len(self.selectedSymbols))
return self.selectedSymbols
def OnData(self, data):
if self.Time.month == self.universeMonth: return
if not (self.Time.hour == 10 and self.Time.minute == 1): return
for sec in self.Portfolio.Keys:
if sec not in self.selectedSymbols:
self.Liquidate(sec)
for sec in self.selectedSymbols:
self.SetHoldings(sec, LEV/len(self.selectedSymbols))
self.universeMonth = self.Time.month