Overall Statistics
Total Trades
0
Average Win
0%
Average Loss
0%
Compounding Annual Return
0%
Drawdown
0%
Expectancy
0
Net Profit
0%
Sharpe Ratio
0
Probabilistic Sharpe Ratio
0%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
0
Beta
0
Annual Standard Deviation
0
Annual Variance
0
Information Ratio
-1.245
Tracking Error
0.179
Treynor Ratio
0
Total Fees
$0.00
class SMAUniverse(QCAlgorithm):
    
    def Initialize(self):
        self.SetStartDate(2020, 9, 18)
        self.SetEndDate(2020, 10, 4)
        self.SetCash(100000)
        self.UniverseSettings.Resolution = Resolution.Daily
        self.AddUniverse(self.CoarseSelectionFunction)
        
        #1. Create our dictionary and save it to self.averages
        self.averages = {}
    
    def CoarseSelectionFunction(self, universe):  
        selected = []
        universe = sorted(universe, key=lambda c: c.DollarVolume, reverse=True)  
        universe = [c for c in universe if c.Price > 10 and c.HasFundamentalData][:100]
        
        # Create loop to use all the coarse data
        for coarse in universe:  
            symbol = coarse.Symbol 
            self.Debug("CoarseSelectionFunction {0}".format(symbol) )
            
            #2. Check if we've created an instance of SelectionData for this symbol
            if symbol not in self.averages:
                #3. Create a new instance of SelectionData and save to averages[symbol]
                self.averages[symbol] = SelectionData()
            #4. Update the symbol with the latest coarse.AdjustedPrice data
            self.averages[symbol].update(self.Time, coarse.AdjustedPrice)
            
            #5. Check if 150-SMA > 200-SMA and if so append the symbol to selected list.
            if self.averages[symbol].fast > self.averages[symbol].slow:
                if self.averages[symbol].is_ready():
                    selected.append(symbol)
        return selected[:10]
        
    def OnData(self, data):
        # self.Debug("no. of symbols held in this slice {0}".format( len(self.ActiveSecurities) ))
        symbols = [x.Symbol for x in self.ActiveSecurities.Values]
        
        for symbol in symbols:
            self.Debug(symbol)
        
    # def OnSecuritiesChanged(self, changes):
    #     for security in changes.RemovedSecurities:
    #         self.Liquidate(security.Symbol)
       
    #     for security in changes.AddedSecurities:
    #         self.SetHoldings(security.Symbol, 0.10)
            
class SelectionData(object):
    def __init__(self):
        self.slow = SimpleMovingAverage(200)
        self.fast = SimpleMovingAverage(150)
    
    def is_ready(self):
        return self.slow.IsReady and self.fast.IsReady
    
    def update(self, time, price):
        self.fast.Update(time, price)
        self.slow.Update(time, price)