Overall Statistics |
Total Orders 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Start Equity 100000000 End Equity 100000000 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 -1.489 Tracking Error 0.126 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset Portfolio Turnover 0% |
# region imports from AlgorithmImports import * # endregion class HipsterGreenHippopotamus(QCAlgorithm): def Initialize(self): self.SetStartDate(2022, 9, 27) self.SetCash(100000000) self.underlying = self.AddIndex("SPX", Resolution.Minute).Symbol self.SetSecurityInitializer(MySecurityInitializer(self, self.BrokerageModel, FuncSecuritySeeder(self.GetLastKnownPrices))) self.Schedule.On( self.DateRules.EveryDay('SPX'), self.TimeRules.BeforeMarketClose('SPX', 60), self.get_greeks ) def get_greeks(self): contracts = list(self.OptionChainProvider.GetOptionContractList(self.underlying, self.Time)) contract = contracts[0] option = self.AddIndexOptionContract(contract, Resolution.Hour) for bar in self.History[TradeBar](contract, 4, Resolution.Hour): option.SetMarketPrice(bar) # EvaluatePriceModel contract_data = OptionContract(option, self.underlying) contract_data.Time = self.Time # None below is the Slice object. It's not used. result = option.EvaluatePriceModel(None, contract_data) iv = result.ImpliedVolatility greeks = result.Greeks delta = greeks.Delta self.Plot('Delta', '-', delta) # Alex: We don't need the following to calculate the greeks, # since `contract_data` has their data price = option.Price underlying_price = option.Underlying.Price #Subscription and unsubscription example option = self.RemoveOptionContract(contract) option = self.AddIndexOptionContract(contract, Resolution.Hour) underlying_price = option.Underlying.Price price = option.Price assert self.Securities[contract].Price == 0 self.MarketOrder(contract, 1) self.Plot('Delta', '-', delta) # ToDo: Get the option Greeks without OnData. Is it possible? (since we can obtain the price immediately) # Outside of the algorithm class class MySecurityInitializer(BrokerageModelSecurityInitializer): def __init__(self, algorithm, brokerage_model: IBrokerageModel, security_seeder: ISecuritySeeder) -> None: super().__init__(brokerage_model, security_seeder) self.algorithm = algorithm self.symbols = [] def Initialize(self, security: Security) -> None: # First, call the superclass definition # This method sets the reality models of each security using the default reality models of the brokerage model super().Initialize(security) if security.symbol.value in self.symbols: return self.symbols.append(security.symbol.value)