| Overall Statistics |
|
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio -3.162 Tracking Error 0.087 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
class HipsterOrangeMonkey(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2021, 6, 1) # Set Start Date
self.SetEndDate(2021, 8, 15)
self.SetCash(100000) # Set Strategy Cash
self.AddEquity("SPY", Resolution.Daily)
self.AddEquity("AHPI", Resolution.Daily)
#create symbol objects that get passed through universe selection model
self.symbols = [Symbol.Create("SPY", SecurityType.Equity, Market.USA), Symbol.Create("AHPI", SecurityType.Equity, Market.USA)]
#set resolution for your universe
self.UniverseSettings.Resolution = Resolution.Daily
#Set the universe and pass in a Manual Universe Selection Model, initialize with symbols list
self.AddUniverseSelection(ManualUniverseSelectionModel(self.symbols))
self.SetWarmUp(50)
self.selected = []
def ManualUniverseSelectionModel(self, coarse):
selected = []
for c in self.symbols:
if c.Symbol not in self.stateData:
self.stateData[c.Symbol] = SelectionData(c.Symbol, 20)
avg = self.stateData[c.Symbol]
avg.update(c.EndTime, c.AdjustedPrice, c.DollarVolume)
self.Debug(str(self.symbols))
# filter the values of selectionData(sd) above SMA
values = [sd for sd in self.stateData.values() if sd.volume > sd.sma.Current.Value and sd.volume_ratio > 2]
for sd.symbol in values:
self.selected.append(security.Symbol)
self.Debug(str(selected))
# sort sd by the largest % jump in volume.
values.sort(key=lambda sd: sd.volume_ratio, reverse=True)
# return the symbol objects
return [ sd.symbol for sd in values ]
def OnData(self, data):
'''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
Arguments:
data: Slice object keyed by symbol containing the stock data
'''
for security in self.selected:
self.SetHoldings(security.Symbol, 0.5)
self.Debug(self.symbols)
class SelectionData():
def __init__(self, symbol, period):
self.symbol = symbol
self.volume = 0
self.volume_ratio = 0
self.sma = SimpleMovingAverage(20)
def is_ready(self):
return self.sma.IsReady
def update(self, time, price, volume):
self.volume = volume
if self.sma.Update(time, volume):
# get ratio of this volume bar vs previous 20 before it.
self.volume_ratio = volume / self.sma.Current.Value