Overall Statistics |
Total Trades 2772 Average Win 0.80% Average Loss -0.38% Compounding Annual Return -8.638% Drawdown 29.400% Expectancy -0.080 Net Profit -24.020% Sharpe Ratio -0.37 Probabilistic Sharpe Ratio 0.182% Loss Rate 71% Win Rate 29% Profit-Loss Ratio 2.12 Alpha -0.051 Beta -0.004 Annual Standard Deviation 0.137 Annual Variance 0.019 Information Ratio -0.62 Tracking Error 0.18 Treynor Ratio 13.568 Total Fees $64758.13 Estimated Strategy Capacity $4700000.00 Lowest Capacity Asset QQQ RIWIV7K5Z9LX |
#region imports from AlgorithmImports import * #endregion # Trading QC Super Trend Indicator # -------------------------------------------- STOCK = "QQQ"; BAR = 201; SL = -0.0145; TP = 0.005; ATR = 1; MULT = 0.165; # -------------------------------------------- class SuperTrendIndicator(QCAlgorithm): def Initialize(self): self.SetStartDate(DateTime(2005, 5, 17, 9, 30, 0)) self.SetEndDate(DateTime(2008, 6, 1, 16, 0, 0)) self.SetCash(200000) res = Resolution.Minute #ATR = int(self.GetParameter("ATR_A")) #MULT = float(self.GetParameter("MULT_A")) self.stock = self.AddEquity(STOCK, res, extendedMarketHours = True).Symbol consolidator = TradeBarConsolidator(timedelta(minutes = BAR)) self.Consolidate(self.stock, timedelta(minutes = BAR), self.BarHandler) self.st = SuperTrend(ATR, MULT, MovingAverageType.Wilders) self.RegisterIndicator(self.stock, self.st, consolidator) self.SetWarmUp(50*BAR*ATR, res) #self.rollingWindow = RollingWindow[TradeBar](3) #Rolling window ??? def BarHandler(self, consolidated): if self.IsWarmingUp: return if not self.st.IsReady: return self.Plot(STOCK, "Price", self.Securities[self.stock].Price) self.Plot(STOCK, "Super Trend", self.st.Current.Value) pnl = self.Securities[self.stock].Holdings.UnrealizedProfitPercent if self.Securities[self.stock].High > self.st.Current.Value: # and self.Securities[self.stock].Open < self.Securities[self.stock].High: # trend is bullish and (self.Securities[self.stock].Price > self.st.Current.Value) self.SetHoldings(self.stock, 1, True, "Buy Signal") elif self.Securities[self.stock].Low < self.st.Current.Value: # and self.Securities[self.stock].Open > self.Securities[self.stock].Low: # trend is bearish and (self.Securities[self.stock].Price < self.st.Current.Value) 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")