| Overall Statistics |
|
Total Trades 2 Average Win 0% Average Loss -0.54% Compounding Annual Return 6.107% Drawdown 1.000% Expectancy -1 Net Profit 0.483% Sharpe Ratio 1.234 Probabilistic Sharpe Ratio 52.377% Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.147 Beta 0.161 Annual Standard Deviation 0.049 Annual Variance 0.002 Information Ratio -7.704 Tracking Error 0.159 Treynor Ratio 0.376 Total Fees $1.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, 1, 30)
self.SetCash(100000)
self.option = self.AddOption("AAPL")
self.option.SetFilter(-1, +1, 1, 30)
self.option.PriceModel = OptionPriceModels.CrankNicolsonFD()
self.SetWarmup(30, Resolution.Daily)
self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.Every(timedelta(minutes=10)), self.PlotGreek)
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.Call]
if len(contracts) == 0:
return
sorted_contracts = sorted(contracts, key = lambda x: (x.Strike, x.Expiry), reverse=True)
contract = sorted_contracts[0]
self.MarketOrder(contract.Symbol, 1)
def get_option_for_option_holding(self, symbol):
for chain in self.CurrentSlice.OptionChains.Values:
for opt in chain:
if opt.Symbol == symbol:
return opt
def get_option_holdings(self):
options = []
for holding in self.Portfolio.Values:
if holding.Invested and holding.Type == SecurityType.Option:
option = self.get_option_for_option_holding(holding.Symbol)
if option is not None:
options.append((holding.Quantity, option))
return options
def PlotGreek(self):
options = self.get_option_holdings()
for quantity, option in options:
self.Plot("Greeks", "Values", option.Greeks.Delta)