Overall Statistics |
Total Trades 1076 Average Win 0.85% Average Loss -0.76% Compounding Annual Return 5.394% Drawdown 22.000% Expectancy 0.057 Net Profit 21.913% Sharpe Ratio 0.389 Probabilistic Sharpe Ratio 7.544% Loss Rate 50% Win Rate 50% Profit-Loss Ratio 1.12 Alpha 0.016 Beta 0.216 Annual Standard Deviation 0.112 Annual Variance 0.012 Information Ratio -0.474 Tracking Error 0.173 Treynor Ratio 0.201 Total Fees $4523.67 Estimated Strategy Capacity $17000000.00 Lowest Capacity Asset MSFT R735QTJ8XC9X |
class EmotionalFluorescentPinkSalmon(QCAlgorithm): def Initialize(self): self.SetStartDate(2018, 1, 1) self.SetEndDate(2021, 10, 8) self.SetCash(100000) self.atr = {}; self.atr_norm = {}; symbols = ["AMZN", "MSFT", "AAPL"] self.stocks = [self.AddEquity(ticker, Resolution.Minute).Symbol for ticker in symbols] for sec in self.stocks: self.atr[sec] = self.ATR(sec, 14, MovingAverageType.Simple, Resolution.Daily) self.spy = self.AddEquity("SPY", Resolution.Minute).Symbol self.SetWarmUp(15, Resolution.Daily) self.yest_close = self.Identity(self.spy, Resolution.Daily, Field.Close) def OnData(self, data): if self.IsWarmingUp or not self.yest_close.IsReady or not len(data.Bars) > 0: return for sec in self.stocks: if not self.atr[sec].IsReady: continue atr_curr = self.atr[sec].Current.Value price = self.Securities[sec].Price self.atr_norm[sec] = atr_curr/price # self.Plot("ATR", sec, self.atr_norm[sec]) selected_atrs = {k: v for k, v in sorted(self.atr_norm.items(), key=lambda item: item[1], reverse=True)[-1:]} portfolio_targets = [] for sec, volt in self.atr_norm.items(): if sec in selected_atrs: portfolio_targets.append(sec) if self.Time.hour == 9 and self.Time.minute == 45: for sec in portfolio_targets: price = self.Securities[self.spy].Price yest_close = self.yest_close.Current.Value if price > yest_close: self.SetHoldings(sec, 1/len(portfolio_targets)) if self.Time.hour == 15 and self.Time.minute == 45: self.Liquidate()