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)