Overall Statistics |
Total Trades 2 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Sortino 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 Tracking Error 0 Treynor Ratio 0 Total Fees $1.00 Estimated Strategy Capacity $4000.00 Lowest Capacity Asset SPY Y05J8KTZA1K6|SPY R735QTJ8XC9X Portfolio Turnover 0.81% |
# region imports from AlgorithmImports import * # endregion class CustomExerciseModelAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2022, 7, 1) self.SetEndDate(2022, 7, 10) self.SetCash(100000) self.SetSecurityInitializer(MySecurityInitializer(self.BrokerageModel, FuncSecuritySeeder(self.GetLastKnownPrices))) option = self.AddOption("SPY") self.option_symbol = option.Symbol def OnData(self, data: Slice): chain = data.OptionChains.get(self.option_symbol) if chain: contract = sorted( [x for x in chain if x.Right == OptionRight.Call], key=lambda x: x.Strike )[0] self.MarketOrder(contract.Symbol, 1) self.ExerciseOption(contract.Symbol, 1) self.Quit() class MySecurityInitializer(BrokerageModelSecurityInitializer): def __init__(self, brokerage_model: IBrokerageModel, security_seeder: ISecuritySeeder) -> None: super().__init__(brokerage_model, security_seeder) def Initialize(self, security: Security) -> None: super().Initialize(security) if security.Type == SecurityType.Option: security.SetOptionExerciseModel(MyOptionExerciseModel()) class MyOptionExerciseModel(DefaultExerciseModel): def OptionExercise(self, option: Option, order: OptionExerciseOrder) -> List[OrderEvent]: in_the_money = option.IsAutoExercised(option.Underlying.Close) is_assignment = in_the_money and option.Holdings.IsShort order_event = OrderEvent( order.Id, option.Symbol, Extensions.ConvertToUtc(option.LocalTime, option.Exchange.TimeZone), OrderStatus.Filled, Extensions.GetOrderDirection(order.Quantity), 0.0, order.Quantity, OrderFee.Zero, "MyTag" ) order_event.IsAssignment = is_assignment return [ order_event ]