Overall Statistics |
Total Orders 1477 Average Win 0.56% Average Loss -0.90% Compounding Annual Return -13.246% Drawdown 56.300% Expectancy -0.035 Start Equity 100000 End Equity 49108.91 Net Profit -50.891% Sharpe Ratio -0.596 Sortino Ratio -0.464 Probabilistic Sharpe Ratio 0.003% Loss Rate 41% Win Rate 59% Profit-Loss Ratio 0.62 Alpha -0.097 Beta -0.099 Annual Standard Deviation 0.177 Annual Variance 0.031 Information Ratio -0.742 Tracking Error 0.261 Treynor Ratio 1.07 Total Fees $881.61 Estimated Strategy Capacity $0 Lowest Capacity Asset SOXS UKTSIYPJHFMT Portfolio Turnover 1.42% |
using QuantConnect; using QuantConnect.Algorithm; using QuantConnect.Data; using QuantConnect.Indicators; using QuantConnect.Orders; using System; using System.Collections.Generic; using System.Linq; namespace QuantConnect.Algorithm.CSharp { public class SummrFlagshipModel : QCAlgorithm { private Dictionary<string, RelativeStrengthIndex> _rsiIndicators; private List<string> _symbols; private DateTime _nextRebalanceTime; public override void Initialize() { // Set backtest start and end date SetStartDate(2020, 1, 1); SetEndDate(2024, 12, 31); // Set starting cash SetCash(100000); // Define symbols to trade _symbols = new List<string> { "SPY", "BIL", "IBTK", "SHY", "SOXL", "SQQQ", "SBND", "HIBL", "TECL", "SOXS" }; // Add equity symbols and initialize RSI indicators _rsiIndicators = new Dictionary<string, RelativeStrengthIndex>(); int rsiPeriod; foreach (var symbol in _symbols) { AddEquity(symbol, Resolution.Daily); // Set RSI periods based on symbol switch (symbol) { case "SPY": rsiPeriod = 6; break; case "BIL": rsiPeriod = 5; break; case "IBTK": rsiPeriod = 7; break; case "SBND": rsiPeriod = 10; break; case "HIBL": rsiPeriod = 10; break; default: rsiPeriod = 7; // Default period break; } _rsiIndicators[symbol] = RSI(symbol, rsiPeriod, MovingAverageType.Wilders, Resolution.Daily); } // Initialize rebalance time to 30 minutes after market open //_nextRebalanceTime = DateTime.MinValue; // Schedule rebalance 30 minutes after market open Schedule.On(DateRules.EveryDay(), TimeRules.AfterMarketOpen("SPY", 30), () => { Rebalance(); }); } public void Rebalance() { // Ensure RSI indicators are ready if (!_rsiIndicators.All(x => x.Value.IsReady)) return; // Retrieve RSI values var rsiSPY = _rsiIndicators["SPY"].Current.Value; var rsiBIL = _rsiIndicators["BIL"].Current.Value; var rsiIBTK = _rsiIndicators["IBTK"].Current.Value; var rsiSBND = _rsiIndicators["SBND"].Current.Value; var rsiHIBL = _rsiIndicators["HIBL"].Current.Value; // Implement strategy logic if (rsiBIL < rsiIBTK) { if (rsiSPY > 75) { // Allocate to SHY (bonds) SetHoldings("SHY", 1.0); } else { // Allocate to SOXL (bullish semiconductors) SetHoldings("SOXL", 1.0); } } else { if (rsiSBND < rsiHIBL) { // Allocate to SOXS (bearish semiconductors) or SQQQ (short QQQ) SetHoldings("SOXS", 0.5); SetHoldings("SQQQ", 0.5); } else { // Allocate to SOXL (bullish semiconductors) or TECL (bullish tech) SetHoldings("SOXL", 0.5); SetHoldings("TECL", 0.5); } } } } }