Overall Statistics |
Total Trades 112 Average Win 0.78% Average Loss -0.82% Compounding Annual Return -3.127% Drawdown 6.500% Expectancy -0.028 Net Profit -1.568% Sharpe Ratio -0.192 Probabilistic Sharpe Ratio 15.674% Loss Rate 50% Win Rate 50% Profit-Loss Ratio 0.94 Alpha -0.012 Beta 0.024 Annual Standard Deviation 0.092 Annual Variance 0.008 Information Ratio 0.991 Tracking Error 0.224 Treynor Ratio -0.73 Total Fees $362.55 Estimated Strategy Capacity $30000000.00 Lowest Capacity Asset AAPL R735QTJ8XC9X |
# Fading The Gap from AlgorithmImports import * # --------------------------------------------------- STOCK = "AAPL"; PERIOD = 100; NUM_DEVIATIONS = 3.000; # --------------------------------------------------- class FadingTheGap(QCAlgorithm): def Initialize(self): self.SetStartDate(2022, 1, 1) self.SetEndDate(2022, 7, 1) self.SetCash(100000) res = Resolution.Minute self.stock = self.AddEquity(STOCK, res).Symbol self.SetWarmUp(PERIOD, res) self.Schedule.On(self.DateRules.EveryDay(self.stock), self.TimeRules.BeforeMarketClose(self.stock, 0), self.ClosingBar) self.Schedule.On(self.DateRules.EveryDay(self.stock), self.TimeRules.AfterMarketOpen(self.stock, 1), self.OpeningBar) self.Schedule.On(self.DateRules.EveryDay(self.stock), self.TimeRules.AfterMarketOpen(self.stock, 45), self.ClosePositions) self.window = RollingWindow[TradeBar](2) self.volatility = self.STD(self.stock, PERIOD, res) def OpeningBar(self): if self.IsWarmingUp: return if self.stock in self.CurrentSlice.Bars: self.window.Add(self.CurrentSlice[self.stock]) if not self.window.IsReady or not self.volatility.IsReady: return delta = self.window[0].Open - self.window[1].Close deviations = delta / self.volatility.Current.Value if deviations < -NUM_DEVIATIONS: self.SetHoldings(self.stock, 1) elif deviations > NUM_DEVIATIONS: self.SetHoldings(self.stock, -1) def ClosePositions(self): self.Liquidate(self.stock) def ClosingBar(self): self.window.Add(self.CurrentSlice[self.stock])