| Overall Statistics |
|
Total Trades 208 Average Win 0% Average Loss 0.00% Compounding Annual Return -0.110% Drawdown 0.200% Expectancy -1 Net Profit -0.231% Sharpe Ratio -3.799 Probabilistic Sharpe Ratio 0% Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.001 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio -0.467 Tracking Error 0.229 Treynor Ratio -19.303 Total Fees $208.00 |
class ResistanceVentralCircuit(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2018, 6, 17) # Set Start Date
self.SetCash(100000) # Set Strategy Cash
self.symbol = self.AddEquity('SPY', Resolution.Minute).Symbol
self.UniverseSettings.Resolution = Resolution.Daily
self.AddUniverse(self.CoarseFilter)
self.Schedule.On(self.DateRules.EveryDay(self.symbol), self.TimeRules.BeforeMarketClose(self.symbol, 10), self.BeforeClose)
self.stop_trading = False
self.made_trade = False
self.num_securities = 50
self.Gaps = {}
self.curr_day = -1
def CoarseFilter(self, coarse):
sortedByDollarVolume = sorted(coarse, key=lambda c: c.DollarVolume, reverse=True)[:self.num_securities]
return [x.Symbol for x in sortedByDollarVolume]
def OnData(self, data):
if not self.IsMarketOpen(self.symbol):
return
# get current day open
if self.curr_day != self.Time.day:
for symbol in self.Gaps:
self.Gaps[symbol].StopTrading = False
self.Gaps[symbol].MadeTrade = False
if data.ContainsKey(symbol) and data[symbol] is not None:
self.Gaps[symbol].Open = data[symbol].Open
else:
self.Gaps[symbol].Open = -1
#to_buy = []
self.curr_day = self.Time.day
for symbol, gap in self.Gaps.items():
if gap.StopTrading:
continue
#
elif gap.Open < 0 or gap.Close < 0:
gap.StopTrading = True
continue
# if gap down doesn't meet our 1% threshold, don't trade
elif gap.Open / gap.Close > .99:
gap.StopTrading = True
continue
elif not data.ContainsKey(symbol) or data[symbol] is None:
continue
curr_price = data[symbol].Close
# breakout past yesterday's close
if not gap.MadeTrade and curr_price > 1.005 * gap.Close and curr_price < 1.01 * gap.Close:
self.SetHoldings(symbol, .02)
#self.MarketOrder(symbol, 1)
gap.MadeTrade = True
elif gap.MadeTrade and (curr_price < gap.Close or curr_price > 1.02 * gap.Close):
self.Liquidate(symbol)
gap.StopTrading = True
def BeforeClose(self):
self.Liquidate()
for symbol in self.Gaps:
if self.CurrentSlice.ContainsKey(symbol) and self.CurrentSlice[symbol] is not None:
self.Gaps[symbol].Close = self.Securities[symbol].Price
else:
self.Gaps[symbol].Close = -1
self.Gaps[symbol].StopTrading = True
def OnSecuritiesChanged(self, changed):
for security in changed.RemovedSecurities:
self.Gaps.pop(security.Symbol)
for security in changed.AddedSecurities:
self.Gaps[security.Symbol] = Gap()
class Gap:
def __init__(self):
self.Close = -1
self.Open = -1
self.MadeTrade = False
self.StopTrading = False