| Overall Statistics |
|
Total Trades 145 Average Win 8.60% Average Loss -3.89% Compounding Annual Return 300.415% Drawdown 49.200% Expectancy 0.440 Net Profit 181.900% Sharpe Ratio 3.281 Probabilistic Sharpe Ratio 68.336% Loss Rate 55% Win Rate 45% Profit-Loss Ratio 2.21 Alpha 3.255 Beta -0.3 Annual Standard Deviation 1.002 Annual Variance 1.005 Information Ratio 3.282 Tracking Error 1.036 Treynor Ratio -10.975 Total Fees $324.29 Estimated Strategy Capacity $1100000.00 Lowest Capacity Asset TYH U8JOSZGR4OKL |
#region imports
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Globalization;
using System.Drawing;
using QuantConnect;
using QuantConnect.Algorithm.Framework;
using QuantConnect.Algorithm.Framework.Selection;
using QuantConnect.Algorithm.Framework.Alphas;
using QuantConnect.Algorithm.Framework.Portfolio;
using QuantConnect.Algorithm.Framework.Execution;
using QuantConnect.Algorithm.Framework.Risk;
using QuantConnect.Parameters;
using QuantConnect.Benchmarks;
using QuantConnect.Brokerages;
using QuantConnect.Util;
using QuantConnect.Interfaces;
using QuantConnect.Algorithm;
using QuantConnect.Indicators;
using QuantConnect.Data;
using QuantConnect.Data.Consolidators;
using QuantConnect.Data.Custom;
using QuantConnect.DataSource;
using QuantConnect.Data.Fundamental;
using QuantConnect.Data.Market;
using QuantConnect.Data.UniverseSelection;
using QuantConnect.Notifications;
using QuantConnect.Orders;
using QuantConnect.Orders.Fees;
using QuantConnect.Orders.Fills;
using QuantConnect.Orders.Slippage;
using QuantConnect.Scheduling;
using QuantConnect.Securities;
using QuantConnect.Securities.Equity;
using QuantConnect.Securities.Future;
using QuantConnect.Securities.Option;
using QuantConnect.Securities.Forex;
using QuantConnect.Securities.Crypto;
using QuantConnect.Securities.Interfaces;
using QuantConnect.Storage;
using QuantConnect.Data.Custom.AlphaStreams;
using QCAlgorithmFramework = QuantConnect.Algorithm.QCAlgorithm;
using QCAlgorithmFrameworkBridge = QuantConnect.Algorithm.QCAlgorithm;
#endregion
namespace QuantConnect
{
using ComposerQC;
using ComposerQC.DateRules;
public class BetaBallerV1Strategy : CalendarStrategy
{
public override IEnumerable<int> Periods => new[] { 7 };
public override IEnumerable<string> Tickers => new string[]
{
"BIL", "IEF", "SOXL", "SOXS"
};
public BetaBallerV1Strategy(ComposerQCAlgorithm algorithm) : base(algorithm)
{
this.EvaluationDateRule = new DailyDateRule(algorithm);
this.SetBacktestStartDate(2022, 1, 1);
}
public override List<PortfolioTarget> Evaluate()
{
if (SymbolData["BIL"].RSI(7) > SymbolData["IEF"].RSI(7))
{
return EqualWeight(new[] { "SOXS" });
}
else
{
return EqualWeight(new[] { "SOXL" });
}
}
}
}
#region imports
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Globalization;
using System.Drawing;
using QuantConnect;
using QuantConnect.Algorithm.Framework;
using QuantConnect.Algorithm.Framework.Selection;
using QuantConnect.Algorithm.Framework.Alphas;
using QuantConnect.Algorithm.Framework.Portfolio;
using QuantConnect.Algorithm.Framework.Execution;
using QuantConnect.Algorithm.Framework.Risk;
using QuantConnect.Parameters;
using QuantConnect.Benchmarks;
using QuantConnect.Brokerages;
using QuantConnect.Util;
using QuantConnect.Interfaces;
using QuantConnect.Algorithm;
using QuantConnect.Indicators;
using QuantConnect.Data;
using QuantConnect.Data.Consolidators;
using QuantConnect.Data.Custom;
using QuantConnect.DataSource;
using QuantConnect.Data.Fundamental;
using QuantConnect.Data.Market;
using QuantConnect.Data.UniverseSelection;
using QuantConnect.Notifications;
using QuantConnect.Orders;
using QuantConnect.Orders.Fees;
using QuantConnect.Orders.Fills;
using QuantConnect.Orders.Slippage;
using QuantConnect.Scheduling;
using QuantConnect.Securities;
using QuantConnect.Securities.Equity;
using QuantConnect.Securities.Future;
using QuantConnect.Securities.Option;
using QuantConnect.Securities.Forex;
using QuantConnect.Securities.Crypto;
using QuantConnect.Securities.Interfaces;
using QuantConnect.Storage;
using QuantConnect.Data.Custom.AlphaStreams;
using QCAlgorithmFramework = QuantConnect.Algorithm.QCAlgorithm;
using QCAlgorithmFrameworkBridge = QuantConnect.Algorithm.QCAlgorithm;
#endregion
namespace QuantConnect
{
using ComposerQC;
using ComposerQC.DateRules;
public class CommanderBndStrategy : CalendarStrategy
{
public override IEnumerable<int> Periods => new[] { 10, 20, 60 };
public override IEnumerable<string> Tickers => new string[]
{
"BND", "BIL", "TECL", "TQQQ", "UPRO", "TMF", "TLT", "UUP", "QID", "TBF", "UGL", "BTAL", "XLP"
};
public CommanderBndStrategy(ComposerQCAlgorithm algorithm) : base(algorithm)
{
this.EvaluationDateRule = new QuarterlyDateRule(algorithm);
this.SetBacktestStartDate(2011, 9, 14);
}
public override List<PortfolioTarget> Evaluate()
{
if (SymbolData["BND"].CumulativeReturn(60) > SymbolData["BIL"].CumulativeReturn(60))
{
// Risk ON - select lowest 3 RSI
var equities =
Filter(new[] { "TECL", "TQQQ", "UPRO", "TMF" },
FilterBy.RSI, 10,
Select.Bottom, 3);
return EqualWeight(equities);
}
else
{
if (SymbolData["TLT"].CumulativeReturn(20) < SymbolData["BIL"].CumulativeReturn(20))
{
// Risk OFF, Rising Rates - UUP at 50%, select lowest RSI
var equities =
Filter(new[] { "QID", "TBF" },
FilterBy.RSI, 20,
Select.Bottom, 1);
equities.Add("UUP");
return EqualWeight(equities);
}
else
{
// Risk OFF, Falling Rates
var equities = new[] { "UGL", "TMF", "BTAL", "XLP" };
return EqualWeight(equities);
}
}
}
}
}
#region imports
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Globalization;
using System.Drawing;
using QuantConnect;
using QuantConnect.Algorithm.Framework;
using QuantConnect.Algorithm.Framework.Selection;
using QuantConnect.Algorithm.Framework.Alphas;
using QuantConnect.Algorithm.Framework.Portfolio;
using QuantConnect.Algorithm.Framework.Execution;
using QuantConnect.Algorithm.Framework.Risk;
using QuantConnect.Parameters;
using QuantConnect.Benchmarks;
using QuantConnect.Brokerages;
using QuantConnect.Util;
using QuantConnect.Interfaces;
using QuantConnect.Algorithm;
using QuantConnect.Indicators;
using QuantConnect.Data;
using QuantConnect.Data.Consolidators;
using QuantConnect.Data.Custom;
using QuantConnect.DataSource;
using QuantConnect.Data.Fundamental;
using QuantConnect.Data.Market;
using QuantConnect.Data.UniverseSelection;
using QuantConnect.Notifications;
using QuantConnect.Orders;
using QuantConnect.Orders.Fees;
using QuantConnect.Orders.Fills;
using QuantConnect.Orders.Slippage;
using QuantConnect.Scheduling;
using QuantConnect.Securities;
using QuantConnect.Securities.Equity;
using QuantConnect.Securities.Future;
using QuantConnect.Securities.Option;
using QuantConnect.Securities.Forex;
using QuantConnect.Securities.Crypto;
using QuantConnect.Securities.Interfaces;
using QuantConnect.Storage;
using QuantConnect.Data.Custom.AlphaStreams;
using QCAlgorithmFramework = QuantConnect.Algorithm.QCAlgorithm;
using QCAlgorithmFrameworkBridge = QuantConnect.Algorithm.QCAlgorithm;
#endregion
namespace QuantConnect.Algorithm.CSharp
{
using ComposerQC;
using ComposerQC.Model;
public class CreativeFluorescentPinkWhale : ComposerQCAlgorithm
{
public override IStrategy SetupStrategy() => new MinimumBBStrategy(this);
}
}#region imports
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Globalization;
using System.Drawing;
using QuantConnect;
using QuantConnect.Algorithm.Framework;
using QuantConnect.Algorithm.Framework.Selection;
using QuantConnect.Algorithm.Framework.Alphas;
using QuantConnect.Algorithm.Framework.Portfolio;
using QuantConnect.Algorithm.Framework.Execution;
using QuantConnect.Algorithm.Framework.Risk;
using QuantConnect.Parameters;
using QuantConnect.Benchmarks;
using QuantConnect.Brokerages;
using QuantConnect.Util;
using QuantConnect.Interfaces;
using QuantConnect.Algorithm;
using QuantConnect.Indicators;
using QuantConnect.Data;
using QuantConnect.Data.Consolidators;
using QuantConnect.Data.Custom;
using QuantConnect.DataSource;
using QuantConnect.Data.Fundamental;
using QuantConnect.Data.Market;
using QuantConnect.Data.UniverseSelection;
using QuantConnect.Notifications;
using QuantConnect.Orders;
using QuantConnect.Orders.Fees;
using QuantConnect.Orders.Fills;
using QuantConnect.Orders.Slippage;
using QuantConnect.Scheduling;
using QuantConnect.Securities;
using QuantConnect.Securities.Equity;
using QuantConnect.Securities.Future;
using QuantConnect.Securities.Option;
using QuantConnect.Securities.Forex;
using QuantConnect.Securities.Crypto;
using QuantConnect.Securities.Interfaces;
using QuantConnect.Storage;
using QuantConnect.Data.Custom.AlphaStreams;
using QCAlgorithmFramework = QuantConnect.Algorithm.QCAlgorithm;
using QCAlgorithmFrameworkBridge = QuantConnect.Algorithm.QCAlgorithm;
#endregion
namespace QuantConnect
{
using ComposerQC;
using ComposerQC.DateRules;
public class MinimumBBStrategy : CalendarStrategy
{
public override IEnumerable<int> Periods => new[] { 5, 6, 7, 10, 13 };
public override IEnumerable<string> Tickers => new string[]
{
"BIL", "IEF", "SPY", "UVXY", "VIXY", "SOXL", "SHY", "HIBL", "SOXS", "SQQQ", "TECL"
};
public MinimumBBStrategy(ComposerQCAlgorithm algorithm) : base(algorithm)
{
this.EvaluationDateRule = new DailyDateRule(algorithm);
this.SetBacktestStartDate(2022, 2, 11);
}
public override List<PortfolioTarget> Evaluate()
{
if (SymbolData["BIL"].RSI(5) < SymbolData["IEF"].RSI(7))
{
if (SymbolData["SPY"].RSI(6) > 75m)
{
var ticker = Filter(new[] { "UVXY", "VIXY" },
FilterBy.RSI, 13,
Select.Bottom, 1);
return EqualWeight(ticker);
}
else
{
return EqualWeight(new[] { "SOXL" });
}
}
else
{
// Extremely oversold S&P (low RSI). Double check with bond mkt before going long
if (SymbolData["SHY"].RSI(10) < SymbolData["HIBL"].RSI(10))
{
var ticker = Filter(new[] { "SOXS", "SQQQ" },
FilterBy.RSI, 7,
Select.Bottom, 1);
return EqualWeight(ticker);
}
else
{
var ticker = Filter(new[] { "SOXL", "TECL" },
FilterBy.RSI, 7,
Select.Bottom, 1);
return EqualWeight(ticker);
}
}
}
}
}