Overall Statistics |
Total Orders 11 Average Win 31.21% Average Loss 0% Compounding Annual Return 7.318% Drawdown 31.100% Expectancy 0 Start Equity 100000 End Equity 545010.48 Net Profit 445.010% Sharpe Ratio 0.32 Sortino Ratio 0.262 Probabilistic Sharpe Ratio 0.172% Loss Rate 0% Win Rate 100% Profit-Loss Ratio 0 Alpha 0.016 Beta 0.476 Annual Standard Deviation 0.111 Annual Variance 0.012 Information Ratio -0.039 Tracking Error 0.116 Treynor Ratio 0.075 Total Fees $93.78 Estimated Strategy Capacity $1700000000.00 Lowest Capacity Asset SPY R735QTJ8XC9X Portfolio Turnover 0.13% |
from AlgorithmImports import * from QuantConnect.DataSource import * class FredAlternativeDataAlgorithm(QCAlgorithm): def initialize(self) -> None: self.set_start_date(2000, 1, 1) self.set_end_date(2023, 12, 31) self.set_cash(100000) self.spy = self.add_equity("SPY", Resolution.DAILY).symbol # Requesting FED US peak-to-trough OECD recession indicators for trade signal generation self.fred_peak_to_trough = self.add_data(Fred, Fred.OECDRecessionIndicators.UNITED_STATES_FROM_PEAK_THROUGH_THE_TROUGH, Resolution.DAILY).symbol # Historical data history = self.history(self.fred_peak_to_trough, 60, Resolution.DAILY) self.debug(f"We got {len(history)} items from our history request") def on_data(self, slice: Slice) -> None: # Trade with updated FED peak-to-trough indicator if slice.contains_key(self.fred_peak_to_trough) and slice.contains_key(self.spy): peak_to_trough = slice.Get(Fred, self.fred_peak_to_trough).value # Buy SPY if peak to trough value is 0, which is the expansionary period if peak_to_trough == 0 and not self.portfolio.invested: self.set_holdings(self.spy, 1) # Liquidate holdings if peak to trough value is 1, which is recessionary period elif peak_to_trough == 1 and self.portfolio.invested: self.liquidate(self.spy)