Overall Statistics |
Total Orders 3 Average Win 0% Average Loss 0% Compounding Annual Return -24.211% Drawdown 0.500% Expectancy 0 Start Equity 500000 End Equity 498467.5 Net Profit -0.306% Sharpe Ratio -5.278 Sortino Ratio 0 Probabilistic Sharpe Ratio 13.583% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.122 Beta 0.081 Annual Standard Deviation 0.035 Annual Variance 0.001 Information Ratio 1.629 Tracking Error 0.37 Treynor Ratio -2.295 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset SPXW 31XTG94286YY6|SPX 31 Portfolio Turnover 0.04% |
# region imports from AlgorithmImports import * # endregion class OptionTest(QCAlgorithm): def initialize(self) -> None: self.set_start_date(2022, 5, 15) self.set_end_date(2022, 5, 18) self.set_cash(500000) self.universe_settings.asynchronous = True equity = self.add_equity("SPY", Resolution.HOUR) index_symbol = self.add_index("SPX").Symbol option = self.add_index_option(index_symbol, "SPX", Resolution.HOUR) option.set_filter(lambda universe: universe.strikes(-200, 200).expiration(0,29)) self.monthly_symbol = option.symbol option = self.add_index_option(index_symbol, "SPXW", Resolution.HOUR) option.set_filter(lambda universe: universe.include_weeklys().strikes(-200, 200).expiration(0,29)) self.weekly_symbol = option.symbol def sell_puts(self, chain, DTE, delta): # Takes Option Chain and isolates a specific delta and specific DTE count [DTE in trading days] # Returns a single Options Contract expos = [] for x in chain: if x.expiry not in expos: expos.append(x.expiry) expos = sorted(expos) target_dte_puts = [] for x in chain: if x.expiry == expos[DTE] and x.right == OptionRight.PUT: target_dte_puts.append(x) target_delta = sorted(target_dte_puts, key=lambda x: abs(delta - x.greeks.delta))[0] return target_delta def on_data(self, slice: Slice) -> None: if self.time.hour == 10 and self.time.minute == 0: self.log(str(self.time)) monthly_chain = slice.option_chains.get(self.monthly_symbol, None) # Un-used for now weekly_chain = slice.option_chains.get(self.weekly_symbol, None) put = self.sell_puts(weekly_chain, 3, -0.06) self.market_order(put.symbol, -1) self.log(f'sold {put.strike} put strike')