Overall Statistics |
Total Trades 15 Average Win 1.34% Average Loss -2.62% Compounding Annual Return -48.954% Drawdown 10.600% Expectancy -0.568 Net Profit -10.436% Sharpe Ratio -2.334 Loss Rate 71% Win Rate 29% Profit-Loss Ratio 0.51 Alpha -0.519 Beta 0.014 Annual Standard Deviation 0.222 Annual Variance 0.049 Information Ratio -1.654 Tracking Error 0.347 Treynor Ratio -36.146 Total Fees $3.25 |
from datetime import timedelta import pandas as pd import numpy as np class BasicTemplateOptionsAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2018, 1, 1) #Set algorithm start date self.SetEndDate(2018, 3, 1) #Set algorithm end date self.SetCash(50000) # Set strategy cash equity = self.AddEquity("GOOG", Resolution.Minute) # Add the underlying stock: Google option = self.AddOption("GOOG", Resolution.Minute) # Add all the option contracts corresponding to underlying stock self.symbol = option.Symbol # Get the symbol of the underlying asset ''' If the market price of GOOG is S Since the strike of GOOG options is spaced $2.5 If the ATM option strike is K SetFilter choose the GOOG option contracts with strike price between (K-10,S+10) and time to expiration between 0 to 90 days ''' option.SetFilter(0, +5, timedelta(0), timedelta(30)) # use the underlying equity as the benchmark self.SetBenchmark(equity.Symbol) def OnData(self,slice): if self.Portfolio.Invested: return for i in slice.OptionChains: if i.Key != self.symbol: continue optionchain = i.Value # print out the undelying price self.Log("underlying price:" + str(optionchain.Underlying.Price)) # create a data frame to show the filtered contracts df = pd.DataFrame([[x.Right,float(x.Strike),x.Expiry,float(x.BidPrice), float(x.AskPrice), float(x.ImpliedVolatility)] for x in optionchain], index=[x.Symbol.Value for x in optionchain], columns=['type(call 0, put 1)', 'strike', 'expiry', 'ask price', 'bid price','implied volitility']) self.Log(str(df)) # we sort the contracts to find at the money (ATM) contract with farthest expiration contracts = sorted(sorted(optionchain, key = lambda x: abs(optionchain.Underlying.Price - x.Strike)),key = lambda x: x.Expiry, reverse=True) # buy the option with farthest expiration and sell it when the exchange closes if len(contracts) == 0: continue symbol = contracts[0].Symbol self.MarketOrder(symbol, 1) self.MarketOnCloseOrder(symbol, -1) def OnOrderEvent(self, orderEvent): # print out the order details self.Log(str(orderEvent))