Overall Statistics |
Total Trades 170 Average Win 1.11% Average Loss -0.74% Compounding Annual Return 18.995% Drawdown 6.000% Expectancy 0.588 Net Profit 41.665% Sharpe Ratio 1.297 Probabilistic Sharpe Ratio 64.202% Loss Rate 37% Win Rate 63% Profit-Loss Ratio 1.50 Alpha 0.062 Beta 0.519 Annual Standard Deviation 0.103 Annual Variance 0.011 Information Ratio -0.038 Tracking Error 0.099 Treynor Ratio 0.258 Total Fees $447.70 Estimated Strategy Capacity $1100000000.00 Lowest Capacity Asset SPY R735QTJ8XC9X |
#region imports from AlgorithmImports import * #endregion from datetime import timedelta from AlgorithmImports import * # QC Super Trend Indicator # ------------------------------------------- STOCK = "SPY"; ATR = 2; MULT = 0.1; BAR = 50; # ------------------------------------------- class SuperTrendIndicator(QCAlgorithm): def Initialize(self): self.SetStartDate(2020, 5, 27) self.SetEndDate(2022, 5, 27) self.SetCash(200000) res = Resolution.Daily self.STOCK = self.AddEquity(STOCK, res).Symbol consolidator = TradeBarConsolidator(timedelta(hours = BAR)) self.Consolidate(self.STOCK, timedelta(hours = BAR), self.BarHandler) self.st = SuperTrend(ATR, MULT, MovingAverageType.Wilders) self.RegisterIndicator(self.STOCK, self.st, consolidator) self.SetWarmUp(5*BAR*ATR, res) 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) # SUPERTREND = IF(Current Close <= Current Final Upperband ) Then Current Final # Upperband ELSE Current Final Lowerband # BUY market order when trend is bullish , and close this order once the trend reverses , then open market order # SELL when trend is bearinsh , and close it as soon as it changes to bullish. def OnData(self, data): if self.st.IsReady: if self.Securities[self.STOCK].Price <= self.st.Current.Value: self.SetHoldings(self.STOCK, 1, True, "Buy Signal") self.Debug(self.Portfolio[self.STOCK].AveragePrice) elif self.Securities[self.STOCK].Price >= self.st.Current.Value: self.Liquidate(self.STOCK, "Sell Signal") self.Debug(self.Portfolio[self.STOCK].AveragePrice)