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)