Overall Statistics |
Total Trades 3017 Average Win 0.04% Average Loss -0.12% Compounding Annual Return -20.623% Drawdown 50.400% Expectancy -0.247 Net Profit -37.614% Sharpe Ratio -0.662 Probabilistic Sharpe Ratio 0.187% Loss Rate 45% Win Rate 55% Profit-Loss Ratio 0.36 Alpha 0.052 Beta -1.199 Annual Standard Deviation 0.198 Annual Variance 0.039 Information Ratio -0.845 Tracking Error 0.335 Treynor Ratio 0.109 Total Fees $3163.56 Estimated Strategy Capacity $34000000.00 Lowest Capacity Asset QQQ RIWIV7K5Z9LX |
#region imports from AlgorithmImports import * #endregion # Trading QC Super Trend Indicator # -------------------------------------------- STOCK = "QQQ"; BAR = 1; SL = -0.0145; TP = 0.01; #ATR = 3; MULT = 0.09; wil m 0.2 and kama 0.16 spy 3 0.1.. A1M0.1 A2M0.2 A1M0.16 # -------------------------------------------- class SuperTrendIndicator(QCAlgorithm): def Initialize(self): self.SetStartDate(DateTime(2020, 5, 17, 9, 30, 0)) self.SetEndDate(DateTime(2022, 6, 1, 16, 0, 0)) self.SetCash(200000) res = Resolution.Hour ATR = int(self.GetParameter("ATR_A")) MULT = float(self.GetParameter("MULT_A")) self.stock = self.AddEquity(STOCK, res).Symbol self.heikin_ashi = HeikinAshi() #self.heikin_ashi = self.HeikinAshi(self.stock, res) # heikin ashi consolidator = TradeBarConsolidator(timedelta(hours = BAR)) self.Consolidate(self.stock, timedelta(hours = BAR), self.BarHandler) self.st = IndicatorExtensions.Of(SuperTrend(ATR, MULT, MovingAverageType.Kama), self.heikin_ashi) self.RegisterIndicator(self.stock, self.st, consolidator) self.SetWarmUp(5*BAR*ATR, res) #Close every friday #self.Schedule.On(self.DateRules.Every(DayOfWeek.Friday), self.TimeRules.At(16, 0), self.FridayClosed) #Liquidate at 10k loss #self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.Every(timedelta(minutes=10)), self.LiquidateUnrealizedLosses) #Close Every Friday #def FridayClosed(self): #self.Liquidate(self.stock) #self.Log(f"Friday at 4pm: Fired at: {self.Time}") #liquidate at 10k loss #def LiquidateUnrealizedLosses(self): # Liquidate any unrealized loss of over 10000 dollars or can use percentage of available funds, #if self.Portfolio.TotalUnrealizedProfit < -10000: #self.Log(f"Liquidated due to unrealized losses at: {self.Time}") #self.Liquidate() def BarHandler(self, consolidated): if self.IsWarmingUp: return if not self.st.IsReady: return if not self.heikin_ashi: return self.Plot(STOCK, "Price", self.Securities[self.stock].Price) self.Plot(STOCK, "Super Trend", self.st.Current.Value) #stop trading at 3:30 every Friday #stop_time = self.Time.replace(day=5, hour=15, minute=30, second=0) #if self.Time >= stop_time: #return pnl = self.Securities[self.stock].Holdings.UnrealizedProfitPercent if self.heikin_ashi.High.Current.Value > self.st.Current.Value: # Bullish self.SetHoldings(self.stock, 1, True, "Buy Signal") elif self.heikin_ashi.Low.Current.Value < self.st.Current.Value: # Bearish self.SetHoldings(self.stock, -1, True, "Sell Signal") #self.Liquidate(self.stock, "Sell Signal") if self.Portfolio[self.stock].Invested: if pnl < SL: self.Liquidate(self.stock, "Stop Loss") #elif pnl > TP: #self.Liquidate(self.stock, "Take Profit")