| Overall Statistics |
|
Total Orders 11943 Average Win 0.05% Average Loss -0.05% Compounding Annual Return -1.843% Drawdown 20.000% Expectancy -0.018 Start Equity 100000 End Equity 92330.67 Net Profit -7.669% Sharpe Ratio -0.454 Sortino Ratio -0.515 Probabilistic Sharpe Ratio 0.323% Loss Rate 47% Win Rate 53% Profit-Loss Ratio 0.86 Alpha -0.032 Beta -0.2 Annual Standard Deviation 0.093 Annual Variance 0.009 Information Ratio -0.46 Tracking Error 0.197 Treynor Ratio 0.21 Total Fees $12331.25 Estimated Strategy Capacity $3600000.00 Lowest Capacity Asset KXI TM694I8OJJAD Portfolio Turnover 20.52% |
#region imports
from AlgorithmImports import *
#endregion
import matplotlib.pyplot as plt
import scipy.stats
xs = scipy.stats.norm.rvs(5, 2, 10000)
fig, axes = plt.subplots(1, 2, figsize=(9, 3))
axes[0].hist(xs, bins=50)
axes[0].set_title("Samples")
axes[1].hist(
scipy.stats.norm.cdf(xs, 5, 2),
bins=50
)
axes[1].set_title("CDF(samples)")#region imports
from AlgorithmImports import *
#endregion
from clr import AddReference
AddReference("System")
AddReference("QuantConnect.Algorithm")
AddReference("QuantConnect.Algorithm.Framework")
AddReference("QuantConnect.Common")
from System import *
from QuantConnect import *
from QuantConnect.Orders import *
from QuantConnect.Algorithm import *
from QuantConnect.Algorithm.Framework import *
from QuantConnect.Algorithm.Framework.Selection import *
from Alphas.HistoricalReturnsAlphaModel import HistoricalReturnsAlphaModel
from QuantConnect.Algorithm.Framework.Execution import *
from QuantConnect.Algorithm.Framework.Risk import *
from Portfolio.BlackLittermanOptimizationPortfolioConstructionModel import *
from Portfolio.UnconstrainedMeanVariancePortfolioOptimizer import UnconstrainedMeanVariancePortfolioOptimizer
from Risk.NullRiskManagementModel import NullRiskManagementModel
from Alphas.EmaCrossAlphaModel import EmaCrossAlphaModel
from Alphas.HistoricalReturnsAlphaModel import HistoricalReturnsAlphaModel
from Alphas.MacdAlphaModel import MacdAlphaModel
from Alphas.RsiAlphaModel import RsiAlphaModel
class EnergeticSkyBlueFrog(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2021, 1, 1)
self.SetEndDate(2025,4,15)
self._cash= 100000
self.SetCash(self._cash)
#self.SetWarmUp(150)
#self.SetAlpha(HistoricalReturnsAlphaModel(5, resolution = Resolution.Daily))
self.AddAlpha(EmaCrossAlphaModel(10, 30, Resolution.Daily))
self.AddAlpha(MacdAlphaModel(10, 50, 30, MovingAverageType.Exponential, Resolution.Daily))
self.AddAlpha(RsiAlphaModel(100, Resolution.Daily))
self.UniverseSettings.Resolution = Resolution.Daily
symbols = [ # OUR INVESTMENT UNIVERSE
# AGGREGATE INDICES
Symbol.Create("IEFA", SecurityType.Equity, Market.USA),
Symbol.Create("AGG", SecurityType.Equity, Market.USA),
Symbol.Create("IWM", SecurityType.Equity, Market.USA),
Symbol.Create("EEM", SecurityType.Equity, Market.USA),
Symbol.Create("EWJ", SecurityType.Equity, Market.USA),
Symbol.Create("EPP", SecurityType.Equity, Market.USA),
# FIXED INCOME AND REAL ESTATE
Symbol.Create("IYR", SecurityType.Equity, Market.USA),
Symbol.Create("LQD", SecurityType.Equity, Market.USA),
Symbol.Create("EMB", SecurityType.Equity, Market.USA),
Symbol.Create("IEF", SecurityType.Equity, Market.USA),
Symbol.Create("IEI", SecurityType.Equity, Market.USA),
# COMMODITIES
Symbol.Create("IAU", SecurityType.Equity, Market.USA),
# FACTORS
Symbol.Create("USMV", SecurityType.Equity, Market.USA),
Symbol.Create("DGRO", SecurityType.Equity, Market.USA),
Symbol.Create("QUAL", SecurityType.Equity, Market.USA),
Symbol.Create("DVY", SecurityType.Equity, Market.USA),
Symbol.Create("MTUM", SecurityType.Equity, Market.USA),
Symbol.Create("VLUE", SecurityType.Equity, Market.USA),
Symbol.Create("EFAV", SecurityType.Equity, Market.USA),
Symbol.Create("EEMV", SecurityType.Equity, Market.USA),
Symbol.Create("IDV", SecurityType.Equity, Market.USA),
Symbol.Create("DVY", SecurityType.Equity, Market.USA),
Symbol.Create("IQLT", SecurityType.Equity, Market.USA),
# SECTORS AND INDUSTRIES
Symbol.Create("IBB", SecurityType.Equity, Market.USA),
Symbol.Create("IHI", SecurityType.Equity, Market.USA),
Symbol.Create("IYW", SecurityType.Equity, Market.USA),
Symbol.Create("IGF", SecurityType.Equity, Market.USA),
Symbol.Create("IYH", SecurityType.Equity, Market.USA),
Symbol.Create("VYF", SecurityType.Equity, Market.USA),
Symbol.Create("IXC", SecurityType.Equity, Market.USA),
Symbol.Create("PICK", SecurityType.Equity, Market.USA),
Symbol.Create("IYE", SecurityType.Equity, Market.USA),
Symbol.Create("KXI", SecurityType.Equity, Market.USA),
Symbol.Create("WOOD", SecurityType.Equity, Market.USA),
Symbol.Create("SPY", SecurityType.Equity, Market.USA)]
self.SetUniverseSelection(ManualUniverseSelectionModel(symbols))
self.SetPortfolioConstruction( EqualWeightingPortfolioConstructionModel() )
#optimizer = UnconstrainedMeanVariancePortfolioOptimizer()
#self.SetPortfolioConstruction(BlackLittermanOptimizationPortfolioConstructionModel(optimizer = optimizer))
self.SetExecution(ImmediateExecutionModel())
self.SetRiskManagement(NullRiskManagementModel())
self._benchmark = self.AddEquity("SPY", Resolution.Daily).Symbol
self._benchmarkInitial = self.History(self._benchmark, 1, Resolution.Daily)
self._benchmarkPrice = self._benchmarkInitial['close'][0]
def OnData(self,data):
self.Plot("Relative Performance", "SPY", self._cash*self.Securities["SPY"].Close/self._benchmarkPrice)
self.Plot("Relative Performance", "Portfolio Value", self.Portfolio.TotalPortfolioValue)