Overall Statistics |
Total Orders 28 Average Win 146.64% Average Loss 0% Compounding Annual Return 24.207% Drawdown 53.700% Expectancy 0 Start Equity 1000000 End Equity 77998895.50 Net Profit 7699.890% Sharpe Ratio 0.679 Sortino Ratio 0.526 Probabilistic Sharpe Ratio 5.206% Loss Rate 0% Win Rate 100% Profit-Loss Ratio 0 Alpha 0.122 Beta 0.977 Annual Standard Deviation 0.267 Annual Variance 0.071 Information Ratio 0.549 Tracking Error 0.219 Treynor Ratio 0.186 Total Fees $56448.78 Estimated Strategy Capacity $22000000.00 Lowest Capacity Asset BGU U7EC123NWZTX Portfolio Turnover 0.30% |
from AlgorithmImports import * class MacdReversionStrategy(QCAlgorithm): def Initialize(self): self.SetStartDate(2005, 1, 1) self.SetEndDate(2025, 1, 31) self.SetCash(1000000) # Set initial capital to 1 million dollars self.spxl = self.AddEquity("SPXL", Resolution.Daily).Symbol self.fast_period = 12 self.slow_period = 26 self.signal_period = 9 self.macd = self.MACD(self.spxl, self.fast_period, self.slow_period, self.signal_period, MovingAverageType.Wilders, Resolution.Daily, Field.Close) self.sma150 = self.SMA(self.spxl, 150, Resolution.Daily) # 150-day moving average self.sma10 = self.SMA(self.spxl, 10, Resolution.Daily) # 10-day moving average self.previous_histogram = None self.entry_price = None self.stop_loss = 50 self.SetWarmUp(150) def OnData(self, data): if self.IsWarmingUp: return if not self.macd.IsReady or not self.sma150.IsReady or not self.sma10.IsReady: return price = self.Securities[self.spxl].Close macd_histogram = self.macd.Current.Value - self.macd.Signal.Current.Value close_above_sma150 = price > self.sma150.Current.Value close_below_sma10 = price < self.sma10.Current.Value if close_above_sma150 and close_below_sma10 and self.previous_histogram is not None: if macd_histogram > self.previous_histogram and macd_histogram < 0: self.SetHoldings(self.spxl, 1) # Use full portfolio on every trade self.entry_price = price self.previous_histogram = macd_histogram # Exit condition: closing candle $10 above entry price or $50 below entry price (stop loss) if self.Portfolio[self.spxl].Invested and self.entry_price is not None: if price >= self.entry_price + 10 or price <= self.entry_price - self.stop_loss: self.Liquidate(self.spxl)