Overall Statistics
Total Trades
2
Average Win
0.78%
Average Loss
0%
Compounding Annual Return
17.026%
Drawdown
1.300%
Expectancy
0
Net Profit
3.981%
Sharpe Ratio
3.626
Probabilistic Sharpe Ratio
85.700%
Loss Rate
0%
Win Rate
100%
Profit-Loss Ratio
0
Alpha
-0.038
Beta
0.273
Annual Standard Deviation
0.048
Annual Variance
0.002
Information Ratio
-5.841
Tracking Error
0.103
Treynor Ratio
0.635
Total Fees
$1.00
Estimated Strategy Capacity
$3500000.00
from QuantConnect.Algorithm import *
from QuantConnect.Securities.Option import OptionPriceModels

class BasicTemplateOptionsFilterUniverseAlgorithm(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2019, 1, 1)
        self.SetEndDate(2019, 4, 1)
        self.SetCash(100000)
        
        self.option = self.AddOption("AAPL")
        self.option.PriceModel = OptionPriceModels.CrankNicolsonFD()
        
        self.option.SetFilter(-3, +3, 1, 31)
        
        self.SetWarmUp(30, Resolution.Daily)

    def OnData(self,slice):
        
        if self.IsWarmingUp or self.Portfolio.Invested:
            return 
            
        for symbol, chain in slice.OptionChains.items():
            
            contracts = [c for c in chain if c.Right == OptionRight.Put]
        
            if len(contracts) == 0:
                self.Log("No put contracts")
                return
                
            sorted_contracts = sorted(contracts, key = lambda x: x.Expiry)
            
            # Select contracts with the closest expiry
            closest_expiry_contracts = []
            for contract in sorted_contracts:
                if contract.Expiry == sorted_contracts[0].Expiry:
                    closest_expiry_contracts.append(contract)
                else:
                    break
            
            # Sort remaining contracts by Delta
            sorted_by_delta = sorted(closest_expiry_contracts, key=lambda x: x.Greeks.Delta)
            
            self.Log(f"Delta: {sorted_by_delta[0].Greeks.Delta}")
            
            # Sell put option
            self.MarketOrder(sorted_by_delta[0].Symbol, -1)