Overall Statistics |
Total Trades 6 Average Win 0.59% Average Loss -2.87% Compounding Annual Return -24.373% Drawdown 6.900% Expectancy -0.397 Net Profit -4.537% Sharpe Ratio -2.1 Probabilistic Sharpe Ratio 5.538% Loss Rate 50% Win Rate 50% Profit-Loss Ratio 0.21 Alpha -0.193 Beta 0.051 Annual Standard Deviation 0.083 Annual Variance 0.007 Information Ratio -2.758 Tracking Error 0.197 Treynor Ratio -3.43 Total Fees $4.00 Estimated Strategy Capacity $260000.00 Lowest Capacity Asset GOOCV XG8PSNPNECFA|GOOCV VP83T1ZUHROL |
from AlgorithmImports import * class USEquityOptionsDataAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2020, 6, 1) self.SetEndDate(2020, 8, 1) self.SetCash(100000) # Requesting data self.underlying = self.AddEquity("GOOG").Symbol option = self.AddOption("GOOG") self.option_symbol = option.Symbol # Set our strike/expiry filter for this option chain option.SetFilter(-2, +2, 0, 7) self.contract = None def OnData(self, data): if self.Portfolio[self.underlying].Invested: self.Liquidate(self.underlying) if self.contract is not None and self.Portfolio[self.contract.Symbol].Invested: return chain = data.OptionChains.get(self.option_symbol) if chain: # Select call contracts calls = [contract for contract in chain if contract.Right == OptionRight.Call] if len(calls) == 0: return # Select the call contracts with the furthest expiration furthest_expiry = sorted(calls, key = lambda x: x.Expiry, reverse=True)[0].Expiry furthest_expiry_calls = [contract for contract in calls if contract.Expiry == furthest_expiry] # From the remaining contracts, select the one with its strike closest to the underlying price self.contract = sorted(furthest_expiry_calls, key = lambda x: abs(chain.Underlying.Price - x.Strike))[0] self.MarketOrder(self.contract.Symbol, 1) def OnSecuritiesChanged(self, changes): for security in changes.AddedSecurities: # Historical data history = self.History(security.Symbol, 10, Resolution.Minute) self.Debug(f"We got {len(history)} from our history request for {security.Symbol}")