Overall Statistics |
Total Orders 1 Average Win 0% Average Loss 0% Compounding Annual Return 20.319% Drawdown 29.600% Expectancy 0 Start Equity 100000 End Equity 174181.15 Net Profit 74.181% Sharpe Ratio 0.606 Sortino Ratio 0.718 Probabilistic Sharpe Ratio 19.329% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0.101 Beta 1.139 Annual Standard Deviation 0.29 Annual Variance 0.084 Information Ratio 0.644 Tracking Error 0.171 Treynor Ratio 0.154 Total Fees $6.54 Estimated Strategy Capacity $630000000.00 Lowest Capacity Asset AAPL R735QTJ8XC9X Portfolio Turnover 0.09% |
# code to combine indicators and backtest the performance # region imports from AlgorithmImports import * # endregion class Indicators(QCAlgorithm): def Initialize(self): self.SetStartDate(2020, 1, 1) # Set Start Date self.SetEndDate(2023, 1, 1) # Set Start Date self.SetCash(100000) # Set Strategy Cash self.spy = self.AddEquity("AAPL", Resolution.Daily).Symbol #set data for SPY self.sma = self.SMA(self.spy, 30, Resolution.Daily) #set data for SMA closing_price = self.History(self.spy, 30, Resolution.Daily)["close"] #take historic prices for SMA for time, price in closing_price.loc[self.spy].items(): self.sma.Update(time,price) #update first 30 values of SMA to historic prices def OnData(self, data: Slice): if not self.sma.IsReady: # to check if SMA is ready or not as it is a average indicator return #Another indicator to check for high and low of 60 Daily hist = self.History(self.spy, timedelta(252), Resolution.Daily) low = min(hist["low"]) high = min(hist["high"]) #combining both trading logics - SMA + High/Low price = self.Securities[self.spy].Price if price >= 1.05*high and self.sma.Current.Value > price: if not self.Portfolio[self.spy].IsLong: self.SetHoldings(self.spy,1) if price <= 0.95*low and self.sma.Current.Value < price: if not self.Portfolio[self.spy].IsShort: self.SetHoldings(self.spy,-1) self.Plot("Benchmark", "60m-High", high) self.Plot("Benchmark", "60m-Low", low) self.Plot("Benchmark", "60m-High", self.sma.Current.Value)