Overall Statistics
Total Trades
1484
Average Win
0%
Average Loss
0%
Compounding Annual Return
-91.515%
Drawdown
1.600%
Expectancy
0
Net Profit
-1.343%
Sharpe Ratio
-5.42
Probabilistic Sharpe Ratio
0%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
1.208
Beta
-4.821
Annual Standard Deviation
0.151
Annual Variance
0.023
Information Ratio
-6.797
Tracking Error
0.182
Treynor Ratio
0.169
Total Fees
$1484.00
class ParticleTransdimensionalAutosequencers(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2020, 11, 26)
        self.SetEndDate(2020, 11, 27)
        self.SetCash(100000) 
        self.AddEquity("SPY", Resolution.Minute)
        
        self.AddUniverseSelection(CoarseFundamentalUniverseSelectionModel(self.CoarseSelectionFunction))
        
        self.UniverseSettings.Resolution = Resolution.Minute

        self.Schedule.On(
            self.DateRules.EveryDay("SPY"),
            self.TimeRules.At(10, 0),
            self.SelectUniverse
        )
        
        self.universe = []
        self.volume_by_symbol = {}
        
        self.logged = False
        
    def OnData(self, data):
        if len(self.volume_by_symbol) == 0:
            
            if not self.logged:
                self.logged = True
                #self.Log(f"Universe size after volume filter: {len(self.universe)}")
            return 
        
        for symbol in self.volume_by_symbol.keys():
            if data.ContainsKey(symbol) and data[symbol] is not None:
                self.volume_by_symbol[symbol] += data[symbol].Volume
    
    def CoarseSelectionFunction(self, coarse):
        self.volume_by_symbol = {c.Symbol: 0 for c in coarse if c.Price > 10}
        
        #self.Log(f"Universe size before volume filter: {len(self.volume_by_symbol)}")
        
        return list(self.volume_by_symbol.keys())
        
    def SelectUniverse(self):
        self.universe = []
        
        for symbol, volume in self.volume_by_symbol.items():
            if volume > 50000:
                self.universe.append(symbol)
                
                if self.CurrentSlice.ContainsKey(symbol) and self.CurrentSlice[symbol] is not None:
                    self.MarketOrder(symbol, 1)
        
        self.volume_by_symbol.clear()
        self.logged = False


    def OnSecuritiesChanged(self, changes):
        self.changes = changes
        #self.Log(f"OnSecuritiesChanged({self.Time}):: {changes}")
        
        for security in self.changes.RemovedSecurities:
            if security.Invested:
                self.Liquidate(security.Symbol)
        #
        #for security in self.changes.AddedSecurities:
        #    self.SetHoldings(security.Symbol, 0.18)
            #self.Debug("BUY")
            #self.Debug(security.Symbol)
            #self.Debug(security.Price)
            #self.Debug(self.Time)