Overall Statistics |
Total Orders 423 Average Win 1.11% Average Loss -1.76% Compounding Annual Return 3.226% Drawdown 29.200% Expectancy 0.068 Start Equity 100000 End Equity 120969.62 Net Profit 20.970% Sharpe Ratio 0.07 Sortino Ratio 0.051 Probabilistic Sharpe Ratio 1.262% Loss Rate 35% Win Rate 65% Profit-Loss Ratio 0.63 Alpha -0.037 Beta 0.616 Annual Standard Deviation 0.131 Annual Variance 0.017 Information Ratio -0.639 Tracking Error 0.103 Treynor Ratio 0.015 Total Fees $686.24 Estimated Strategy Capacity $33000000.00 Lowest Capacity Asset SPY R735QTJ8XC9X Portfolio Turnover 19.26% |
# region imports from AlgorithmImports import * # endregion class EnergeticFluorescentPinkSardine(QCAlgorithm): def initialize(self): self.set_start_date(2018, 1, 1) self.set_end_date(2024, 1, 1) self.set_cash(100000) self.spy = self.add_equity("SPY", Resolution.MINUTE).symbol # Create a 1 hour consolidator self.consolidator = self.Consolidate(self.spy, timedelta(minutes=60), self.on_data_consolidated) # Register the RSI indicator to the consolidator self.spy_rsi = RelativeStrengthIndex(14, MovingAverageType.Simple) self.RegisterIndicator(self.spy, self.spy_rsi, self.consolidator) self.set_benchmark(self.spy) def on_data_consolidated(self, bar): # This method will be called at the end of each 1 hour period # self.log(f"Current RSI {self.spy_rsi.current.value}") if not self.portfolio.invested and self.spy_rsi.IsReady: if self.spy_rsi.Current.Value < 40: self.set_holdings(self.spy, 1) elif self.portfolio.invested and self.spy_rsi.IsReady: if self.spy_rsi.Current.Value > 60: self.liquidate(self.spy) def on_data(self, data: Slice): # This method will be called every minute pass