Overall Statistics
Total Trades
334
Average Win
0.65%
Average Loss
-0.40%
Compounding Annual Return
9.441%
Drawdown
9.500%
Expectancy
1.418
Net Profit
170.209%
Sharpe Ratio
1.821
Probabilistic Sharpe Ratio
99.619%
Loss Rate
8%
Win Rate
92%
Profit-Loss Ratio
1.63
Alpha
0.079
Beta
0.11
Annual Standard Deviation
0.053
Annual Variance
0.003
Information Ratio
-0.359
Tracking Error
0.162
Treynor Ratio
0.873
Total Fees
$919.61
import numpy as np

syms     = ['RHS','FDN','EFZ','CYB','TFI','FXF','AGG','PZA','SUB','GSY','GBF','CZA','LQD','UUP','EUM','PCY','CMF','BIV','PZT','BSV',
'AGZ','PWZ','RECS','RYH','SPIP','SH','EUO','PVI','XLY','SPTI','SHM','MUB','MYY','AOK','JNK','NYF','TIP','BIL','TLH','RWM','VGT']
        
class MultidimensionalModulatedRegulators(QCAlgorithm):
    def Initialize(self):
        self.SetStartDate(2010, 1, 1)
        self.SetCash(1000000)
        self.SetExecution(VolumeWeightedAveragePriceExecutionModel())
 
        self.symbols = []
        for i in range(len(syms)):
            self.symbols.append(Symbol.Create(syms[i], SecurityType.Equity, Market.USA))
            self.Debug(syms[i])
            
        self.SetUniverseSelection( ManualUniverseSelectionModel(self.symbols) )
        self.UniverseSettings.Resolution = Resolution.Hour
        
        self.AddEquity('SPY', Resolution.Hour)
        self.SetBenchmark('SPY')

        self.SetBrokerageModel(AlphaStreamsBrokerageModel())
        
        self.constant_weights = np.array([0.00804295, 0.03900719, 0.02942488, 0.02070469, 0.01916339, 0.01905802,
         0.02649537, 0.02173771, 0.03434027, 0.01406504, 0.03252464, 0.01799447,
         0.02871560, 0.04110242, 0.03393579, 0.01583645, 0.01656219, 0.00996907,
         0.03387620, 0.01743698, 0.03956412, 0.01889766, 0.01254530, 0.01385734,
         0.01640994, 0.02678624, 0.03706501, 0.02603432, 0.04656506, 0.01275349,
         0.02654265, 0.02035014, 0.03365334, 0.02864399, 0.02726106, 0.02285904,
         0.02313888, 0.01343120, 0.02560550, 0.00750572, 0.04053675])

        self.constant_weights /= np.sum(np.abs(self.constant_weights))
        self.leverage = 2.0

    def OnData(self, data):
                
        rebalance = False
        
        if self.Portfolio.TotalHoldingsValue > 0:
            total = 0.0
            for i, sym in enumerate(self.symbols):
                curr = (self.Securities[sym].Holdings.HoldingsValue/self.Portfolio.TotalHoldingsValue)
                diff = self.constant_weights[i] - curr
                total += np.abs(diff)
                
            if total > 0.16: 
                rebalance = True

        if rebalance or (not self.Portfolio.Invested):
            for i, sym in enumerate(self.symbols):
                if self.constant_weights[i] != 0:
                    self.SetHoldings(sym, self.constant_weights[i] * self.leverage)