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
0.471
Tracking Error
0.177
Treynor Ratio
0
Total Fees
$0.00
class FilterByOptions(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2020, 10, 2)  # Set Start Date
        self.SetEndDate(2020, 11, 2)  # Set Start Date
        self.SetCash(100000)  # Set Strategy Cash
        self.UniverseSettings.Resolution = Resolution.Daily
        self.AddUniverse(self.CoarseSelection)

        self.lastMonth = -1
    
    def CoarseSelection(self, coarse):
        
        if self.lastMonth == self.Time.month:
            return Universe.Unchanged
        
        sortedByDollarVolume = sorted(coarse, key=lambda x: x.DollarVolume, reverse=False)
        return [x.Symbol for x in sortedByDollarVolume if x.HasFundamentalData and x.Price > 20.0][:2000]
    
    def OnData(self, data):
        
        if self.lastMonth == self.Time.month:
            return
        self.lastMonth = self.Time.month

        filteredByHasOptions = [x.Symbol for x in self.ActiveSecurities.Values if self.HasOptions(data, x.Symbol)]
        
        self.Log("{} of {} securities have options".format(len(filteredByHasOptions), len(list(self.ActiveSecurities.Values))))
        self.Log(str([sym.Value for sym in filteredByHasOptions]))
        
    def HasOptions(self, data, symbol):
        
        options = self.OptionChainProvider.GetOptionContractList(symbol, data.Time)
        return len(options) > 0