├── Unusual Options Activity Reports ├── Unusual Option Activity 1.7.19.xlsx ├── Unusual Option Activity 1.8.19.xlsx └── Unusual Options Activity 1.7.19 with Money.xlsx ├── requirements.txt ├── README.md ├── credit_spreads_daily.py ├── Deprecated Code ├── hypothesis_testing_of_daily_reports.py ├── otm_options_data_acquisition (deprecated).py ├── retroactive_data_acquisition.py └── break_even_data_acquisition (deprecated).py ├── Performance_Evaluation.py ├── daily_report.py ├── retroactive_daily_reports.py ├── weekly_reports.py └── Used Option Data └── unusual-stocks-options-activity-01-07-2019.csv /Unusual Options Activity Reports/Unusual Option Activity 1.7.19.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Andrew-Reis-SMU-2022/Options_Based_Trading/HEAD/Unusual Options Activity Reports/Unusual Option Activity 1.7.19.xlsx -------------------------------------------------------------------------------- /Unusual Options Activity Reports/Unusual Option Activity 1.8.19.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Andrew-Reis-SMU-2022/Options_Based_Trading/HEAD/Unusual Options Activity Reports/Unusual Option Activity 1.8.19.xlsx -------------------------------------------------------------------------------- /Unusual Options Activity Reports/Unusual Options Activity 1.7.19 with Money.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Andrew-Reis-SMU-2022/Options_Based_Trading/HEAD/Unusual Options Activity Reports/Unusual Options Activity 1.7.19 with Money.xlsx -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | beautifulsoup4==4.7.1 2 | certifi==2018.11.29 3 | chardet==3.0.4 4 | idna==2.8 5 | iexfinance==0.3.5 6 | lxml==4.3.0 7 | numpy==1.15.4 8 | pandas==0.23.4 9 | python-dateutil==2.7.5 10 | pytz==2018.9 11 | requests==2.21.0 12 | six==1.12.0 13 | soupsieve==1.6.2 14 | urllib3==1.24.2 15 | xlrd==1.2.0 16 | XlsxWriter==1.1.2 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Options_Based_Trading 2 | 3 | Disclaimer: When I wrote all of this code, I was very much a novice with python and more practical coding concepts (learncpp.com and w33schools.com only gets you so far). I have not looked at the code contained within these scipts since they were created. If there is interest in this type of analysis, I can look into giving it a much needed rewrite/update. Please let me know in the issues tab. 4 | 5 | This program analyzes and evaluates the performance of unusual option orders made by investment banks, hedge funds, etc. You can generate daily or weekly reports, with their respective scripts. The Performance_Evaluation.py script can take raw data from any number of trading days and compute the expected return on those options if they were held to a given expiration day, without any hedging with the opposite option contract. 6 | 7 | I am no longer working on the credit_spread_daily.py script, but in its current form it can produce daily reports of unusual credit spreads that were opened for that trading day. 8 | 9 | Required folders in the main directory: 10 | For daily_report.py, Performance_Evaluation.py, and weekly_reports.py: 11 | A folder titled ‘output’ is required in the working directory. The excel file produced by the script will be titled ‘output’ and found in the ‘output’ folder. 12 | 13 | 14 | For daily_report.py and weekly_reports.py: 15 | Download a csv file from https://www.barchart.com/options/unusual-activity/stocks and place it a folder entitled ‘data’ in the working directory. 16 | 17 | For Performance_Evaluation.py: 18 | Place the same csv files as the daily and weekly reports and place it in a folder titled ‘data_for_validation’. 19 | 20 | For Credit_spreads_daily: 21 | The two folders you will use are ‘spread_data’ and ‘spread_output’. They work in the same fashion as the previous folders. 22 | 23 | -------------------------------------------------------------------------------- /credit_spreads_daily.py: -------------------------------------------------------------------------------- 1 | import os 2 | import datetime 3 | from iexfinance.stocks import Stock 4 | import pandas as pd 5 | import xlsxwriter 6 | 7 | 8 | def get_current_stock_price(ticker): 9 | print(ticker) 10 | price = Stock(ticker) 11 | stockPrice = price.get_price() 12 | return float(stockPrice) 13 | 14 | def sort_by_exp_date(option): 15 | return option.exp_date 16 | 17 | class __Stock: 18 | def __init__(self, ticker): 19 | self.price = get_current_stock_price(ticker) 20 | self.ticker = ticker 21 | self.call_spreads = {} 22 | self.call_spreads['itm'] = [] 23 | self.call_spreads['otm'] = [] 24 | self.put_spreads = {} 25 | self.put_spreads['itm'] = [] 26 | self.put_spreads['otm'] = [] 27 | 28 | def sort_spreads(self): 29 | self.call_spreads['itm'] = sorted(self.call_spreads['itm'], key=sort_by_exp_date) 30 | self.call_spreads['otm'] = sorted(self.call_spreads['otm'], key=sort_by_exp_date) 31 | self.put_spreads['itm'] = sorted(self.put_spreads['itm'], key=sort_by_exp_date) 32 | self.put_spreads['otm'] = sorted(self.put_spreads['otm'], key=sort_by_exp_date) 33 | 34 | 35 | 36 | class Spread: 37 | def __init__(self, type, ticker, last, max_loss, max_proft, break_even, probability, exp_date, leg1_strike, leg2_strike): 38 | self.type = type 39 | self.ticker = ticker 40 | self.last = float(last) 41 | self.max_loss = float(max_loss) 42 | self.max_profit = float(max_proft) 43 | self.break_even = float(break_even) 44 | self.probability = probability 45 | self.exp_date = exp_date 46 | self.leg1_strike = float(leg1_strike) 47 | self.leg2_strike = float(leg2_strike) 48 | 49 | 50 | 51 | 52 | 53 | stock_dict = {} 54 | for file in os.listdir('spread_data'): 55 | df = pd.read_csv(f'spread_data/{file}') 56 | df.drop(df.tail(1).index, inplace=True) 57 | if 'call' in file: 58 | type = 'call_credit' 59 | else: 60 | type = 'put_credit' 61 | for i in range(1, len(df.index)): 62 | raw_exp_date_list = df['Exp Date'][i].split('/') 63 | exp_date = datetime.date(int(raw_exp_date_list[2]), int(raw_exp_date_list[0]), int(raw_exp_date_list[1])) 64 | spread = Spread(type, df['Symbol'][i], df['Last'][i], df['Max Loss'][i], df['Max Profit'][i], df['Break Even'][i], df['Probability'][i], exp_date, df['Leg1 Strike'][i], df['Leg2 Strike'][i]) 65 | if not spread.ticker in stock_dict: 66 | stock_dict[spread.ticker] = __Stock(spread.ticker) 67 | if spread.type == 'call_credit': 68 | if spread.max_loss > spread.max_profit: 69 | stock_dict[spread.ticker].call_spreads['otm'].append(spread) 70 | else: 71 | stock_dict[spread.ticker].call_spreads['itm'].append(spread) 72 | else: 73 | if spread.max_loss > spread.max_profit: 74 | stock_dict[spread.ticker].put_spreads['otm'].append(spread) 75 | else: 76 | stock_dict[spread.ticker].put_spreads['itm'].append(spread) 77 | 78 | 79 | for stock in stock_dict.values(): 80 | stock.sort_spreads() 81 | 82 | def sort_by_number_of_spreads(stock): 83 | num_of_spreads = 0 84 | num_of_spreads += len(stock.call_spreads['itm']) 85 | num_of_spreads += len(stock.call_spreads['otm']) 86 | num_of_spreads += len(stock.put_spreads['itm']) 87 | num_of_spreads += len(stock.put_spreads['otm']) 88 | return num_of_spreads 89 | 90 | stock_list = sorted(stock_dict.values(), key=sort_by_number_of_spreads, reverse=True) 91 | 92 | workbook = xlsxwriter.Workbook('spread_output/spread_output.xlsx') 93 | worksheet = workbook.add_worksheet('Spread Data') 94 | 95 | worksheet.write(0, 0, "Expiration Date") 96 | worksheet.write(0, 1, "Premium") 97 | worksheet.write(0, 2, "Max Loss") 98 | worksheet.write(0, 3, "Max Profit") 99 | worksheet.write(0, 4, "Break Even") 100 | worksheet.write(0, 5, "Probability") 101 | worksheet.write(0, 6, "Leg 1 Strike") 102 | worksheet.write(0, 7, "Leg 2 Strike") 103 | worksheet.write(0, 8, "Current Price") 104 | row = 1 105 | 106 | def write_option_data(option, row, stock_price): 107 | worksheet.write(row, 0, f'{option.exp_date.month}/{option.exp_date.day}/{option.exp_date.year}') 108 | worksheet.write(row, 1, f'${option.last:,.2f}') 109 | worksheet.write(row, 2, f'${option.max_loss:,.2f}') 110 | worksheet.write(row, 3, f'${option.max_profit:,.2f}') 111 | worksheet.write(row, 4, f'${option.break_even:,.2f}') 112 | worksheet.write(row, 5, option.probability) 113 | worksheet.write(row, 6, f'${option.leg1_strike:,.2f}') 114 | worksheet.write(row, 7, f'${option.leg2_strike:,.2f}') 115 | worksheet.write(row, 8, f'${stock_price:,.2f}') 116 | 117 | for stock in stock_list: 118 | worksheet.write(row, 0 , stock.ticker) 119 | row += 1 120 | if len(stock.call_spreads['itm']) > 0: 121 | worksheet.write(row, 0, "ITM Call Credit Spread") 122 | worksheet.write(row, 1, len(stock.call_spreads['itm'])) 123 | row += 1 124 | for option in stock.call_spreads['itm']: 125 | write_option_data(option, row, stock.price) 126 | row += 1 127 | if len(stock.call_spreads['otm']) > 0: 128 | worksheet.write(row, 0, "OTM Call Credit Spread") 129 | worksheet.write(row, 1, len(stock.call_spreads['otm'])) 130 | row += 1 131 | for option in stock.call_spreads['otm']: 132 | write_option_data(option, row, stock.price) 133 | row += 1 134 | if len(stock.put_spreads['itm']) > 0: 135 | worksheet.write(row, 0, "ITM Put Credit Spread") 136 | worksheet.write(row, 1, len(stock.put_spreads['itm'])) 137 | row += 1 138 | for option in stock.put_spreads['itm']: 139 | write_option_data(option, row, stock.price) 140 | row += 1 141 | if len(stock.put_spreads['otm']) > 0: 142 | worksheet.write(row, 0, "OTM Put Credit Spread") 143 | worksheet.write(row, 1, len(stock.put_spreads['otm'])) 144 | row += 1 145 | for option in stock.put_spreads['otm']: 146 | write_option_data(option, row, stock.price) 147 | row += 1 148 | row += 1 149 | 150 | workbook.close() -------------------------------------------------------------------------------- /Deprecated Code/hypothesis_testing_of_daily_reports.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import os 3 | import xlsxwriter 4 | import xlrd 5 | from iexfinance.stocks import Stock 6 | from iexfinance.stocks import get_historical_data 7 | 8 | 9 | def get_original_stock_price(ticker, date): 10 | print(ticker) 11 | df = get_historical_data(ticker, date) 12 | return float(df[f'{date.year}-{date.month:02}-{date.day:02}']['close']) 13 | 14 | def get_current_price(ticker): 15 | print(ticker) 16 | price = Stock(ticker) 17 | stockPrice = price.get_price() 18 | return float(stockPrice) 19 | 20 | class SPY: 21 | def __init__(self, purchase_date): 22 | self.ticker = 'SPY' 23 | self.original_price = get_original_stock_price(self.ticker, purchase_date) 24 | self.current_price = get_current_price(self.ticker) 25 | self.return_percentage = (self.current_price - self.original_price) / self.original_price 26 | 27 | 28 | 29 | 30 | class Option: 31 | def __init__(self, ticker, type, exp_date, total_price, purchase_date): 32 | self.ticker = ticker 33 | self.type = type 34 | self.exp_date = exp_date 35 | self.total_price = total_price 36 | self.purchase_date = purchase_date 37 | self.original_stock_price = get_original_stock_price(ticker, purchase_date) 38 | self.current_stock_price = get_current_price(ticker) 39 | self.return_percentage = (self.current_stock_price - self.original_stock_price) / self.original_stock_price 40 | 41 | 42 | options_list = [] 43 | for file in os.listdir('data_for_validation'): 44 | read_workbook = xlrd.open_workbook(f'data_for_validation/{file}') 45 | read_worksheet = read_workbook.sheet_by_index(3) 46 | 47 | raw_purchase_date = file.split(' ')[4] 48 | purchase_date_splits = raw_purchase_date.split('.') 49 | purchase_date = datetime.date(int(purchase_date_splits[2]), int(purchase_date_splits[0]), int(purchase_date_splits[1])) 50 | 51 | for row in range(1, read_worksheet.nrows): 52 | raw_exp_date = read_worksheet.cell_value(row, 2) 53 | exp_date_splits = raw_exp_date.split('/') 54 | exp_date = datetime.date(int(exp_date_splits[2]), int(exp_date_splits[0]), int(exp_date_splits[1])) 55 | options_list.append(Option(read_worksheet.cell_value(row, 0).replace('$', ''), read_worksheet.cell_value(row, 1).lower(), 56 | exp_date, float(read_worksheet.cell_value(row, 8)), purchase_date)) 57 | 58 | 59 | list_of_calls = [option for option in options_list if option.type == 'call'] 60 | list_of_puts = [option for option in options_list if option.type == 'put'] 61 | 62 | def sort_by_exp_date(option): 63 | return option.exp_date 64 | 65 | list_of_calls = sorted(list_of_calls, key=sort_by_exp_date) 66 | list_of_puts = sorted(list_of_puts, key=sort_by_exp_date) 67 | 68 | spy = SPY(purchase_date) 69 | 70 | def WA_of_option_list(option_list): 71 | numerator = 0 72 | denominator = 0 73 | for option in option_list: 74 | numerator += option.return_percentage * option.total_price 75 | denominator += option.total_price 76 | return numerator / denominator 77 | 78 | def simple_average(option_list): 79 | numerator = 0 80 | denominator = 0 81 | for option in option_list: 82 | numerator += option.return_percentage 83 | denominator += 1 84 | return numerator / denominator 85 | 86 | write_workbook = xlsxwriter.Workbook('output/output.xlsx') 87 | sheet_name = f'Data for {purchase_date.month}.{purchase_date.day}.{purchase_date.year}' 88 | write_worksheet = write_workbook.add_worksheet(sheet_name) 89 | 90 | write_worksheet.write(0, 0, "Calls:") 91 | 92 | row = 1 93 | write_worksheet.write(row, 0, "Ticker") 94 | write_worksheet.write(row, 1, "Expiration Date") 95 | write_worksheet.write(row, 2, "Cost of Trade") 96 | write_worksheet.write(row, 3, "Original Stock Price") 97 | write_worksheet.write(row, 4, "Current Stock Price") 98 | write_worksheet.write(row, 5, "Percent Change") 99 | row += 1 100 | 101 | for option in list_of_calls: 102 | write_worksheet.write(row, 0, option.ticker) 103 | write_worksheet.write(row, 1, f'{option.exp_date.month}/{option.exp_date.day}/{option.exp_date.year}') 104 | write_worksheet.write(row, 2, option.total_price) 105 | write_worksheet.write(row, 3, option.original_stock_price) 106 | write_worksheet.write(row, 4, option.current_stock_price) 107 | write_worksheet.write(row, 5, option.return_percentage) 108 | row += 1 109 | 110 | write_worksheet.write(row, 0, "Simple Average") 111 | write_worksheet.write(row, 5, simple_average(list_of_calls)) 112 | row += 1 113 | write_worksheet.write(row, 0, "Weighted Average") 114 | write_worksheet.write(row, 5, WA_of_option_list(list_of_calls)) 115 | row += 1 116 | 117 | write_worksheet.write(row, 0, "SPY") 118 | write_worksheet.write(row, 3, spy.original_price) 119 | write_worksheet.write(row, 4, spy.current_price) 120 | write_worksheet.write(row, 5, spy.return_percentage) 121 | row += 2 122 | 123 | write_worksheet.write(row, 0, "Puts:") 124 | row += 1 125 | 126 | write_worksheet.write(row, 0, "Ticker") 127 | write_worksheet.write(row, 1, "Expiration Date") 128 | write_worksheet.write(row, 2, "Cost of Trade") 129 | write_worksheet.write(row, 3, "Original Stock Price") 130 | write_worksheet.write(row, 4, "Current Stock Price") 131 | write_worksheet.write(row, 5, "Percent Change") 132 | row += 1 133 | 134 | for option in list_of_puts: 135 | write_worksheet.write(row, 0, option.ticker) 136 | write_worksheet.write(row, 1, f'{option.exp_date.month}/{option.exp_date.day}/{option.exp_date.year}') 137 | write_worksheet.write(row, 2, option.total_price) 138 | write_worksheet.write(row, 3, option.original_stock_price) 139 | write_worksheet.write(row, 4, option.current_stock_price) 140 | write_worksheet.write(row, 5, option.return_percentage) 141 | row += 1 142 | 143 | write_worksheet.write(row, 0, "Simple Average") 144 | write_worksheet.write(row, 5, simple_average(list_of_puts)) 145 | row += 1 146 | write_worksheet.write(row, 0, "Weighted Average") 147 | write_worksheet.write(row, 5, WA_of_option_list(list_of_puts)) 148 | row += 1 149 | 150 | write_worksheet.write(row, 0, "SPY") 151 | write_worksheet.write(row, 3, spy.original_price) 152 | write_worksheet.write(row, 4, spy.current_price) 153 | write_worksheet.write(row, 5, spy.return_percentage) 154 | 155 | write_workbook.close() -------------------------------------------------------------------------------- /Performance_Evaluation.py: -------------------------------------------------------------------------------- 1 | import os 2 | import datetime 3 | from iexfinance.stocks import get_historical_data 4 | import pandas as pd 5 | import xlsxwriter 6 | 7 | 8 | def get_stock_price(ticker, historical_date): 9 | print(ticker) 10 | df = get_historical_data(ticker, historical_date) 11 | return float(df[f'{historical_date.year}-{historical_date.month:02}-{historical_date.day:02}']['close']) 12 | 13 | 14 | class __Stock: 15 | def __init__(self, ticker): 16 | self.ticker = ticker 17 | self.price = get_stock_price(ticker, testing_date) 18 | self.options = {} 19 | self.options['calls'] = [] 20 | self.options['puts'] = [] 21 | 22 | def calc_total_monies(self): 23 | self.put_money = 0 24 | self.call_money = 0 25 | for option in self.options['calls']: 26 | self.call_money += option.price 27 | for option in self.options['puts']: 28 | self.put_money += option.price 29 | self.total_money = self.put_money + self.call_money 30 | if self.put_money > self.call_money: 31 | self.consensus_type = 'Put' 32 | elif self.call_money > self.put_money: 33 | self.consensus_type = 'Call' 34 | else: 35 | self.consensus_type = None 36 | 37 | def calc_consensus_weighted_average_strike(self): 38 | numerator = 0 39 | denominator = 0 40 | if self.consensus_type == 'Call': 41 | for option in self.options['calls']: 42 | numerator += option.strike * option.volume 43 | denominator += option.volume 44 | else: 45 | for option in self.options['puts']: 46 | numerator += option.strike * option.volume 47 | denominator += option.volume 48 | self.WA_strike = numerator / denominator 49 | 50 | def calc_total_volumes(self): 51 | self.put_volume = 0 52 | self.call_volume = 0 53 | for option in self.options['calls']: 54 | self.call_volume += option.volume 55 | for option in self.options['puts']: 56 | self.put_volume += option.volume 57 | self.total_volume = self.put_volume + self.call_volume 58 | 59 | def calc_profit_of_consensus(self): 60 | self.consensus_profit = 0 61 | if self.call_money > self.put_money: 62 | for option in self.options['calls']: 63 | self.consensus_profit += option.volume * 100.0 * (self.price - option.strike) - option.price 64 | if self.consensus_profit < -self.call_money: 65 | self.consensus_profit = -self.call_money 66 | elif self.put_money > self.call_money: 67 | for option in self.options['puts']: 68 | self.consensus_profit += option.volume * 100.0 * (option.strike - self.price) - option.price 69 | if self.consensus_profit < -self.put_money: 70 | self.consensus_profit = -self.put_money 71 | else: 72 | self.consensus_profit = None 73 | 74 | def calc_WA_stock_purchase_price(self): 75 | numerator = 0 76 | denominator = 0 77 | if self.call_money > self.put_money: 78 | for option in self.options['calls']: 79 | numerator += option.stock_purchase_price * option.volume 80 | denominator += option.volume 81 | else: 82 | for option in self.options['puts']: 83 | numerator += option.stock_purchase_price * option.volume 84 | denominator += option.volume 85 | self.WA_stock_beginning_price = numerator / denominator 86 | 87 | 88 | 89 | class Option: 90 | def __init__(self, ticker, type, strike, premium, volume, purchase_date): 91 | self.ticker = ticker 92 | self.type = type 93 | self.strike = strike 94 | self.premium = premium 95 | self.volume = volume 96 | self.price = volume * premium * 100.0 97 | self.purchase_date = purchase_date 98 | self.stock_purchase_price = get_stock_price(ticker, purchase_date) 99 | 100 | 101 | 102 | 103 | raw_input = input("Enter Expiration Date: ") 104 | raw_splits = raw_input.split('/') 105 | testing_date = datetime.date(int(raw_splits[2]), int(raw_splits[0]), int(raw_splits[1])) 106 | 107 | stock_dict = {} 108 | for file in os.listdir('data_for_validation'): 109 | df = pd.read_csv(f'data_for_validation/{file}') 110 | df.drop(df.tail(1).index, inplace=True) 111 | raw_buy_date_splits = file.split('-')[4:7] 112 | buy_date = datetime.date(int(raw_buy_date_splits[2].split('.')[0]), int(raw_buy_date_splits[0]), int(raw_buy_date_splits[1])) 113 | for i in range(1, len(df.index)): 114 | raw_exp_splits = df['Exp Date'][i].split('/') 115 | exp_date = datetime.date(int(raw_exp_splits[2]) + 2000, int(raw_exp_splits[0]), int(raw_exp_splits[1])) 116 | if testing_date == exp_date: 117 | option = Option(df['Symbol'][i], df['Type'][i].lower(), float(df['Strike'][i]), float(df['Last'][i]), int(df['Volume'][i]), buy_date) 118 | if not option.ticker in stock_dict: 119 | stock_dict[option.ticker] = __Stock(option.ticker) 120 | if option.type == 'call': 121 | stock_dict[option.ticker].options['calls'].append(option) 122 | else: 123 | stock_dict[option.ticker].options['puts'].append(option) 124 | 125 | 126 | for stock in stock_dict.values(): 127 | stock.calc_total_monies() 128 | stock.calc_total_volumes() 129 | stock.calc_consensus_weighted_average_strike() 130 | stock.calc_profit_of_consensus() 131 | stock.calc_WA_stock_purchase_price() 132 | 133 | 134 | consensus_stocks = [stock for stock in stock_dict.values() if stock.total_money > 1000000.0 and 135 | ((stock.call_money > 3.0/4.0 * stock.total_money and stock.call_volume > 0.5 * stock.total_volume) 136 | or (stock.put_money > 3.0/4.0 * stock.total_money and stock.put_volume > 0.5 * stock.total_volume))] 137 | 138 | def sort_by_consensus_money(stock): 139 | if stock.call_money > stock.put_money: 140 | return stock.call_money 141 | else: 142 | return stock.put_money 143 | 144 | consensus_stocks = sorted(consensus_stocks, key=sort_by_consensus_money, reverse=True) 145 | 146 | out_dict = {'Ticker': [], 'Type': [], 'WA Beginning Stock Price': [], 'Final Stock Price': [], 'Percent Change': [], 147 | 'WA Strike': [], 'Consensus Volume': [], 'Initial Investment': [], 'Profit': [], 'ROI': []} 148 | 149 | for stock in consensus_stocks: 150 | out_dict['Ticker'].append(stock.ticker) 151 | out_dict['Type'].append(stock.consensus_type) 152 | out_dict['WA Beginning Stock Price'].append(stock.WA_stock_beginning_price) 153 | out_dict['Final Stock Price'].append(stock.price) 154 | out_dict['Percent Change'].append((stock.price - stock.WA_stock_beginning_price) / stock.WA_stock_beginning_price) 155 | out_dict['WA Strike'].append(stock.WA_strike) 156 | if stock.consensus_type == 'Call': 157 | out_dict['Consensus Volume'].append(stock.call_volume) 158 | out_dict['Initial Investment'].append(stock.call_money) 159 | else: 160 | out_dict['Consensus Volume'].append(stock.put_volume) 161 | out_dict['Initial Investment'].append(stock.put_money) 162 | out_dict['Profit'].append(stock.consensus_profit) 163 | out_dict['ROI'].append( out_dict['Profit'][-1] / out_dict['Initial Investment'][-1]) 164 | 165 | output_df = pd.DataFrame(out_dict) 166 | writer = pd.ExcelWriter('output/output.xlsx', engine='xlsxwriter') 167 | output_df.to_excel(writer, sheet_name='Performance Evaluation') 168 | writer.save() 169 | 170 | 171 | 172 | -------------------------------------------------------------------------------- /Deprecated Code/otm_options_data_acquisition (deprecated).py: -------------------------------------------------------------------------------- 1 | import os 2 | import csv 3 | import datetime 4 | import xlsxwriter 5 | from iexfinance.stocks import Stock 6 | 7 | workbook = xlsxwriter.Workbook('output/output.xlsx') 8 | 9 | def write_to_formated_excel(stocks_list, worksheet_name): 10 | worksheet = workbook.add_worksheet(worksheet_name) 11 | 12 | worksheet.write(0, 0, "Ticker/Expiration Date") 13 | worksheet.write(0, 1, "Current Price") 14 | worksheet.write(0, 2, "Predicted Price") 15 | worksheet.write(0, 3, "Percent Change") 16 | worksheet.write(0, 4, "Total Volume") 17 | worksheet.write(0, 5, "Total Money Traded") 18 | worksheet.write(0, 6, "Number of Option Trades") 19 | worksheet.write(0, 7, "Calls") 20 | worksheet.write(0, 8, "Puts") 21 | 22 | row = 1 23 | 24 | for stock in stocks_list: 25 | worksheet.write(row, 0, stock.ticker) 26 | row += 1 27 | for exp_date_obj in stock.exp_dates: 28 | worksheet.write(row, 0, 29 | f'{exp_date_obj.exp_date.month}/{exp_date_obj.exp_date.day}/{exp_date_obj.exp_date.year}') 30 | worksheet.write(row, 1, stock.price) 31 | worksheet.write(row, 2, '{:.2f}'.format(exp_date_obj.predicted_price)) 32 | worksheet.write(row, 3, '{:.2f}%'.format(exp_date_obj.percent_change * 100)) 33 | worksheet.write(row, 4, exp_date_obj.total_volume) 34 | worksheet.write(row, 5, '${:11,.2f}'.format(exp_date_obj.total_money_traded)) 35 | worksheet.write(row, 6, exp_date_obj.num_of_options) 36 | worksheet.write(row, 7, exp_date_obj.num_of_calls) 37 | worksheet.write(row, 8, exp_date_obj.num_of_puts) 38 | row += 1 39 | row += 1 40 | 41 | 42 | def write_to_raw_excel(stocks_list): 43 | worksheet = workbook.add_worksheet('Raw Data For Manipulation') 44 | 45 | worksheet.write(0, 0, "Ticker") 46 | worksheet.write(0, 1, "Current Price") 47 | worksheet.write(0, 2, "Expiration Date") 48 | worksheet.write(0, 3, "Predicted Price") 49 | worksheet.write(0, 4, "Percent Change") 50 | worksheet.write(0, 5, "Volume") 51 | worksheet.write(0, 6, "Total Money Traded") 52 | worksheet.write(0, 7, "Number of Option Trades") 53 | worksheet.write(0, 8, "Calls") 54 | worksheet.write(0, 9, "Puts") 55 | 56 | row = 1 57 | 58 | for stock in stocks_list: 59 | for exp_date_obj in stock.exp_dates: 60 | worksheet.write(row, 0, stock.ticker) 61 | worksheet.write(row, 1, stock.price) 62 | worksheet.write(row, 2, 63 | f'{exp_date_obj.exp_date.month}/{exp_date_obj.exp_date.day}/{exp_date_obj.exp_date.year}') 64 | worksheet.write(row, 3, exp_date_obj.predicted_price) 65 | worksheet.write(row, 4, exp_date_obj.percent_change) 66 | worksheet.write(row, 5, exp_date_obj.total_volume) 67 | worksheet.write(row, 6, exp_date_obj.total_money_traded) 68 | worksheet.write(row, 7, exp_date_obj.num_of_options) 69 | worksheet.write(row, 8, exp_date_obj.num_of_calls) 70 | worksheet.write(row, 9, exp_date_obj.num_of_puts) 71 | row += 1 72 | 73 | 74 | def get_current_stock_price(ticker): 75 | print(ticker) 76 | price = Stock(ticker) 77 | stockPrice = price.get_price() 78 | return float(stockPrice) 79 | 80 | 81 | class ExpDate: 82 | def __init__(self, exp_date): 83 | self.exp_date = exp_date 84 | self.options = [] 85 | self.num_of_calls = 0 86 | self.num_of_puts = 0 87 | self.num_of_options = 0 88 | 89 | def calc_predicted_price(self): 90 | # Weightd Average of strike price with volume 91 | numerator = 0 92 | denominator = 0 93 | for option in self.options: 94 | numerator += option.strike * option.volume 95 | denominator += option.volume 96 | 97 | self.predicted_price = numerator / denominator 98 | 99 | def calc_percent_change(self, current_stock_price): 100 | self.percent_change = (self.predicted_price - current_stock_price) / current_stock_price 101 | 102 | def calc_total_volume(self): 103 | self.total_volume = 0 104 | for option in self.options: 105 | self.total_volume += option.volume 106 | 107 | def calc_total_price(self): 108 | self.total_money_traded = 0 109 | for option in self.options: 110 | self.total_money_traded += option.total_cost 111 | 112 | 113 | class __Stock: 114 | def __init__(self, ticker): 115 | self.ticker = ticker 116 | self.price = get_current_stock_price(ticker) 117 | self.exp_dates = [] 118 | 119 | 120 | class OptionTrade: 121 | def __init__(self, ticker, strike, exp_date, last, volume, type): 122 | self.ticker = ticker 123 | self.strike = strike 124 | self.exp_date = exp_date 125 | self.last = last 126 | self.volume = volume 127 | self.total_cost = last * volume * 100.0 128 | self.type = type 129 | 130 | 131 | start = datetime.datetime.now() # For Optimization Purposes 132 | 133 | stocks_dict = {} 134 | for file in os.listdir('data'): 135 | with open(f"data/{file}", 'r') as csv_file: 136 | csv_reader = csv.reader(csv_file) 137 | next(csv_reader) 138 | for line in csv_reader: 139 | if len(line) > 2: 140 | if (line[2].lower() == 'call' and float(line[3]) > float(line[1])) or ( 141 | line[2].lower() == 'put' and float(line[3]) < float(line[1])): # for otm calls and puts 142 | mdy_list = line[4].split('/') 143 | date = datetime.date(int(mdy_list[2]) + 2000, int(mdy_list[0]), int(mdy_list[1])) # +2000 because years are just listed as 19 or 20 in the csv 144 | if date > datetime.date.today(): 145 | option = OptionTrade(line[0], float(line[3]), date, float(line[9]), int(line[10]), 146 | line[2].lower()) 147 | if not option.ticker in stocks_dict: 148 | stocks_dict[option.ticker] = __Stock(option.ticker) 149 | list_exp_dates = [] 150 | for exp_date_obj in stocks_dict[option.ticker].exp_dates: 151 | list_exp_dates.append(exp_date_obj.exp_date) 152 | if not option.exp_date in list_exp_dates: 153 | stocks_dict[option.ticker].exp_dates.append(ExpDate(option.exp_date)) 154 | for exp_date_obj in stocks_dict[option.ticker].exp_dates: 155 | if option.exp_date == exp_date_obj.exp_date: 156 | exp_date_obj.options.append(option) 157 | if option.type == 'call': 158 | exp_date_obj.num_of_calls += 1 159 | else: 160 | exp_date_obj.num_of_puts += 1 161 | exp_date_obj.num_of_options += 1 162 | 163 | 164 | def sorting_exp_dates(exp_date_obj): 165 | return exp_date_obj.exp_date 166 | 167 | 168 | for key, stock in stocks_dict.items(): 169 | for exp_date in stock.exp_dates: 170 | exp_date.calc_predicted_price() 171 | exp_date.calc_percent_change(stock.price) 172 | exp_date.calc_total_volume() 173 | exp_date.calc_total_price() 174 | 175 | stock.exp_dates = sorted(stock.exp_dates, key=sorting_exp_dates) 176 | 177 | 178 | def sorting_stocks_percentage(stock_obj): 179 | return abs(stock_obj.exp_dates[0].percent_change) 180 | 181 | 182 | stocks_sorted_list = sorted(stocks_dict.values(), key=sorting_stocks_percentage, reverse=True) 183 | write_to_formated_excel(stocks_sorted_list, "Sorted by Percent Change") 184 | 185 | 186 | def sorting_stocks_total_money(stock_obj): 187 | largest_total_money = 0 188 | for exp_date_obj in stock_obj.exp_dates: 189 | if exp_date_obj.total_money_traded > largest_total_money: 190 | largest_total_money = exp_date_obj.total_money_traded 191 | return largest_total_money 192 | 193 | 194 | stocks_sorted_list = sorted(stocks_dict.values(), key=sorting_stocks_total_money, reverse=True) 195 | write_to_formated_excel(stocks_sorted_list, "Sorted by Total Money Traded") 196 | 197 | write_to_raw_excel(stocks_dict.values()) 198 | 199 | workbook.close() 200 | 201 | end = datetime.datetime.now() 202 | print(end - start) -------------------------------------------------------------------------------- /Deprecated Code/retroactive_data_acquisition.py: -------------------------------------------------------------------------------- 1 | import os 2 | import csv 3 | import datetime 4 | import xlsxwriter 5 | from iexfinance.stocks import get_historical_data 6 | import datetime 7 | 8 | workbook = xlsxwriter.Workbook('output/output.xlsx') 9 | 10 | def write_to_formated_excel(stocks_list, worksheet_name): 11 | worksheet = workbook.add_worksheet(worksheet_name) 12 | 13 | worksheet.write(0, 0, "Ticker/Expiration Date") 14 | worksheet.write(0, 1, "Current Price") 15 | worksheet.write(0, 2, "Predicted Price") 16 | worksheet.write(0, 3, "Percent Change") 17 | worksheet.write(0, 4, "Total Volume") 18 | worksheet.write(0, 5, "Total Money Traded") 19 | worksheet.write(0, 6, "Number of Option Trades") 20 | worksheet.write(0, 7, "Calls") 21 | worksheet.write(0, 8, "Puts") 22 | 23 | row = 1 24 | 25 | for stock in stocks_list: 26 | worksheet.write(row, 0, stock.ticker) 27 | row += 1 28 | for exp_date_obj in stock.exp_dates: 29 | worksheet.write(row, 0, 30 | f'{exp_date_obj.exp_date.month}/{exp_date_obj.exp_date.day}/{exp_date_obj.exp_date.year}') 31 | worksheet.write(row, 1, stock.price) 32 | worksheet.write(row, 2, '{:.2f}'.format(exp_date_obj.predicted_price)) 33 | worksheet.write(row, 3, '{:.2f}%'.format(exp_date_obj.percent_change * 100)) 34 | worksheet.write(row, 4, exp_date_obj.total_volume) 35 | worksheet.write(row, 5, '${:11,.2f}'.format(exp_date_obj.total_money_traded)) 36 | worksheet.write(row, 6, exp_date_obj.num_of_options) 37 | worksheet.write(row, 7, exp_date_obj.num_of_calls) 38 | worksheet.write(row, 8, exp_date_obj.num_of_puts) 39 | row += 1 40 | row += 1 41 | 42 | 43 | def write_to_raw_excel(stocks_list): 44 | worksheet = workbook.add_worksheet('Raw Data For Manipulation') 45 | 46 | worksheet.write(0, 0, "Ticker") 47 | worksheet.write(0, 1, "Current Price") 48 | worksheet.write(0, 2, "Expiration Date") 49 | worksheet.write(0, 3, "Predicted Price") 50 | worksheet.write(0, 4, "Percent Change") 51 | worksheet.write(0, 5, "Volume") 52 | worksheet.write(0, 6, "Total Money Traded") 53 | worksheet.write(0, 7, "Number of Option Trades") 54 | worksheet.write(0, 8, "Calls") 55 | worksheet.write(0, 9, "Puts") 56 | 57 | row = 1 58 | 59 | for stock in stocks_list: 60 | for exp_date_obj in stock.exp_dates: 61 | worksheet.write(row, 0, stock.ticker) 62 | worksheet.write(row, 1, stock.price) 63 | worksheet.write(row, 2, 64 | f'{exp_date_obj.exp_date.month}/{exp_date_obj.exp_date.day}/{exp_date_obj.exp_date.year}') 65 | worksheet.write(row, 3, exp_date_obj.predicted_price) 66 | worksheet.write(row, 4, exp_date_obj.percent_change) 67 | worksheet.write(row, 5, exp_date_obj.total_volume) 68 | worksheet.write(row, 6, exp_date_obj.total_money_traded) 69 | worksheet.write(row, 7, exp_date_obj.num_of_options) 70 | worksheet.write(row, 8, exp_date_obj.num_of_calls) 71 | worksheet.write(row, 9, exp_date_obj.num_of_puts) 72 | row += 1 73 | 74 | user_input = input("What is the retroactive date?\n") 75 | user_list = user_input.split('/') 76 | historical_date = datetime.datetime(int(user_list[2]), int(user_list[0]), int(user_list[1])) 77 | 78 | def get_current_stock_price(ticker): 79 | print(ticker) 80 | df = get_historical_data(ticker, historical_date) 81 | return float(df[f'{historical_date.year}-{historical_date.month:02}-{historical_date.day:02}']['close']) 82 | 83 | 84 | class ExpDate: 85 | def __init__(self, exp_date): 86 | self.exp_date = exp_date 87 | self.options = [] 88 | self.num_of_calls = 0 89 | self.num_of_puts = 0 90 | self.num_of_options = 0 91 | 92 | def calc_predicted_price(self): 93 | # Weightd Average of break even with volume 94 | numerator = 0 95 | denominator = 0 96 | for option in self.options: 97 | numerator += option.break_even * option.volume 98 | denominator += option.volume 99 | 100 | self.predicted_price = numerator / denominator 101 | 102 | def calc_percent_change(self, current_stock_price): 103 | self.percent_change = (self.predicted_price - current_stock_price) / current_stock_price 104 | 105 | def calc_total_volume(self): 106 | self.total_volume = 0 107 | for option in self.options: 108 | self.total_volume += option.volume 109 | 110 | def calc_total_price(self): 111 | self.total_money_traded = 0 112 | for option in self.options: 113 | self.total_money_traded += option.total_cost 114 | 115 | 116 | class __Stock: 117 | def __init__(self, ticker): 118 | self.ticker = ticker 119 | self.price = get_current_stock_price(ticker) 120 | self.exp_dates = [] 121 | 122 | 123 | class OptionTrade: 124 | def __init__(self, ticker, strike, exp_date, last, volume, type): 125 | self.ticker = ticker 126 | self.strike = strike 127 | self.exp_date = exp_date 128 | self.last = last 129 | self.volume = volume 130 | self.total_cost = last * volume * 100.0 131 | self.type = type 132 | if self.type == 'call': 133 | self.break_even = strike + last 134 | if self.type == 'put': 135 | self.break_even = strike - last 136 | 137 | 138 | start = datetime.datetime.now() # For Optimization Purposes 139 | 140 | stocks_dict = {} 141 | for file in os.listdir('data'): 142 | with open(f"data/{file}", 'r') as csv_file: 143 | csv_reader = csv.reader(csv_file) 144 | next(csv_reader) 145 | for line in csv_reader: 146 | if len(line) > 2: 147 | mdy_list = line[4].split('/') 148 | date = datetime.date(int(mdy_list[2]) + 2000, int(mdy_list[0]), int(mdy_list[1])) # +2000 because years are just listed as 19 or 20 in the csv 149 | if date > datetime.date.today(): 150 | option = OptionTrade(line[0], float(line[3]), date, float(line[9]), int(line[10]), 151 | line[2].lower()) 152 | if not option.ticker in stocks_dict: 153 | stocks_dict[option.ticker] = __Stock(option.ticker) 154 | list_exp_dates = [] 155 | for exp_date_obj in stocks_dict[option.ticker].exp_dates: 156 | list_exp_dates.append(exp_date_obj.exp_date) 157 | if not option.exp_date in list_exp_dates: 158 | stocks_dict[option.ticker].exp_dates.append(ExpDate(option.exp_date)) 159 | for exp_date_obj in stocks_dict[option.ticker].exp_dates: 160 | if option.exp_date == exp_date_obj.exp_date: 161 | exp_date_obj.options.append(option) 162 | if option.type == 'call': 163 | exp_date_obj.num_of_calls += 1 164 | else: 165 | exp_date_obj.num_of_puts += 1 166 | exp_date_obj.num_of_options += 1 167 | 168 | 169 | def sorting_exp_dates(exp_date_obj): 170 | return exp_date_obj.exp_date 171 | 172 | 173 | for key, stock in stocks_dict.items(): 174 | for exp_date in stock.exp_dates: 175 | exp_date.calc_predicted_price() 176 | exp_date.calc_percent_change(stock.price) 177 | exp_date.calc_total_volume() 178 | exp_date.calc_total_price() 179 | 180 | stock.exp_dates = sorted(stock.exp_dates, key=sorting_exp_dates) 181 | 182 | 183 | def sorting_stocks_percentage(stock_obj): 184 | return abs(stock_obj.exp_dates[0].percent_change) 185 | 186 | 187 | stocks_sorted_list = sorted(stocks_dict.values(), key=sorting_stocks_percentage, reverse=True) 188 | write_to_formated_excel(stocks_sorted_list, "Sorted by Percent Change") 189 | 190 | 191 | def sorting_stocks_total_money(stock_obj): 192 | largest_total_money = 0 193 | for exp_date_obj in stock_obj.exp_dates: 194 | if exp_date_obj.total_money_traded > largest_total_money: 195 | largest_total_money = exp_date_obj.total_money_traded 196 | return largest_total_money 197 | 198 | 199 | stocks_sorted_list = sorted(stocks_dict.values(), key=sorting_stocks_total_money, reverse=True) 200 | write_to_formated_excel(stocks_sorted_list, "Sorted by Total Money Traded") 201 | 202 | write_to_raw_excel(stocks_dict.values()) 203 | 204 | workbook.close() 205 | 206 | end = datetime.datetime.now() 207 | print(end - start) -------------------------------------------------------------------------------- /Deprecated Code/break_even_data_acquisition (deprecated).py: -------------------------------------------------------------------------------- 1 | import os 2 | import csv 3 | import datetime 4 | import xlsxwriter 5 | from iexfinance.stocks import Stock 6 | 7 | workbook = xlsxwriter.Workbook('output/output.xlsx') 8 | 9 | def write_to_formated_excel(stocks_list, worksheet_name): 10 | worksheet = workbook.add_worksheet(worksheet_name) 11 | 12 | worksheet.write(0, 0, "Ticker/Expiration Date") 13 | worksheet.write(0, 1, "Current Price") 14 | worksheet.write(0, 2, "Predicted Price") 15 | worksheet.write(0, 3, "Percent Change") 16 | worksheet.write(0, 4, "Total Volume") 17 | worksheet.write(0, 5, "Total Money Traded") 18 | worksheet.write(0, 6, "Number of Option Trades") 19 | worksheet.write(0, 7, "Call Trades") 20 | worksheet.write(0, 8, "Call Volume") 21 | worksheet.write(0, 9, "Call Money") 22 | worksheet.write(0, 10, "Put Trades") 23 | worksheet.write(0, 11, "Put Volume") 24 | worksheet.write(0, 12, "Put Money") 25 | 26 | row = 1 27 | 28 | for stock in stocks_list: 29 | worksheet.write(row, 0, f'${stock.ticker}') 30 | if stock.cvpv != None: 31 | worksheet.write(row, 1, "CVPV Ratio:") 32 | worksheet.write(row, 2, f'{stock.cvpv:.3f}') 33 | if stock.cmpm != None: 34 | worksheet.write(row, 3, "CMPM Ratio:") 35 | worksheet.write(row, 4, f'{stock.cmpm:.3f}') 36 | row += 1 37 | for exp_date_obj in stock.exp_dates: 38 | worksheet.write(row, 0, 39 | f'{exp_date_obj.exp_date.month}/{exp_date_obj.exp_date.day}/{exp_date_obj.exp_date.year}') 40 | worksheet.write(row, 1, '${:.2f}'.format(stock.price)) 41 | worksheet.write(row, 2, '${:.2f}'.format(exp_date_obj.predicted_price)) 42 | worksheet.write(row, 3, '{:.2f}%'.format(exp_date_obj.percent_change * 100)) 43 | worksheet.write(row, 4, exp_date_obj.total_volume) 44 | worksheet.write(row, 5, '${:11,.2f}'.format(exp_date_obj.total_money_traded)) 45 | worksheet.write(row, 6, exp_date_obj.num_of_options) 46 | worksheet.write(row, 7, exp_date_obj.num_of_calls) 47 | worksheet.write(row, 8, exp_date_obj.call_volume) 48 | worksheet.write(row, 9, '${:11,.2f}'.format(exp_date_obj.money_in_calls)) 49 | worksheet.write(row, 10, exp_date_obj.num_of_puts) 50 | worksheet.write(row, 11, exp_date_obj.put_volume) 51 | worksheet.write(row, 12, '${:11,.2f}'.format(exp_date_obj.money_in_puts)) 52 | row += 1 53 | row += 1 54 | 55 | 56 | def write_to_raw_excel(stocks_list): 57 | worksheet = workbook.add_worksheet('Raw Data For Manipulation') 58 | 59 | worksheet.write(0, 0, "Ticker") 60 | worksheet.write(0, 1, "Current Price") 61 | worksheet.write(0, 2, "Expiration Date") 62 | worksheet.write(0, 3, "Predicted Price") 63 | worksheet.write(0, 4, "Percent Change") 64 | worksheet.write(0, 5, "Volume") 65 | worksheet.write(0, 6, "Total Money Traded") 66 | worksheet.write(0, 7, "Number of Option Trades") 67 | worksheet.write(0, 8, "Call Trades") 68 | worksheet.write(0, 9, "Call Volume") 69 | worksheet.write(0, 10, "Call Money") 70 | worksheet.write(0, 11, "Put Trades") 71 | worksheet.write(0, 12, "Put Volume") 72 | worksheet.write(0, 13, "Put Money") 73 | 74 | row = 1 75 | 76 | for stock in stocks_list: 77 | for exp_date_obj in stock.exp_dates: 78 | worksheet.write(row, 0, f'${stock.ticker}') 79 | worksheet.write(row, 1, stock.price) 80 | worksheet.write(row, 2, 81 | f'{exp_date_obj.exp_date.month}/{exp_date_obj.exp_date.day}/{exp_date_obj.exp_date.year}') 82 | worksheet.write(row, 3, exp_date_obj.predicted_price) 83 | worksheet.write(row, 4, exp_date_obj.percent_change) 84 | worksheet.write(row, 5, exp_date_obj.total_volume) 85 | worksheet.write(row, 6, exp_date_obj.total_money_traded) 86 | worksheet.write(row, 7, exp_date_obj.num_of_options) 87 | worksheet.write(row, 8, exp_date_obj.num_of_calls) 88 | worksheet.write(row, 9, exp_date_obj.call_volume) 89 | worksheet.write(row, 10, exp_date_obj.money_in_calls) 90 | worksheet.write(row, 11, exp_date_obj.num_of_puts) 91 | worksheet.write(row, 12, exp_date_obj.put_volume) 92 | worksheet.write(row, 13, exp_date_obj.money_in_puts) 93 | row += 1 94 | 95 | 96 | def write_to_individual_trades(stocks_list): 97 | worksheet = workbook.add_worksheet("Individual Option Trades") 98 | worksheet.write(0, 0, "Ticker/Expiration Date") 99 | worksheet.write(0, 1, "Stock Price") 100 | worksheet.write(0, 2, "Strike Price") 101 | worksheet.write(0, 3, "Premium") 102 | worksheet.write(0, 4, "Break Even Price") 103 | worksheet.write(0, 5, "Volume") 104 | worksheet.write(0, 6, "Total Price Paid") 105 | 106 | row = 1 107 | 108 | for stock in stocks_list: 109 | worksheet.write(row, 0, f'${stock.ticker}') 110 | row += 1 111 | 112 | if len(stock.list_of_calls) > 0: 113 | worksheet.write(row, 0, "Calls:") 114 | row += 1 115 | for option in stock.list_of_calls: 116 | worksheet.write(row, 0, f'{option.exp_date.month}/{option.exp_date.day}/{option.exp_date.year}') 117 | worksheet.write(row, 1, '${:.2f}'.format(stock.price)) 118 | worksheet.write(row, 2, '${:.2f}'.format(option.strike)) 119 | worksheet.write(row, 3, '${:.2f}'.format(option.last)) 120 | worksheet.write(row, 4, '${:.2f}'.format(option.break_even)) 121 | worksheet.write(row, 5, option.volume) 122 | worksheet.write(row, 6, '${:,.2f}'.format(option.total_cost)) 123 | row += 1 124 | 125 | if len(stock.list_of_puts) > 0: 126 | worksheet.write(row, 0, "Puts:") 127 | row += 1 128 | for option in stock.list_of_puts: 129 | worksheet.write(row, 0, f'{option.exp_date.month}/{option.exp_date.day}/{option.exp_date.year}') 130 | worksheet.write(row, 1, '${:.2f}'.format(stock.price)) 131 | worksheet.write(row, 2, '${:.2f}'.format(option.strike)) 132 | worksheet.write(row, 3, '${:.2f}'.format(option.last)) 133 | worksheet.write(row, 4, '${:.2f}'.format(option.break_even)) 134 | worksheet.write(row, 5, option.volume) 135 | worksheet.write(row, 6, '${:,.2f}'.format(option.total_cost)) 136 | row += 1 137 | row += 1 138 | 139 | 140 | 141 | def get_current_stock_price(ticker): 142 | print(ticker) 143 | price = Stock(ticker) 144 | stockPrice = price.get_price() 145 | return float(stockPrice) 146 | 147 | 148 | class ExpDate: 149 | def __init__(self, exp_date): 150 | self.exp_date = exp_date 151 | self.options = [] 152 | self.num_of_calls = 0 153 | self.num_of_puts = 0 154 | self.num_of_options = 0 155 | 156 | def calc_predicted_price(self): 157 | # Weightd Average of break even with volume 158 | numerator = 0 159 | denominator = 0 160 | for option in self.options: 161 | numerator += option.break_even * option.volume 162 | denominator += option.volume 163 | 164 | self.predicted_price = numerator / denominator 165 | 166 | def calc_percent_change(self, current_stock_price): 167 | self.percent_change = (self.predicted_price - current_stock_price) / current_stock_price 168 | 169 | def calc_total_volumes(self): 170 | self.total_volume = 0 171 | self.call_volume = 0 172 | self.put_volume = 0 173 | for option in self.options: 174 | self.total_volume += option.volume 175 | if option.type == 'call': 176 | self.call_volume += option.volume 177 | elif option.type == 'put': 178 | self.put_volume += option.volume 179 | 180 | 181 | def calc_total_price(self): 182 | self.total_money_traded = 0 183 | for option in self.options: 184 | self.total_money_traded += option.total_cost 185 | 186 | def calc_put_money(self): 187 | self.money_in_puts = 0 188 | for option in self.options: 189 | if option.type == 'put': 190 | self.money_in_puts += option.total_cost 191 | 192 | def calc_call_money(self): 193 | self.money_in_calls = 0 194 | for option in self.options: 195 | if option.type == 'call': 196 | self.money_in_calls += option.total_cost 197 | 198 | 199 | def option_list_sorter(option): 200 | return option.exp_date 201 | 202 | class __Stock: 203 | def __init__(self, ticker): 204 | self.ticker = ticker 205 | self.price = get_current_stock_price(ticker) 206 | self.exp_dates = [] 207 | 208 | def construct_option_list(self): 209 | self.list_of_calls = [] 210 | self.list_of_puts = [] 211 | for exp_date_obj in self.exp_dates: 212 | for option in exp_date_obj.options: 213 | if option.type == 'call': 214 | self.list_of_calls.append(option) 215 | elif option.type == 'put': 216 | self.list_of_puts.append(option) 217 | self.list_of_calls = sorted(self.list_of_calls, key=option_list_sorter) 218 | self.list_of_puts = sorted(self.list_of_puts, key=option_list_sorter) 219 | 220 | def calc_ratios(self): 221 | total_call_volume = 0 222 | total_put_volume = 0 223 | total_call_money = 0 224 | total_put_money = 0 225 | for exp_date_obj in self.exp_dates: 226 | total_call_volume += exp_date_obj.call_volume 227 | total_put_volume += exp_date_obj.put_volume 228 | total_call_money += exp_date_obj.money_in_calls 229 | total_put_money += exp_date_obj.money_in_puts 230 | 231 | if total_put_volume == 0 or total_call_volume == 0: 232 | self.cvpv = None 233 | else: 234 | self.cvpv = total_call_volume / total_put_volume 235 | if total_put_money == 0 or total_call_money == 0: 236 | self.cmpm = None 237 | else: 238 | self.cmpm = total_call_money / total_put_money 239 | 240 | 241 | 242 | 243 | class OptionTrade: 244 | def __init__(self, ticker, strike, exp_date, last, volume, type): 245 | self.ticker = ticker 246 | self.strike = strike 247 | self.exp_date = exp_date 248 | self.last = last 249 | self.volume = volume 250 | self.total_cost = last * volume * 100.0 251 | self.type = type 252 | if self.type == 'call': 253 | self.break_even = strike + last 254 | if self.type == 'put': 255 | self.break_even = strike - last 256 | 257 | 258 | 259 | start = datetime.datetime.now() # For Optimization Purposes 260 | 261 | stocks_dict = {} 262 | for file in os.listdir('data'): 263 | with open(f"data/{file}", 'r') as csv_file: 264 | csv_reader = csv.reader(csv_file) 265 | next(csv_reader) 266 | for line in csv_reader: 267 | if len(line) > 2: 268 | mdy_list = line[4].split('/') 269 | date = datetime.date(int(mdy_list[2]) + 2000, int(mdy_list[0]), int(mdy_list[1])) # +2000 because years are just listed as 19 or 20 in the csv 270 | if date > datetime.date.today(): 271 | option = OptionTrade(line[0], float(line[3]), date, float(line[9]), int(line[10]), 272 | line[2].lower()) 273 | if not option.ticker in stocks_dict: 274 | stocks_dict[option.ticker] = __Stock(option.ticker) 275 | list_exp_dates = [] 276 | for exp_date_obj in stocks_dict[option.ticker].exp_dates: 277 | list_exp_dates.append(exp_date_obj.exp_date) 278 | if not option.exp_date in list_exp_dates: 279 | stocks_dict[option.ticker].exp_dates.append(ExpDate(option.exp_date)) 280 | for exp_date_obj in stocks_dict[option.ticker].exp_dates: 281 | if option.exp_date == exp_date_obj.exp_date: 282 | exp_date_obj.options.append(option) 283 | if option.type == 'call': 284 | exp_date_obj.num_of_calls += 1 285 | else: 286 | exp_date_obj.num_of_puts += 1 287 | exp_date_obj.num_of_options += 1 288 | 289 | 290 | def sorting_exp_dates(exp_date_obj): 291 | return exp_date_obj.exp_date 292 | 293 | 294 | for key, stock in stocks_dict.items(): 295 | for exp_date in stock.exp_dates: 296 | exp_date.calc_predicted_price() 297 | exp_date.calc_percent_change(stock.price) 298 | exp_date.calc_total_volumes() 299 | exp_date.calc_total_price() 300 | exp_date.calc_call_money() 301 | exp_date.calc_put_money() 302 | stock.calc_ratios() 303 | stock.construct_option_list() 304 | 305 | stock.exp_dates = sorted(stock.exp_dates, key=sorting_exp_dates) 306 | 307 | 308 | def sorting_stocks_percentage(stock_obj): 309 | return abs(stock_obj.exp_dates[0].percent_change) 310 | 311 | 312 | stocks_sorted_list = sorted(stocks_dict.values(), key=sorting_stocks_percentage, reverse=True) 313 | write_to_formated_excel(stocks_sorted_list, "Sorted by Percent Change") 314 | 315 | 316 | def sorting_stocks_total_money(stock_obj): 317 | largest_total_money = 0 318 | for exp_date_obj in stock_obj.exp_dates: 319 | if exp_date_obj.total_money_traded > largest_total_money: 320 | largest_total_money = exp_date_obj.total_money_traded 321 | return largest_total_money 322 | 323 | 324 | stocks_sorted_list = sorted(stocks_dict.values(), key=sorting_stocks_total_money, reverse=True) 325 | write_to_formated_excel(stocks_sorted_list, "Sorted by Total Money Traded") 326 | write_to_raw_excel(stocks_dict.values()) 327 | 328 | 329 | def alphabetical_order(stock): 330 | return stock.ticker 331 | 332 | stocks_sorted_list = sorted(stocks_dict.values(), key=alphabetical_order) 333 | write_to_individual_trades(stocks_sorted_list) 334 | 335 | workbook.close() 336 | 337 | end = datetime.datetime.now() 338 | print(end - start) -------------------------------------------------------------------------------- /daily_report.py: -------------------------------------------------------------------------------- 1 | import os 2 | import csv 3 | import datetime 4 | import xlsxwriter 5 | from iexfinance.stocks import Stock 6 | 7 | 8 | workbook = xlsxwriter.Workbook('output/output.xlsx') 9 | 10 | def write_to_formated_excel(stocks_list, sheet_name): 11 | worksheet = workbook.add_worksheet(sheet_name) 12 | 13 | worksheet.write(0, 0, "Ticker/Expiration Date") 14 | worksheet.write(0, 1, "Current Price") 15 | worksheet.write(0, 2, "Option Trades") 16 | worksheet.write(0, 3, "Call Trades") 17 | worksheet.write(0, 4, "WA Call Strikes") 18 | worksheet.write(0, 5, "Call Volume") 19 | worksheet.write(0, 6, "Call Money") 20 | worksheet.write(0, 7, "Put Trades") 21 | worksheet.write(0, 8, "WA Put Strikes") 22 | worksheet.write(0, 9, "Put Volume") 23 | worksheet.write(0, 10, "Put Money") 24 | 25 | row = 1 26 | 27 | for stock in stocks_list: 28 | worksheet.write(row, 0, f'${stock.ticker}') 29 | if stock.cvpv != None: 30 | worksheet.write(row, 1, "CVPV Ratio:") 31 | worksheet.write(row, 2, f'{stock.cvpv:.3f}') 32 | if stock.cmpm != None: 33 | worksheet.write(row, 3, "CMPM Ratio:") 34 | worksheet.write(row, 4, f'{stock.cmpm:.3f}') 35 | row += 1 36 | for exp_date_obj in stock.exp_dates: 37 | worksheet.write(row, 0, 38 | f'{exp_date_obj.exp_date.month}/{exp_date_obj.exp_date.day}/{exp_date_obj.exp_date.year}') 39 | worksheet.write(row, 1, '${:.2f}'.format(stock.price)) 40 | worksheet.write(row, 2, exp_date_obj.num_of_option_trades) 41 | worksheet.write(row, 3, exp_date_obj.num_of_calls) 42 | worksheet.write(row, 4, '${:11,.2f}'.format(exp_date_obj.WA_call_strike)) 43 | worksheet.write(row, 5, exp_date_obj.call_volume) 44 | worksheet.write(row, 6, '${:11,.2f}'.format(exp_date_obj.money_in_calls)) 45 | worksheet.write(row, 7, exp_date_obj.num_of_puts) 46 | worksheet.write(row, 8, '${:11,.2f}'.format(exp_date_obj.WA_put_strike)) 47 | worksheet.write(row, 9, exp_date_obj.put_volume) 48 | worksheet.write(row, 10, '${:11,.2f}'.format(exp_date_obj.money_in_puts)) 49 | row += 1 50 | 51 | worksheet.write(row, 0, "Totals:") 52 | worksheet.write(row, 2, stock.total_option_trades) 53 | worksheet.write(row, 3, stock.total_call_trades) 54 | worksheet.write(row, 5, stock.total_call_volume) 55 | worksheet.write(row, 6, '${:11,.2f}'.format(stock.total_call_money)) 56 | worksheet.write(row, 7, stock.total_put_trades) 57 | worksheet.write(row, 9, stock.total_put_volume) 58 | worksheet.write(row, 10, '${:11,.2f}'.format(stock.total_put_money)) 59 | row += 2 60 | 61 | 62 | def write_to_highlighted_trades(options_list): 63 | worksheet = workbook.add_worksheet('Highlighted Option Trades') 64 | 65 | worksheet.write(0, 0, "Ticker") 66 | worksheet.write(0, 1, "Option Type") 67 | worksheet.write(0, 2, "Expiration Date") 68 | worksheet.write(0, 3, "Stock Price") 69 | worksheet.write(0, 4, "Strike Price") 70 | worksheet.write(0, 5, "Premium") 71 | worksheet.write(0, 6, "Break Even Price") 72 | worksheet.write(0, 7, "Volume") 73 | worksheet.write(0, 8, "Total Price Paid") 74 | worksheet.write(0, 9, "Vol/OI") 75 | 76 | row = 1 77 | for option in options_list: 78 | worksheet.write(row, 0, f'${option.ticker}') 79 | if option.type == 'put': 80 | type = "Put" 81 | elif option.type == 'call': 82 | type = "Call" 83 | worksheet.write(row, 1, type) 84 | worksheet.write(row, 2, f'{option.exp_date.month}/{option.exp_date.day}/{option.exp_date.year}') 85 | worksheet.write(row, 3, stocks_dict[option.ticker].price) 86 | worksheet.write(row, 4, option.strike) 87 | worksheet.write(row, 5, option.last) 88 | worksheet.write(row, 6, option.break_even) 89 | worksheet.write(row, 7, option.volume) 90 | worksheet.write(row, 8, option.total_cost) 91 | worksheet.write(row, 9, option.vol_oi) 92 | 93 | row += 1 94 | 95 | 96 | def write_to_individual_trades(stocks_list): 97 | worksheet = workbook.add_worksheet("Individual Option Trades") 98 | worksheet.write(0, 0, "Ticker/Expiration Date") 99 | worksheet.write(0, 1, "Stock Price") 100 | worksheet.write(0, 2, "Strike Price") 101 | worksheet.write(0, 3, "Premium") 102 | worksheet.write(0, 4, "Break Even Price") 103 | worksheet.write(0, 5, "Volume") 104 | worksheet.write(0, 6, "Total Price Paid") 105 | worksheet.write(0, 7, "Vol/OI") 106 | 107 | row = 1 108 | 109 | for stock in stocks_list: 110 | worksheet.write(row, 0, f'${stock.ticker}') 111 | row += 1 112 | 113 | if len(stock.list_of_calls) > 0: 114 | worksheet.write(row, 0, "Calls:") 115 | row += 1 116 | for option in stock.list_of_calls: 117 | worksheet.write(row, 0, f'{option.exp_date.month}/{option.exp_date.day}/{option.exp_date.year}') 118 | worksheet.write(row, 1, '${:.2f}'.format(stock.price)) 119 | worksheet.write(row, 2, '${:.2f}'.format(option.strike)) 120 | worksheet.write(row, 3, '${:.2f}'.format(option.last)) 121 | worksheet.write(row, 4, '${:.2f}'.format(option.break_even)) 122 | worksheet.write(row, 5, option.volume) 123 | worksheet.write(row, 6, '${:,.2f}'.format(option.total_cost)) 124 | worksheet.write(row, 7, '{:.3f}'.format(option.vol_oi)) 125 | row += 1 126 | 127 | if len(stock.list_of_puts) > 0: 128 | worksheet.write(row, 0, "Puts:") 129 | row += 1 130 | for option in stock.list_of_puts: 131 | worksheet.write(row, 0, f'{option.exp_date.month}/{option.exp_date.day}/{option.exp_date.year}') 132 | worksheet.write(row, 1, '${:.2f}'.format(stock.price)) 133 | worksheet.write(row, 2, '${:.2f}'.format(option.strike)) 134 | worksheet.write(row, 3, '${:.2f}'.format(option.last)) 135 | worksheet.write(row, 4, '${:.2f}'.format(option.break_even)) 136 | worksheet.write(row, 5, option.volume) 137 | worksheet.write(row, 6, '${:,.2f}'.format(option.total_cost)) 138 | worksheet.write(row, 7, '{:.3f}'.format(option.vol_oi)) 139 | row += 1 140 | row += 1 141 | 142 | 143 | 144 | def get_current_stock_price(ticker): 145 | print(ticker) 146 | price = Stock(ticker) 147 | stockPrice = price.get_price() 148 | return float(stockPrice) 149 | 150 | 151 | class ExpDate: 152 | def __init__(self, exp_date): 153 | self.exp_date = exp_date 154 | self.options = [] 155 | self.num_of_calls = 0 156 | self.num_of_puts = 0 157 | self.num_of_option_trades = 0 158 | 159 | def calc_total_volumes(self): 160 | self.call_volume = 0 161 | self.put_volume = 0 162 | for option in self.options: 163 | if option.type == 'call': 164 | self.call_volume += option.volume 165 | elif option.type == 'put': 166 | self.put_volume += option.volume 167 | 168 | def calc_total_monies(self): 169 | self.total_money_traded = 0 170 | self.money_in_puts = 0 171 | self.money_in_calls = 0 172 | for option in self.options: 173 | self.total_money_traded += option.total_cost 174 | if option.type == 'put': 175 | self.money_in_puts += option.total_cost 176 | if option.type == 'call': 177 | self.money_in_calls += option.total_cost 178 | 179 | def calc_WA_strike_prices(self): 180 | call_numerator = 0 181 | call_denominator = 0 182 | put_numerator = 0 183 | put_denominator = 0 184 | for option in self.options: 185 | if option.type == 'call': 186 | call_numerator += option.strike * option.volume 187 | call_denominator += option.volume 188 | elif option.type == 'put': 189 | put_numerator += option.strike * option.volume 190 | put_denominator += option.volume 191 | if call_denominator > 0: 192 | self.WA_call_strike = call_numerator / call_denominator 193 | else: 194 | self.WA_call_strike = 0 195 | if put_denominator > 0: 196 | self.WA_put_strike = put_numerator / put_denominator 197 | else: 198 | self.WA_put_strike = 0 199 | 200 | 201 | 202 | def option_list_sorter(option): 203 | return option.exp_date 204 | 205 | class __Stock: 206 | def __init__(self, ticker): 207 | self.ticker = ticker 208 | self.price = get_current_stock_price(ticker) 209 | self.exp_dates = [] 210 | 211 | def construct_option_list(self): 212 | self.list_of_calls = [] 213 | self.list_of_puts = [] 214 | for exp_date_obj in self.exp_dates: 215 | for option in exp_date_obj.options: 216 | if option.type == 'call': 217 | self.list_of_calls.append(option) 218 | elif option.type == 'put': 219 | self.list_of_puts.append(option) 220 | self.list_of_calls = sorted(self.list_of_calls, key=option_list_sorter) 221 | self.list_of_puts = sorted(self.list_of_puts, key=option_list_sorter) 222 | 223 | def calc_ratios(self): 224 | self.total_call_volume = 0 225 | self.total_put_volume = 0 226 | self.total_call_money = 0 227 | self.total_put_money = 0 228 | for exp_date_obj in self.exp_dates: 229 | self.total_call_volume += exp_date_obj.call_volume 230 | self.total_put_volume += exp_date_obj.put_volume 231 | self.total_call_money += exp_date_obj.money_in_calls 232 | self.total_put_money += exp_date_obj.money_in_puts 233 | 234 | if self.total_put_volume == 0 or self.total_call_volume == 0: 235 | self.cvpv = None 236 | else: 237 | self.cvpv = self.total_call_volume / self.total_put_volume 238 | if self.total_put_money == 0 or self.total_call_money == 0: 239 | self.cmpm = None 240 | else: 241 | self.cmpm = self.total_call_money / self.total_put_money 242 | 243 | def calc_totals(self): 244 | self.total_money = 0 245 | self.total_option_trades = 0 246 | self.total_call_trades = 0 247 | self.total_put_trades = 0 248 | for exp_date_obj in self.exp_dates: 249 | self.total_money += exp_date_obj.total_money_traded 250 | self.total_option_trades += exp_date_obj.num_of_option_trades 251 | self.total_call_trades += exp_date_obj.num_of_calls 252 | self.total_put_trades += exp_date_obj.num_of_puts 253 | 254 | 255 | 256 | 257 | 258 | 259 | class OptionTrade: 260 | def __init__(self, ticker, strike, exp_date, last, volume, type, open_int): 261 | self.ticker = ticker 262 | self.strike = strike 263 | self.exp_date = exp_date 264 | self.last = last 265 | self.volume = volume 266 | self.total_cost = last * volume * 100.0 267 | self.type = type 268 | self.open_int = open_int 269 | self.vol_oi = float(volume / open_int) 270 | if self.type == 'call': 271 | self.break_even = strike + last 272 | if self.type == 'put': 273 | self.break_even = strike - last 274 | 275 | 276 | 277 | start = datetime.datetime.now() # For Optimization Purposes 278 | 279 | stocks_dict = {} 280 | for file in os.listdir('data'): 281 | with open(f"data/{file}", 'r') as csv_file: 282 | csv_reader = csv.reader(csv_file) 283 | next(csv_reader) 284 | for line in csv_reader: 285 | if len(line) > 2: 286 | mdy_list = line[4].split('/') 287 | date = datetime.date(int(mdy_list[2]) + 2000, int(mdy_list[0]), int(mdy_list[1])) # +2000 because years are just listed as 19 or 20 in the csv 288 | if date > datetime.date.today(): 289 | option = OptionTrade(line[0], float(line[3]), date, float(line[9]), int(line[10]), 290 | line[2].lower(), int(line[11])) 291 | if not option.ticker in stocks_dict: 292 | stocks_dict[option.ticker] = __Stock(option.ticker) 293 | list_exp_dates = [] 294 | for exp_date_obj in stocks_dict[option.ticker].exp_dates: 295 | list_exp_dates.append(exp_date_obj.exp_date) 296 | if not option.exp_date in list_exp_dates: 297 | stocks_dict[option.ticker].exp_dates.append(ExpDate(option.exp_date)) 298 | for exp_date_obj in stocks_dict[option.ticker].exp_dates: 299 | if option.exp_date == exp_date_obj.exp_date: 300 | exp_date_obj.options.append(option) 301 | if option.type == 'call': 302 | exp_date_obj.num_of_calls += 1 303 | elif option.type == 'put': 304 | exp_date_obj.num_of_puts += 1 305 | exp_date_obj.num_of_option_trades += 1 306 | 307 | def sorting_exp_dates(exp_date_obj): 308 | return exp_date_obj.exp_date 309 | 310 | 311 | for key, stock in stocks_dict.items(): 312 | for exp_date in stock.exp_dates: 313 | exp_date.calc_total_volumes() 314 | exp_date.calc_total_monies() 315 | exp_date.calc_WA_strike_prices() 316 | stock.calc_ratios() 317 | stock.construct_option_list() 318 | stock.calc_totals() 319 | 320 | stock.exp_dates = sorted(stock.exp_dates, key=sorting_exp_dates) 321 | 322 | 323 | def sorting_stocks_total_money(stock_obj): 324 | return stock_obj.total_money 325 | 326 | 327 | stocks_sorted_list = sorted(stocks_dict.values(), key=sorting_stocks_total_money, reverse=True) 328 | write_to_formated_excel(stocks_sorted_list, "Sorted By Money Traded") 329 | 330 | def sorting_stocks_cvpv(stock): 331 | if stock.cvpv == None: 332 | return 0 333 | else: 334 | return stock.cvpv 335 | 336 | stocks_sorted_list = sorted(stocks_dict.values(), key=sorting_stocks_cvpv, reverse=True) 337 | write_to_formated_excel(stocks_sorted_list, "Sorted By CVPV Ratio") 338 | 339 | def sorting_stocks_cmpm(stock): 340 | if stock.cmpm == None: 341 | return 0 342 | else: 343 | return stock.cmpm 344 | 345 | stocks_sorted_list = sorted(stocks_dict.values(), key=sorting_stocks_cmpm, reverse=True) 346 | write_to_formated_excel(stocks_sorted_list, "Sorted By CMPM Ratio") 347 | 348 | def highlighted_trade_sorter(option): 349 | return option.total_cost 350 | 351 | def find_highlighted_trades(stocks_list): 352 | list_highlighted_trades = [] 353 | for stock in stocks_list: 354 | for exp_date_obj in stock.exp_dates: 355 | for option in exp_date_obj.options: 356 | if option.total_cost > 2.0/3.0 * exp_date_obj.total_money_traded and option.total_cost >= 500000: 357 | list_highlighted_trades.append(option) 358 | 359 | return sorted(list_highlighted_trades, key=highlighted_trade_sorter, reverse=True) 360 | 361 | write_to_highlighted_trades(find_highlighted_trades(stocks_dict.values())) 362 | 363 | 364 | def alphabetical_order(stock): 365 | return stock.ticker 366 | 367 | stocks_sorted_list = sorted(stocks_dict.values(), key=alphabetical_order) 368 | write_to_individual_trades(stocks_sorted_list) 369 | 370 | workbook.close() 371 | 372 | end = datetime.datetime.now() 373 | print(end - start) -------------------------------------------------------------------------------- /retroactive_daily_reports.py: -------------------------------------------------------------------------------- 1 | import os 2 | import csv 3 | import datetime 4 | import xlsxwriter 5 | from iexfinance.stocks import Stock 6 | from iexfinance.stocks import get_historical_data 7 | 8 | workbook = xlsxwriter.Workbook('output/output.xlsx') 9 | 10 | def write_to_formated_excel(stocks_list, sheet_name): 11 | worksheet = workbook.add_worksheet(sheet_name) 12 | 13 | worksheet.write(0, 0, "Ticker/Expiration Date") 14 | worksheet.write(0, 1, "Current Price") 15 | worksheet.write(0, 2, "Option Trades") 16 | worksheet.write(0, 3, "Call Trades") 17 | worksheet.write(0, 4, "WA Call Strikes") 18 | worksheet.write(0, 5, "Call Volume") 19 | worksheet.write(0, 6, "Call Money") 20 | worksheet.write(0, 7, "Put Trades") 21 | worksheet.write(0, 8, "WA Put Strikes") 22 | worksheet.write(0, 9, "Put Volume") 23 | worksheet.write(0, 10, "Put Money") 24 | 25 | row = 1 26 | 27 | for stock in stocks_list: 28 | worksheet.write(row, 0, f'${stock.ticker}') 29 | if stock.cvpv != None: 30 | worksheet.write(row, 1, "CVPV Ratio:") 31 | worksheet.write(row, 2, f'{stock.cvpv:.3f}') 32 | if stock.cmpm != None: 33 | worksheet.write(row, 3, "CMPM Ratio:") 34 | worksheet.write(row, 4, f'{stock.cmpm:.3f}') 35 | row += 1 36 | for exp_date_obj in stock.exp_dates: 37 | worksheet.write(row, 0, 38 | f'{exp_date_obj.exp_date.month}/{exp_date_obj.exp_date.day}/{exp_date_obj.exp_date.year}') 39 | worksheet.write(row, 1, '${:.2f}'.format(stock.price)) 40 | worksheet.write(row, 2, exp_date_obj.num_of_option_trades) 41 | worksheet.write(row, 3, exp_date_obj.num_of_calls) 42 | worksheet.write(row, 4, '${:11,.2f}'.format(exp_date_obj.WA_call_strike)) 43 | worksheet.write(row, 5, exp_date_obj.call_volume) 44 | worksheet.write(row, 6, '${:11,.2f}'.format(exp_date_obj.money_in_calls)) 45 | worksheet.write(row, 7, exp_date_obj.num_of_puts) 46 | worksheet.write(row, 8, '${:11,.2f}'.format(exp_date_obj.WA_put_strike)) 47 | worksheet.write(row, 9, exp_date_obj.put_volume) 48 | worksheet.write(row, 10, '${:11,.2f}'.format(exp_date_obj.money_in_puts)) 49 | row += 1 50 | 51 | worksheet.write(row, 0, "Totals:") 52 | worksheet.write(row, 2, stock.total_option_trades) 53 | worksheet.write(row, 3, stock.total_call_trades) 54 | worksheet.write(row, 5, stock.total_call_volume) 55 | worksheet.write(row, 6, '${:11,.2f}'.format(stock.total_call_money)) 56 | worksheet.write(row, 7, stock.total_put_trades) 57 | worksheet.write(row, 9, stock.total_put_volume) 58 | worksheet.write(row, 10, '${:11,.2f}'.format(stock.total_put_money)) 59 | row += 2 60 | 61 | 62 | def write_to_highlighted_trades(options_list): 63 | worksheet = workbook.add_worksheet('Highlighted Option Trades') 64 | 65 | worksheet.write(0, 0, "Ticker") 66 | worksheet.write(0, 1, "Option Type") 67 | worksheet.write(0, 2, "Expiration Date") 68 | worksheet.write(0, 3, "Stock Price") 69 | worksheet.write(0, 4, "Strike Price") 70 | worksheet.write(0, 5, "Premium") 71 | worksheet.write(0, 6, "Break Even Price") 72 | worksheet.write(0, 7, "Volume") 73 | worksheet.write(0, 8, "Total Price Paid") 74 | worksheet.write(0, 9, "Vol/OI") 75 | 76 | row = 1 77 | for option in options_list: 78 | worksheet.write(row, 0, f'${option.ticker}') 79 | if option.type == 'put': 80 | type = "Put" 81 | elif option.type == 'call': 82 | type = "Call" 83 | worksheet.write(row, 1, type) 84 | worksheet.write(row, 2, f'{option.exp_date.month}/{option.exp_date.day}/{option.exp_date.year}') 85 | worksheet.write(row, 3, stocks_dict[option.ticker].price) 86 | worksheet.write(row, 4, option.strike) 87 | worksheet.write(row, 5, option.last) 88 | worksheet.write(row, 6, option.break_even) 89 | worksheet.write(row, 7, option.volume) 90 | worksheet.write(row, 8, option.total_cost) 91 | worksheet.write(row, 9, option.vol_oi) 92 | 93 | row += 1 94 | 95 | 96 | 97 | def write_to_individual_trades(stocks_list): 98 | worksheet = workbook.add_worksheet("Individual Option Trades") 99 | worksheet.write(0, 0, "Ticker/Expiration Date") 100 | worksheet.write(0, 1, "Stock Price") 101 | worksheet.write(0, 2, "Strike Price") 102 | worksheet.write(0, 3, "Premium") 103 | worksheet.write(0, 4, "Break Even Price") 104 | worksheet.write(0, 5, "Volume") 105 | worksheet.write(0, 6, "Total Price Paid") 106 | worksheet.write(0, 7, "Vol/OI") 107 | 108 | row = 1 109 | 110 | for stock in stocks_list: 111 | worksheet.write(row, 0, f'${stock.ticker}') 112 | row += 1 113 | 114 | if len(stock.list_of_calls) > 0: 115 | worksheet.write(row, 0, "Calls:") 116 | row += 1 117 | for option in stock.list_of_calls: 118 | worksheet.write(row, 0, f'{option.exp_date.month}/{option.exp_date.day}/{option.exp_date.year}') 119 | worksheet.write(row, 1, '${:.2f}'.format(stock.price)) 120 | worksheet.write(row, 2, '${:.2f}'.format(option.strike)) 121 | worksheet.write(row, 3, '${:.2f}'.format(option.last)) 122 | worksheet.write(row, 4, '${:.2f}'.format(option.break_even)) 123 | worksheet.write(row, 5, option.volume) 124 | worksheet.write(row, 6, '${:,.2f}'.format(option.total_cost)) 125 | worksheet.write(row, 7, '{:.3f}'.format(option.vol_oi)) 126 | row += 1 127 | 128 | if len(stock.list_of_puts) > 0: 129 | worksheet.write(row, 0, "Puts:") 130 | row += 1 131 | for option in stock.list_of_puts: 132 | worksheet.write(row, 0, f'{option.exp_date.month}/{option.exp_date.day}/{option.exp_date.year}') 133 | worksheet.write(row, 1, '${:.2f}'.format(stock.price)) 134 | worksheet.write(row, 2, '${:.2f}'.format(option.strike)) 135 | worksheet.write(row, 3, '${:.2f}'.format(option.last)) 136 | worksheet.write(row, 4, '${:.2f}'.format(option.break_even)) 137 | worksheet.write(row, 5, option.volume) 138 | worksheet.write(row, 6, '${:,.2f}'.format(option.total_cost)) 139 | worksheet.write(row, 7, '{:.3f}'.format(option.vol_oi)) 140 | row += 1 141 | row += 1 142 | 143 | 144 | 145 | user_input = input("What is the retroactive date?\n") 146 | user_list = user_input.split('/') 147 | historical_date = datetime.datetime(int(user_list[2]), int(user_list[0]), int(user_list[1])) 148 | 149 | def get_current_stock_price(ticker): 150 | print(ticker) 151 | df = get_historical_data(ticker, historical_date) 152 | return float(df[f'{historical_date.year}-{historical_date.month:02}-{historical_date.day:02}']['close']) 153 | 154 | 155 | class ExpDate: 156 | def __init__(self, exp_date): 157 | self.exp_date = exp_date 158 | self.options = [] 159 | self.num_of_calls = 0 160 | self.num_of_puts = 0 161 | self.num_of_option_trades = 0 162 | 163 | def calc_total_volumes(self): 164 | self.call_volume = 0 165 | self.put_volume = 0 166 | for option in self.options: 167 | if option.type == 'call': 168 | self.call_volume += option.volume 169 | elif option.type == 'put': 170 | self.put_volume += option.volume 171 | 172 | def calc_total_monies(self): 173 | self.total_money_traded = 0 174 | self.money_in_puts = 0 175 | self.money_in_calls = 0 176 | for option in self.options: 177 | self.total_money_traded += option.total_cost 178 | if option.type == 'put': 179 | self.money_in_puts += option.total_cost 180 | if option.type == 'call': 181 | self.money_in_calls += option.total_cost 182 | 183 | def calc_WA_strike_prices(self): 184 | call_numerator = 0 185 | call_denominator = 0 186 | put_numerator = 0 187 | put_denominator = 0 188 | for option in self.options: 189 | if option.type == 'call': 190 | call_numerator += option.strike * option.volume 191 | call_denominator += option.volume 192 | elif option.type == 'put': 193 | put_numerator += option.strike * option.volume 194 | put_denominator += option.volume 195 | if call_denominator > 0: 196 | self.WA_call_strike = call_numerator / call_denominator 197 | else: 198 | self.WA_call_strike = 0 199 | if put_denominator > 0: 200 | self.WA_put_strike = put_numerator / put_denominator 201 | else: 202 | self.WA_put_strike = 0 203 | 204 | 205 | 206 | def option_list_sorter(option): 207 | return option.exp_date 208 | 209 | class __Stock: 210 | def __init__(self, ticker): 211 | self.ticker = ticker 212 | self.price = get_current_stock_price(ticker) 213 | self.exp_dates = [] 214 | 215 | def construct_option_list(self): 216 | self.list_of_calls = [] 217 | self.list_of_puts = [] 218 | for exp_date_obj in self.exp_dates: 219 | for option in exp_date_obj.options: 220 | if option.type == 'call': 221 | self.list_of_calls.append(option) 222 | elif option.type == 'put': 223 | self.list_of_puts.append(option) 224 | self.list_of_calls = sorted(self.list_of_calls, key=option_list_sorter) 225 | self.list_of_puts = sorted(self.list_of_puts, key=option_list_sorter) 226 | 227 | def calc_ratios(self): 228 | self.total_call_volume = 0 229 | self.total_put_volume = 0 230 | self.total_call_money = 0 231 | self.total_put_money = 0 232 | for exp_date_obj in self.exp_dates: 233 | self.total_call_volume += exp_date_obj.call_volume 234 | self.total_put_volume += exp_date_obj.put_volume 235 | self.total_call_money += exp_date_obj.money_in_calls 236 | self.total_put_money += exp_date_obj.money_in_puts 237 | 238 | if self.total_put_volume == 0 or self.total_call_volume == 0: 239 | self.cvpv = None 240 | else: 241 | self.cvpv = self.total_call_volume / self.total_put_volume 242 | if self.total_put_money == 0 or self.total_call_money == 0: 243 | self.cmpm = None 244 | else: 245 | self.cmpm = self.total_call_money / self.total_put_money 246 | 247 | def calc_totals(self): 248 | self.total_money = 0 249 | self.total_option_trades = 0 250 | self.total_call_trades = 0 251 | self.total_put_trades = 0 252 | for exp_date_obj in self.exp_dates: 253 | self.total_money += exp_date_obj.total_money_traded 254 | self.total_option_trades += exp_date_obj.num_of_option_trades 255 | self.total_call_trades += exp_date_obj.num_of_calls 256 | self.total_put_trades += exp_date_obj.num_of_puts 257 | 258 | 259 | 260 | 261 | 262 | 263 | class OptionTrade: 264 | def __init__(self, ticker, strike, exp_date, last, volume, type, open_int): 265 | self.ticker = ticker 266 | self.strike = strike 267 | self.exp_date = exp_date 268 | self.last = last 269 | self.volume = volume 270 | self.total_cost = last * volume * 100.0 271 | self.type = type 272 | self.open_int = open_int 273 | self.vol_oi = float(volume / open_int) 274 | if self.type == 'call': 275 | self.break_even = strike + last 276 | if self.type == 'put': 277 | self.break_even = strike - last 278 | 279 | 280 | 281 | start = datetime.datetime.now() # For Optimization Purposes 282 | 283 | stocks_dict = {} 284 | for file in os.listdir('data'): 285 | with open(f"data/{file}", 'r') as csv_file: 286 | csv_reader = csv.reader(csv_file) 287 | next(csv_reader) 288 | for line in csv_reader: 289 | if len(line) > 2: 290 | mdy_list = line[4].split('/') 291 | date = datetime.date(int(mdy_list[2]) + 2000, int(mdy_list[0]), int(mdy_list[1])) # +2000 because years are just listed as 19 or 20 in the csv 292 | if date > datetime.date(int(user_list[2]), int(user_list[0]), int(user_list[1])): 293 | option = OptionTrade(line[0], float(line[3]), date, float(line[9]), int(line[10]), 294 | line[2].lower(), int(line[11])) 295 | if not option.ticker in stocks_dict: 296 | stocks_dict[option.ticker] = __Stock(option.ticker) 297 | list_exp_dates = [] 298 | for exp_date_obj in stocks_dict[option.ticker].exp_dates: 299 | list_exp_dates.append(exp_date_obj.exp_date) 300 | if not option.exp_date in list_exp_dates: 301 | stocks_dict[option.ticker].exp_dates.append(ExpDate(option.exp_date)) 302 | for exp_date_obj in stocks_dict[option.ticker].exp_dates: 303 | if option.exp_date == exp_date_obj.exp_date: 304 | exp_date_obj.options.append(option) 305 | if option.type == 'call': 306 | exp_date_obj.num_of_calls += 1 307 | elif option.type == 'put': 308 | exp_date_obj.num_of_puts += 1 309 | exp_date_obj.num_of_option_trades += 1 310 | 311 | 312 | def sorting_exp_dates(exp_date_obj): 313 | return exp_date_obj.exp_date 314 | 315 | 316 | for key, stock in stocks_dict.items(): 317 | for exp_date in stock.exp_dates: 318 | exp_date.calc_total_volumes() 319 | exp_date.calc_total_monies() 320 | exp_date.calc_WA_strike_prices() 321 | stock.calc_ratios() 322 | stock.construct_option_list() 323 | stock.calc_totals() 324 | 325 | stock.exp_dates = sorted(stock.exp_dates, key=sorting_exp_dates) 326 | 327 | 328 | def sorting_stocks_total_money(stock_obj): 329 | return stock_obj.total_money 330 | 331 | 332 | stocks_sorted_list = sorted(stocks_dict.values(), key=sorting_stocks_total_money, reverse=True) 333 | write_to_formated_excel(stocks_sorted_list, "Sorted By Money Traded") 334 | 335 | def sorting_stocks_cvpv(stock): 336 | if stock.cvpv == None: 337 | return 0 338 | else: 339 | return stock.cvpv 340 | 341 | stocks_sorted_list = sorted(stocks_dict.values(), key=sorting_stocks_cvpv, reverse=True) 342 | write_to_formated_excel(stocks_sorted_list, "Sorted By CVPV Ratio") 343 | 344 | def sorting_stocks_cmpm(stock): 345 | if stock.cmpm == None: 346 | return 0 347 | else: 348 | return stock.cmpm 349 | 350 | stocks_sorted_list = sorted(stocks_dict.values(), key=sorting_stocks_cmpm, reverse=True) 351 | write_to_formated_excel(stocks_sorted_list, "Sorted By CMPM Ratio") 352 | 353 | def highlighted_trade_sorter(option): 354 | return option.total_cost 355 | 356 | def find_highlighted_trades(stocks_list): 357 | list_highlighted_trades = [] 358 | for stock in stocks_list: 359 | for exp_date_obj in stock.exp_dates: 360 | for option in exp_date_obj.options: 361 | if option.total_cost > 2.0/3.0 * exp_date_obj.total_money_traded and option.total_cost >= 500000: 362 | list_highlighted_trades.append(option) 363 | 364 | return sorted(list_highlighted_trades, key=highlighted_trade_sorter, reverse=True) 365 | 366 | write_to_highlighted_trades(find_highlighted_trades(stocks_dict.values())) 367 | 368 | 369 | def alphabetical_order(stock): 370 | return stock.ticker 371 | 372 | stocks_sorted_list = sorted(stocks_dict.values(), key=alphabetical_order) 373 | write_to_individual_trades(stocks_sorted_list) 374 | 375 | workbook.close() 376 | 377 | end = datetime.datetime.now() 378 | print(end - start) -------------------------------------------------------------------------------- /weekly_reports.py: -------------------------------------------------------------------------------- 1 | import os 2 | import csv 3 | import datetime 4 | import xlsxwriter 5 | from iexfinance.stocks import Stock 6 | 7 | workbook = xlsxwriter.Workbook('output/output.xlsx') 8 | 9 | def write_to_formated_excel(stocks_list, sheet_name): 10 | worksheet = workbook.add_worksheet(sheet_name) 11 | 12 | worksheet.write(0, 0, "Ticker/Expiration Date") 13 | worksheet.write(0, 1, "Current Price") 14 | worksheet.write(0, 2, "Option Trades") 15 | worksheet.write(0, 3, "Call Trades") 16 | worksheet.write(0, 4, "WA Call Strikes") 17 | worksheet.write(0, 5, "Call Volume") 18 | worksheet.write(0, 6, "Call Money") 19 | worksheet.write(0, 7, "Put Trades") 20 | worksheet.write(0, 8, "WA Put Strikes") 21 | worksheet.write(0, 9, "Put Volume") 22 | worksheet.write(0, 10, "Put Money") 23 | 24 | row = 1 25 | 26 | for stock in stocks_list: 27 | worksheet.write(row, 0, f'${stock.ticker}') 28 | if stock.cvpv != None: 29 | worksheet.write(row, 1, "CVPV Ratio:") 30 | worksheet.write(row, 2, f'{stock.cvpv:.3f}') 31 | if stock.cmpm != None: 32 | worksheet.write(row, 3, "CMPM Ratio:") 33 | worksheet.write(row, 4, f'{stock.cmpm:.3f}') 34 | row += 1 35 | for exp_date_obj in stock.exp_dates: 36 | worksheet.write(row, 0, 37 | f'{exp_date_obj.exp_date.month}/{exp_date_obj.exp_date.day}/{exp_date_obj.exp_date.year}') 38 | worksheet.write(row, 1, '${:.2f}'.format(stock.price)) 39 | worksheet.write(row, 2, exp_date_obj.num_of_option_trades) 40 | worksheet.write(row, 3, exp_date_obj.num_of_calls) 41 | worksheet.write(row, 4, '${:11,.2f}'.format(exp_date_obj.WA_call_strike)) 42 | worksheet.write(row, 5, exp_date_obj.call_volume) 43 | worksheet.write(row, 6, '${:11,.2f}'.format(exp_date_obj.money_in_calls)) 44 | worksheet.write(row, 7, exp_date_obj.num_of_puts) 45 | worksheet.write(row, 8, '${:11,.2f}'.format(exp_date_obj.WA_put_strike)) 46 | worksheet.write(row, 9, exp_date_obj.put_volume) 47 | worksheet.write(row, 10, '${:11,.2f}'.format(exp_date_obj.money_in_puts)) 48 | row += 1 49 | 50 | worksheet.write(row, 0, "Totals:") 51 | worksheet.write(row, 2, stock.total_option_trades) 52 | worksheet.write(row, 3, stock.total_call_trades) 53 | worksheet.write(row, 5, stock.total_call_volume) 54 | worksheet.write(row, 6, '${:11,.2f}'.format(stock.total_call_money)) 55 | worksheet.write(row, 7, stock.total_put_trades) 56 | worksheet.write(row, 9, stock.total_put_volume) 57 | worksheet.write(row, 10, '${:11,.2f}'.format(stock.total_put_money)) 58 | row += 2 59 | 60 | 61 | def write_to_highlighted_trades(options_list): 62 | worksheet = workbook.add_worksheet('Highlighted Option Trades') 63 | 64 | worksheet.write(0, 0, "Ticker") 65 | worksheet.write(0, 1, "Option Type") 66 | worksheet.write(0, 2, "Expiration Date") 67 | worksheet.write(0, 3, "Stock Price") 68 | worksheet.write(0, 4, "Strike Price") 69 | worksheet.write(0, 5, "Premium") 70 | worksheet.write(0, 6, "Break Even Price") 71 | worksheet.write(0, 7, "Volume") 72 | worksheet.write(0, 8, "Total Price Paid") 73 | worksheet.write(0, 9, "Vol/OI") 74 | worksheet.write(0, 10, "Purchase Date") 75 | 76 | row = 1 77 | for option in options_list: 78 | worksheet.write(row, 0, f'${option.ticker}') 79 | if option.type == 'put': 80 | type = "Put" 81 | elif option.type == 'call': 82 | type = "Call" 83 | worksheet.write(row, 1, type) 84 | worksheet.write(row, 2, f'{option.exp_date.month}/{option.exp_date.day}/{option.exp_date.year}') 85 | worksheet.write(row, 3, stocks_dict[option.ticker].price) 86 | worksheet.write(row, 4, option.strike) 87 | worksheet.write(row, 5, option.last) 88 | worksheet.write(row, 6, option.break_even) 89 | worksheet.write(row, 7, option.volume) 90 | worksheet.write(row, 8, option.total_cost) 91 | worksheet.write(row, 9, option.vol_oi) 92 | worksheet.write(row, 10, f'{option.purchase_date.month}/{option.purchase_date.day}/{option.purchase_date.year}') 93 | 94 | row += 1 95 | 96 | 97 | def write_to_individual_trades(stocks_list): 98 | worksheet = workbook.add_worksheet("Individual Option Trades") 99 | worksheet.write(0, 0, "Ticker/Expiration Date") 100 | worksheet.write(0, 1, "Stock Price") 101 | worksheet.write(0, 2, "Strike Price") 102 | worksheet.write(0, 3, "Premium") 103 | worksheet.write(0, 4, "Break Even Price") 104 | worksheet.write(0, 5, "Volume") 105 | worksheet.write(0, 6, "Total Price Paid") 106 | worksheet.write(0, 7, "Vol/OI") 107 | worksheet.write(0, 8, "Purchase Date") 108 | 109 | row = 1 110 | 111 | for stock in stocks_list: 112 | worksheet.write(row, 0, f'${stock.ticker}') 113 | row += 1 114 | 115 | if len(stock.list_of_calls) > 0: 116 | worksheet.write(row, 0, "Calls:") 117 | row += 1 118 | for option in stock.list_of_calls: 119 | worksheet.write(row, 0, f'{option.exp_date.month}/{option.exp_date.day}/{option.exp_date.year}') 120 | worksheet.write(row, 1, '${:.2f}'.format(stock.price)) 121 | worksheet.write(row, 2, '${:.2f}'.format(option.strike)) 122 | worksheet.write(row, 3, '${:.2f}'.format(option.last)) 123 | worksheet.write(row, 4, '${:.2f}'.format(option.break_even)) 124 | worksheet.write(row, 5, option.volume) 125 | worksheet.write(row, 6, '${:,.2f}'.format(option.total_cost)) 126 | worksheet.write(row, 7, '{:.3f}'.format(option.vol_oi)) 127 | worksheet.write(row, 8, 128 | f'{option.purchase_date.month}/{option.purchase_date.day}/{option.purchase_date.year}') 129 | row += 1 130 | 131 | if len(stock.list_of_puts) > 0: 132 | worksheet.write(row, 0, "Puts:") 133 | row += 1 134 | for option in stock.list_of_puts: 135 | worksheet.write(row, 0, f'{option.exp_date.month}/{option.exp_date.day}/{option.exp_date.year}') 136 | worksheet.write(row, 1, '${:.2f}'.format(stock.price)) 137 | worksheet.write(row, 2, '${:.2f}'.format(option.strike)) 138 | worksheet.write(row, 3, '${:.2f}'.format(option.last)) 139 | worksheet.write(row, 4, '${:.2f}'.format(option.break_even)) 140 | worksheet.write(row, 5, option.volume) 141 | worksheet.write(row, 6, '${:,.2f}'.format(option.total_cost)) 142 | worksheet.write(row, 7, '{:.3f}'.format(option.vol_oi)) 143 | worksheet.write(row, 8, 144 | f'{option.purchase_date.month}/{option.purchase_date.day}/{option.purchase_date.year}') 145 | row += 1 146 | row += 1 147 | 148 | 149 | 150 | def get_current_stock_price(ticker): 151 | print(ticker) 152 | price = Stock(ticker) 153 | stockPrice = price.get_price() 154 | return float(stockPrice) 155 | 156 | 157 | class ExpDate: 158 | def __init__(self, exp_date): 159 | self.exp_date = exp_date 160 | self.options = [] 161 | self.num_of_calls = 0 162 | self.num_of_puts = 0 163 | self.num_of_option_trades = 0 164 | 165 | def calc_total_volumes(self): 166 | self.call_volume = 0 167 | self.put_volume = 0 168 | for option in self.options: 169 | if option.type == 'call': 170 | self.call_volume += option.volume 171 | elif option.type == 'put': 172 | self.put_volume += option.volume 173 | 174 | def calc_total_monies(self): 175 | self.total_money_traded = 0 176 | self.money_in_puts = 0 177 | self.money_in_calls = 0 178 | for option in self.options: 179 | self.total_money_traded += option.total_cost 180 | if option.type == 'put': 181 | self.money_in_puts += option.total_cost 182 | if option.type == 'call': 183 | self.money_in_calls += option.total_cost 184 | 185 | def calc_WA_strike_prices(self): 186 | call_numerator = 0 187 | call_denominator = 0 188 | put_numerator = 0 189 | put_denominator = 0 190 | for option in self.options: 191 | if option.type == 'call': 192 | call_numerator += option.strike * option.volume 193 | call_denominator += option.volume 194 | elif option.type == 'put': 195 | put_numerator += option.strike * option.volume 196 | put_denominator += option.volume 197 | if call_denominator > 0: 198 | self.WA_call_strike = call_numerator / call_denominator 199 | else: 200 | self.WA_call_strike = 0 201 | if put_denominator > 0: 202 | self.WA_put_strike = put_numerator / put_denominator 203 | else: 204 | self.WA_put_strike = 0 205 | 206 | 207 | 208 | def option_list_sorter(option): 209 | return option.exp_date 210 | 211 | class __Stock: 212 | def __init__(self, ticker): 213 | self.ticker = ticker 214 | self.price = get_current_stock_price(ticker) 215 | self.exp_dates = [] 216 | 217 | 218 | def construct_option_list(self): 219 | self.list_of_calls = [] 220 | self.list_of_puts = [] 221 | for exp_date_obj in self.exp_dates: 222 | for option in exp_date_obj.options: 223 | if option.type == 'call': 224 | self.list_of_calls.append(option) 225 | elif option.type == 'put': 226 | self.list_of_puts.append(option) 227 | self.list_of_calls = sorted(self.list_of_calls, key=option_list_sorter) 228 | self.list_of_puts = sorted(self.list_of_puts, key=option_list_sorter) 229 | 230 | def calc_ratios(self): 231 | self.total_call_volume = 0 232 | self.total_put_volume = 0 233 | self.total_call_money = 0 234 | self.total_put_money = 0 235 | for exp_date_obj in self.exp_dates: 236 | self.total_call_volume += exp_date_obj.call_volume 237 | self.total_put_volume += exp_date_obj.put_volume 238 | self.total_call_money += exp_date_obj.money_in_calls 239 | self.total_put_money += exp_date_obj.money_in_puts 240 | 241 | if self.total_put_volume == 0 or self.total_call_volume == 0: 242 | self.cvpv = None 243 | else: 244 | self.cvpv = self.total_call_volume / self.total_put_volume 245 | if self.total_put_money == 0 or self.total_call_money == 0: 246 | self.cmpm = None 247 | else: 248 | self.cmpm = self.total_call_money / self.total_put_money 249 | 250 | def calc_totals(self): 251 | self.total_money = 0 252 | self.total_option_trades = 0 253 | self.total_call_trades = 0 254 | self.total_put_trades = 0 255 | for exp_date_obj in self.exp_dates: 256 | self.total_money += exp_date_obj.total_money_traded 257 | self.total_option_trades += exp_date_obj.num_of_option_trades 258 | self.total_call_trades += exp_date_obj.num_of_calls 259 | self.total_put_trades += exp_date_obj.num_of_puts 260 | 261 | 262 | 263 | 264 | 265 | 266 | class OptionTrade: 267 | def __init__(self, ticker, strike, exp_date, last, volume, type, open_int, purchase_date): 268 | self.ticker = ticker 269 | self.strike = strike 270 | self.exp_date = exp_date 271 | self.last = last 272 | self.volume = volume 273 | self.total_cost = last * volume * 100.0 274 | self.type = type 275 | self.open_int = open_int 276 | self.vol_oi = float(volume / open_int) 277 | self.purchase_date = purchase_date 278 | if self.type == 'call': 279 | self.break_even = strike + last 280 | if self.type == 'put': 281 | self.break_even = strike - last 282 | 283 | 284 | 285 | start = datetime.datetime.now() # For Optimization Purposes 286 | 287 | stocks_dict = {} 288 | for file in os.listdir('data'): 289 | with open(f"data/{file}", 'r') as csv_file: 290 | 291 | title_splits = file.split('-') 292 | purchase_date = datetime.date(int(title_splits[6].split('.')[0]), int(title_splits[4]), int(title_splits[5])) 293 | 294 | csv_reader = csv.reader(csv_file) 295 | next(csv_reader) 296 | for line in csv_reader: 297 | if len(line) > 2: 298 | mdy_list = line[4].split('/') 299 | date = datetime.date(int(mdy_list[2]) + 2000, int(mdy_list[0]), int(mdy_list[1])) # +2000 because years are just listed as 19 or 20 in the csv 300 | if date > datetime.date.today(): 301 | option = OptionTrade(line[0], float(line[3]), date, float(line[9]), int(line[10]), 302 | line[2].lower(), int(line[11]), purchase_date) 303 | if not option.ticker in stocks_dict: 304 | stocks_dict[option.ticker] = __Stock(option.ticker) 305 | list_exp_dates = [] 306 | for exp_date_obj in stocks_dict[option.ticker].exp_dates: 307 | list_exp_dates.append(exp_date_obj.exp_date) 308 | if not option.exp_date in list_exp_dates: 309 | stocks_dict[option.ticker].exp_dates.append(ExpDate(option.exp_date)) 310 | for exp_date_obj in stocks_dict[option.ticker].exp_dates: 311 | if option.exp_date == exp_date_obj.exp_date: 312 | exp_date_obj.options.append(option) 313 | if option.type == 'call': 314 | exp_date_obj.num_of_calls += 1 315 | elif option.type == 'put': 316 | exp_date_obj.num_of_puts += 1 317 | exp_date_obj.num_of_option_trades += 1 318 | 319 | 320 | def sorting_exp_dates(exp_date_obj): 321 | return exp_date_obj.exp_date 322 | 323 | 324 | for key, stock in stocks_dict.items(): 325 | for exp_date in stock.exp_dates: 326 | exp_date.calc_total_volumes() 327 | exp_date.calc_total_monies() 328 | exp_date.calc_WA_strike_prices() 329 | stock.calc_ratios() 330 | stock.construct_option_list() 331 | stock.calc_totals() 332 | 333 | stock.exp_dates = sorted(stock.exp_dates, key=sorting_exp_dates) 334 | 335 | 336 | def sorting_stocks_total_money(stock_obj): 337 | return stock_obj.total_money 338 | 339 | 340 | stocks_sorted_list = sorted(stocks_dict.values(), key=sorting_stocks_total_money, reverse=True) 341 | write_to_formated_excel(stocks_sorted_list, "Sorted By Money Traded") 342 | 343 | def sorting_stocks_cvpv(stock): 344 | if stock.cvpv == None: 345 | return 0 346 | else: 347 | return stock.cvpv 348 | 349 | stocks_sorted_list = sorted(stocks_dict.values(), key=sorting_stocks_cvpv, reverse=True) 350 | write_to_formated_excel(stocks_sorted_list, "Sorted By CVPV Ratio") 351 | 352 | def sorting_stocks_cmpm(stock): 353 | if stock.cmpm == None: 354 | return 0 355 | else: 356 | return stock.cmpm 357 | 358 | stocks_sorted_list = sorted(stocks_dict.values(), key=sorting_stocks_cmpm, reverse=True) 359 | write_to_formated_excel(stocks_sorted_list, "Sorted By CMPM Ratio") 360 | 361 | def highlighted_trade_sorter(option): 362 | return option.total_cost 363 | 364 | def find_highlighted_trades(stocks_list): 365 | list_highlighted_trades = [] 366 | for stock in stocks_list: 367 | for exp_date_obj in stock.exp_dates: 368 | for option in exp_date_obj.options: 369 | if option.total_cost > 2.0/3.0 * exp_date_obj.total_money_traded and option.total_cost >= 500000: 370 | list_highlighted_trades.append(option) 371 | 372 | return sorted(list_highlighted_trades, key=highlighted_trade_sorter, reverse=True) 373 | 374 | write_to_highlighted_trades(find_highlighted_trades(stocks_dict.values())) 375 | 376 | 377 | def alphabetical_order(stock): 378 | return stock.ticker 379 | 380 | stocks_sorted_list = sorted(stocks_dict.values(), key=alphabetical_order) 381 | write_to_individual_trades(stocks_sorted_list) 382 | 383 | workbook.close() 384 | 385 | end = datetime.datetime.now() 386 | print(end - start) -------------------------------------------------------------------------------- /Used Option Data/unusual-stocks-options-activity-01-07-2019.csv: -------------------------------------------------------------------------------- 1 | Symbol,Price,Type,Strike,"Exp Date",DTE,Bid,Midpoint,Ask,Last,Volume,"Open Int",Vol/OI,IV,Time 2 | QEP,8.53,Put,8.00,03/15/19,67,0.25,0.45,0.65,0.55,20073,197,101.89,57.26%,01/07/19 3 | QCOM,56.44,Call,50.00,03/15/19,67,7.40,7.5,7.60,7.70,7593,134,56.66,36.65%,01/07/19 4 | WETF,6.6,Call,8.00,03/15/19,67,0.15,0.18,0.20,0.16,12405,255,48.65,49.60%,01/07/19 5 | ENDP,9.17,Call,9.00,04/18/19,101,1.40,1.6,1.80,1.50,15234,318,47.91,72.84%,01/07/19 6 | TIF,85.9,Put,70.00,05/17/19,130,1.74,1.77,1.80,1.78,8681,185,46.92,39.55%,01/07/19 7 | AABA,59.64,Put,57.50,02/15/19,39,1.70,1.97,2.24,1.90,5018,124,40.47,38.26%,01/07/19 8 | MT,21.56,Put,25.00,01/17/20,375,5.00,5.1,5.20,5.10,5000,126,39.68,39.16%,01/07/19 9 | JNJ,127.01,Call,140.00,03/15/19,67,0.91,0.94,0.97,0.92,16279,455,35.78,20.73%,01/07/19 10 | CMCSA,35.43,Call,36.00,01/11/19,4,0.21,0.23,0.25,0.24,5130,144,35.63,31.32%,01/07/19 11 | NVDA,143.4,Call,148.00,01/11/19,4,2.05,2.06,2.07,2.04,10203,373,27.35,64.13%,01/07/19 12 | NFLX,315.34,Put,300.00,01/11/19,4,2.79,2.86,2.93,2.83,7703,348,22.14,65.28%,01/07/19 13 | USB,46.61,Put,46.00,01/11/19,4,0.29,0.31,0.32,0.28,3068,142,21.61,27.70%,01/07/19 14 | SPOT,119.36,Call,140.00,04/18/19,101,6.20,6.5,6.80,6.53,2089,102,20.48,52.67%,01/07/19 15 | AMD,20.57,Call,20.00,03/15/19,67,2.91,2.95,2.99,2.96,13708,793,17.29,75.71%,01/07/19 16 | CIM,18.16,Call,19.00,02/15/19,39,0.10,0.18,0.25,0.20,2549,152,16.77,20.48%,01/07/19 17 | DAL,47.85,Put,47.50,01/18/19,11,1.16,1.2,1.24,1.09,3040,189,16.08,38.69%,01/07/19 18 | DIS,110.56,Call,115.00,01/25/19,18,0.45,0.53,0.60,0.49,3370,211,15.97,19.17%,01/07/19 19 | CLF,8.73,Call,8.00,04/18/19,101,1.44,1.49,1.53,1.40,10030,634,15.82,54.53%,01/07/19 20 | AMD,20.57,Call,23.50,01/18/19,11,0.24,0.25,0.26,0.26,4200,273,15.38,78.14%,01/07/19 21 | PBR,15.06,Call,18.00,02/15/19,39,0.14,0.16,0.17,0.14,4610,305,15.11,45.19%,01/07/19 22 | JCP,1.28,Call,1.50,01/11/19,4,0.00,0.01,0.02,0.02,4997,341,14.65,156.17%,01/07/19 23 | HCLP,3.66,Call,5.00,02/15/19,39,0.15,0.2,0.25,0.15,2563,178,14.4,106.09%,01/07/19 24 | SQ,60.72,Call,75.00,02/15/19,39,0.80,0.83,0.85,0.82,2791,194,14.39,56.76%,01/07/19 25 | NVDA,143.4,Put,144.00,01/11/19,4,4.00,4.13,4.25,4.11,1506,105,14.34,63.79%,01/07/19 26 | AMD,20.57,Put,19.50,01/18/19,11,0.64,0.66,0.67,0.66,2363,165,14.32,80.90%,01/07/19 27 | AMZN,1629.51,Call,1625.00,01/11/19,4,31.50,32.98,34.45,32.60,1515,106,14.29,44.17%,01/07/19 28 | PBR,15.06,Put,15.00,01/11/19,4,0.27,0.29,0.30,0.30,1775,127,13.98,52.82%,01/07/19 29 | IPI,2.96,Call,3.00,06/21/19,165,0.45,0.5,0.55,0.50,4164,299,13.93,63.45%,01/07/19 30 | BHC,22.36,Call,24.00,01/11/19,4,0.13,0.15,0.17,0.15,5064,368,13.76,69.66%,01/07/19 31 | GOOGL,1075.92,Call,1100.00,01/11/19,4,5.50,5.75,6.00,5.80,5279,384,13.75,32.40%,01/07/19 32 | RCL,101.83,Call,125.00,03/15/19,67,0.72,0.81,0.89,0.85,4018,297,13.53,36.60%,01/07/19 33 | DRI,103.94,Put,90.00,01/18/19,11,0.25,0.33,0.40,0.30,3000,225,13.33,56.84%,01/07/19 34 | AMZN,1629.51,Call,1680.00,01/11/19,4,10.60,11.03,11.45,11.05,2956,223,13.26,42.77%,01/07/19 35 | JPM,100.76,Put,98.00,01/11/19,4,0.36,0.38,0.40,0.35,3344,261,12.81,31.19%,01/07/19 36 | AMZN,1629.51,Put,1620.00,01/11/19,4,25.05,25.53,26.00,25.45,1408,110,12.8,44.52%,01/07/19 37 | ROKU,42.18,Call,40.00,01/11/19,4,3.00,3.13,3.25,3.10,3685,291,12.66,104.65%,01/07/19 38 | BHC,22.36,Call,25.00,01/11/19,4,0.04,0.06,0.08,0.05,1573,129,12.19,70.43%,01/07/19 39 | GPS,26.57,Call,23.00,01/18/19,11,3.55,3.63,3.70,3.90,1810,149,12.15,84.69%,01/07/19 40 | AMZN,1629.51,Put,1600.00,01/11/19,4,17.50,17.9,18.30,17.72,3472,290,11.97,45.10%,01/07/19 41 | SQ,60.72,Put,57.00,01/11/19,4,0.50,0.53,0.55,0.52,2810,238,11.81,73.53%,01/07/19 42 | MU,34,Put,34.00,02/15/19,39,2.24,2.25,2.26,2.25,4821,414,11.64,52.10%,01/07/19 43 | AMD,20.57,Put,21.50,01/11/19,4,1.36,1.38,1.40,1.39,1156,100,11.56,96.83%,01/07/19 44 | NFLX,315.34,Call,340.00,01/11/19,4,1.53,1.62,1.70,1.65,3644,317,11.5,66.68%,01/07/19 45 | X,20.45,Put,21.00,01/11/19,4,0.82,0.86,0.90,0.80,1156,103,11.22,55.52%,01/07/19 46 | NFLX,315.34,Call,330.00,01/11/19,4,3.15,3.18,3.20,3.16,6301,562,11.21,63.36%,01/07/19 47 | GE,8.74,Put,7.00,02/08/19,32,0.13,0.14,0.14,0.13,4528,415,10.91,73.00%,01/07/19 48 | MDB,85.7,Put,85.00,01/18/19,11,4.30,4.65,5.00,4.60,2045,191,10.71,84.34%,01/07/19 49 | DAL,47.85,Call,47.50,01/18/19,11,1.54,1.58,1.62,1.59,3212,303,10.6,41.97%,01/07/19 50 | BHC,22.36,Put,15.00,04/18/19,101,0.38,0.41,0.44,0.40,1396,134,10.42,67.50%,01/07/19 51 | NFLX,315.34,Call,345.00,01/11/19,4,1.11,1.19,1.26,1.20,1351,131,10.31,68.53%,01/07/19 52 | CZR,7.16,Call,8.00,06/21/19,165,0.96,1.01,1.05,0.93,5000,489,10.22,63.07%,01/07/19 53 | CP,184.15,Call,185.00,01/18/19,11,3.00,3.25,3.50,3.50,2501,247,10.13,30.00%,01/07/19 54 | NFLX,315.34,Put,297.50,01/11/19,4,2.10,2.5,2.89,2.48,1017,101,10.07,67.60%,01/07/19 55 | PEGI,19.78,Call,20.00,01/18/19,11,0.35,0.43,0.50,0.40,3386,346,9.79,35.92%,01/07/19 56 | USFD,33.16,Put,30.00,02/15/19,39,0.35,0.53,0.70,0.60,1875,192,9.77,43.17%,01/07/19 57 | AMZN,1629.51,Call,1720.00,01/11/19,4,4.00,4.33,4.65,4.47,1063,110,9.66,43.54%,01/07/19 58 | SQ,60.72,Put,60.00,01/11/19,4,1.33,1.36,1.38,1.37,3206,334,9.6,68.04%,01/07/19 59 | AMZN,1629.51,Call,1670.00,01/11/19,4,13.10,13.65,14.20,13.60,987,103,9.58,42.61%,01/07/19 60 | TLRY,71.9,Put,40.00,06/21/19,165,5.60,6.48,7.35,6.05,1001,105,9.53,126.04%,01/07/19 61 | DAL,47.85,Call,50.50,01/11/19,4,0.07,0.08,0.09,0.08,1066,112,9.52,37.94%,01/07/19 62 | AMZN,1629.51,Call,1630.00,01/11/19,4,29.35,29.9,30.45,30.00,2015,213,9.46,44.06%,01/07/19 63 | DG,112.94,Put,110.00,02/15/19,39,2.55,2.65,2.75,2.61,1038,111,9.35,27.87%,01/07/19 64 | NXPI,76.01,Call,80.00,01/11/19,4,0.23,0.34,0.44,0.35,1040,112,9.29,49.56%,01/07/19 65 | CP,184.15,Call,195.00,01/18/19,11,0.40,0.6,0.80,0.50,2502,270,9.27,27.07%,01/07/19 66 | MOMO,26.22,Put,22.50,02/15/19,39,0.65,0.7,0.75,0.70,1016,110,9.24,65.37%,01/07/19 67 | M,29.91,Put,28.50,01/11/19,4,0.49,0.51,0.53,0.48,1129,124,9.1,85.25%,01/07/19 68 | USB,46.61,Put,45.50,01/18/19,11,0.47,0.5,0.53,0.40,3011,338,8.91,26.82%,01/07/19 69 | NVDA,143.4,Call,155.00,01/11/19,4,0.60,0.63,0.66,0.64,6449,732,8.81,64.86%,01/07/19 70 | TWLO,96.98,Call,100.00,01/11/19,4,1.83,1.94,2.04,1.83,1103,126,8.75,75.33%,01/07/19 71 | CVS,68.61,Call,80.00,08/16/19,221,1.97,2.06,2.14,2.10,894,103,8.68,25.30%,01/07/19 72 | TWTR,31.34,Put,30.50,01/18/19,11,0.78,0.8,0.82,0.83,966,112,8.63,56.78%,01/07/19 73 | TEVA,17.67,Put,13.00,01/15/21,739,1.90,2.09,2.28,1.90,1903,225,8.46,49.22%,01/07/19 74 | NFLX,315.34,Call,325.00,01/11/19,4,4.30,4.48,4.65,4.45,7176,864,8.31,62.65%,01/07/19 75 | NFLX,315.34,Put,250.00,01/25/19,18,1.43,3.22,5.00,2.92,917,111,8.26,86.55%,01/07/19 76 | PSX,91.47,Call,95.00,02/15/19,39,2.05,2.23,2.40,2.15,2578,314,8.21,29.11%,01/07/19 77 | NFLX,315.34,Call,315.00,01/11/19,4,7.95,8.25,8.55,8.53,8919,1086,8.21,63.13%,01/07/19 78 | TWTR,31.34,Call,32.00,01/11/19,4,0.44,0.46,0.47,0.45,5243,642,8.17,55.15%,01/07/19 79 | GE,8.74,Put,8.50,02/01/19,25,0.44,0.45,0.46,0.46,1209,149,8.11,64.55%,01/07/19 80 | GE,8.74,Put,9.00,01/11/19,4,0.36,0.38,0.39,0.38,3234,399,8.11,61.81%,01/07/19 81 | GE,8.74,Call,10.50,01/11/19,4,0.00,0.01,0.02,0.01,810,100,8.1,91.77%,01/07/19 82 | NFLX,315.34,Call,335.00,01/11/19,4,2.11,2.22,2.33,2.15,1875,235,7.98,63.51%,01/07/19 83 | ROKU,42.18,Call,38.00,01/11/19,4,4.15,4.45,4.75,4.64,1203,152,7.91,109.35%,01/07/19 84 | MPC,62.26,Call,65.00,02/15/19,39,1.97,2.06,2.15,2.11,6844,868,7.88,38.89%,01/07/19 85 | NFLX,315.34,Call,320.00,01/11/19,4,6.10,6.2,6.30,6.33,8093,1033,7.83,63.43%,01/07/19 86 | CGC,28.9,Call,34.00,01/18/19,11,0.13,0.15,0.17,0.15,2014,258,7.81,68.59%,01/07/19 87 | SIG,34.97,Call,40.00,04/18/19,101,2.55,2.83,3.10,3.00,1248,160,7.8,64.27%,01/07/19 88 | ZTS,85.27,Call,87.50,02/15/19,39,2.25,2.43,2.60,2.88,1073,138,7.78,33.59%,01/07/19 89 | MDRX,10.45,Call,10.00,01/18/19,11,0.60,0.68,0.75,0.60,3309,439,7.54,45.15%,01/07/19 90 | WFC,47.64,Put,47.00,01/11/19,4,0.35,0.38,0.40,0.35,3494,465,7.51,31.57%,01/07/19 91 | NKE,75.72,Put,72.00,01/18/19,11,0.40,0.44,0.47,0.43,1624,220,7.38,33.05%,01/07/19 92 | EL,131.5,Call,140.00,04/18/19,101,4.70,4.85,5.00,4.74,2520,342,7.37,27.79%,01/07/19 93 | NVDA,143.4,Put,140.00,01/11/19,4,2.35,2.42,2.49,2.35,1845,253,7.29,64.72%,01/07/19 94 | TSLA,334.96,Call,350.00,01/11/19,4,2.50,2.55,2.60,2.60,9080,1252,7.25,55.44%,01/07/19 95 | TSLA,334.96,Put,330.00,01/11/19,4,5.65,5.83,6.00,5.70,2416,335,7.21,57.48%,01/07/19 96 | PBR,15.06,Put,19.00,01/18/19,11,3.90,3.95,4.00,4.00,1685,234,7.2,89.10%,01/07/19 97 | NFLX,315.34,Put,295.00,01/11/19,4,1.61,1.95,2.28,2.08,3270,454,7.2,68.74%,01/07/19 98 | SQ,60.72,Call,61.00,01/18/19,11,2.51,2.55,2.59,2.52,1414,197,7.18,62.48%,01/07/19 99 | INVA,18.51,Call,20.00,03/15/19,67,0.80,0.83,0.85,0.80,1169,163,7.17,42.19%,01/07/19 100 | V,136.06,Put,128.00,01/18/19,11,0.52,0.61,0.69,0.61,1639,231,7.1,34.39%,01/07/19 101 | GE,8.74,Call,10.00,01/11/19,4,0.01,0.02,0.02,0.02,4232,598,7.08,81.80%,01/07/19 102 | AMD,20.57,Put,20.00,01/11/19,4,0.57,0.58,0.59,0.59,12205,1740,7.01,100.08%,01/07/19 103 | AMZN,1629.51,Call,1675.00,01/11/19,4,12.00,12.4,12.80,12.40,781,112,6.97,42.91%,01/07/19 104 | MU,34,Call,36.00,01/11/19,4,0.16,0.17,0.18,0.18,3281,472,6.95,55.89%,01/07/19 105 | MU,34,Put,32.50,01/18/19,11,0.67,0.69,0.71,0.67,3140,453,6.93,56.22%,01/07/19 106 | LW,70.55,Call,75.00,02/15/19,39,0.90,1,1.10,1.05,906,131,6.92,27.86%,01/07/19 107 | TWTR,31.34,Call,33.00,01/11/19,4,0.18,0.2,0.21,0.19,1239,180,6.88,55.10%,01/07/19 108 | SCHW,42.74,Put,42.00,06/21/19,165,2.75,2.88,3.00,3.30,1500,219,6.85,34.77%,01/07/19 109 | AMZN,1629.51,Put,1570.00,01/11/19,4,9.70,10.03,10.35,10.00,1323,194,6.82,46.81%,01/07/19 110 | AMZN,1629.51,Call,1650.00,01/11/19,4,19.95,20.48,21.00,20.60,5186,761,6.81,43.10%,01/07/19 111 | SNAP,6.21,Put,7.00,03/15/19,67,1.20,1.22,1.23,1.22,837,123,6.8,70.31%,01/07/19 112 | NFLX,315.34,Put,290.00,01/11/19,4,1.15,1.26,1.37,1.25,7005,1039,6.74,67.94%,01/07/19 113 | AMZN,1629.51,Call,1700.00,01/11/19,4,7.00,7.08,7.15,7.15,7124,1071,6.65,43.18%,01/07/19 114 | WAB,70.57,Put,70.00,02/15/19,39,3.70,4.15,4.60,3.65,2016,305,6.61,44.12%,01/07/19 115 | T,30.89,Call,31.50,01/11/19,4,0.05,0.06,0.06,0.06,6254,950,6.58,19.60%,01/07/19 116 | MU,34,Call,35.50,01/11/19,4,0.25,0.27,0.28,0.26,2995,458,6.54,54.55%,01/07/19 117 | JPM,100.76,Call,111.00,01/18/19,11,0.05,0.06,0.07,0.06,1135,174,6.52,29.16%,01/07/19 118 | MNST,49.73,Call,50.00,03/15/19,67,3.00,3.1,3.20,3.10,1890,292,6.47,36.49%,01/07/19 119 | BMY,48.41,Call,51.50,01/18/19,11,0.28,0.3,0.31,0.28,1057,164,6.45,36.37%,01/07/19 120 | MBI,9.24,Put,8.00,05/17/19,130,0.43,0.47,0.50,0.43,1000,156,6.41,46.70%,01/07/19 121 | TGT,69.68,Call,71.00,01/11/19,4,0.98,1.04,1.10,1.02,804,128,6.28,53.96%,01/07/19 122 | MU,34,Put,34.00,01/11/19,4,0.79,0.81,0.82,0.82,3122,504,6.19,58.16%,01/07/19 123 | RIG,8.28,Put,8.50,01/11/19,4,0.35,0.37,0.38,0.39,682,111,6.14,76.37%,01/07/19 124 | SQ,60.72,Call,63.00,01/18/19,11,1.67,1.7,1.73,1.67,2875,468,6.14,61.54%,01/07/19 125 | JPM,100.76,Call,106.00,01/18/19,11,0.44,0.47,0.50,0.49,1492,245,6.09,30.07%,01/07/19 126 | X,20.45,Call,22.50,01/11/19,4,0.05,0.07,0.09,0.08,638,105,6.08,72.12%,01/07/19 127 | AA,28.42,Call,30.00,01/17/20,375,4.80,4.9,5.00,5.10,1129,186,6.07,47.15%,01/07/19 128 | AMZN,1629.51,Call,1690.00,01/11/19,4,7.20,8.23,9.25,9.22,681,113,6.03,43.56%,01/07/19 129 | AMZN,1629.51,Call,1645.00,01/11/19,4,20.90,22.1,23.30,24.00,695,116,5.99,45.21%,01/07/19 130 | TWTR,31.34,Call,31.50,01/11/19,4,0.66,0.67,0.68,0.64,2790,470,5.94,54.30%,01/07/19 131 | AAPL,147.93,Call,143.00,01/11/19,4,5.60,5.73,5.85,5.70,3694,627,5.89,40.31%,01/07/19 132 | AXL,12.27,Call,12.00,01/18/19,11,0.65,0.7,0.75,0.70,6302,1092,5.77,65.30%,01/07/19 133 | IGT,15.22,Put,13.00,02/15/19,39,0.40,0.45,0.50,0.43,603,105,5.74,68.22%,01/07/19 134 | OLLI,74.18,Call,75.00,01/18/19,11,2.20,2.33,2.45,2.30,1405,247,5.69,51.52%,01/07/19 135 | AMZN,1629.51,Put,1550.00,01/11/19,4,6.35,6.58,6.80,6.60,2385,420,5.68,47.94%,01/07/19 136 | NFLX,315.34,Call,312.50,01/11/19,4,9.40,9.65,9.90,10.00,2641,467,5.66,64.46%,01/07/19 137 | PYPL,86.93,Call,88.00,01/25/19,18,1.99,2.07,2.15,1.95,709,126,5.63,30.89%,01/07/19 138 | TSLA,334.96,Put,307.50,01/11/19,4,1.00,1.05,1.09,1.02,596,106,5.62,64.04%,01/07/19 139 | AMD,20.57,Call,25.00,01/25/19,18,0.22,0.26,0.30,0.27,1224,219,5.59,78.97%,01/07/19 140 | FB,138.05,Call,143.00,02/01/19,25,4.20,4.6,5.00,4.65,639,115,5.56,45.91%,01/07/19 141 | NVDA,143.4,Call,148.00,01/18/19,11,3.85,3.93,4.00,3.98,656,119,5.51,59.01%,01/07/19 142 | BABA,143.1,Put,142.00,01/11/19,4,2.05,2.11,2.16,1.80,715,130,5.5,39.12%,01/07/19 143 | AAPL,147.93,Call,147.00,01/11/19,4,2.75,2.84,2.92,2.92,9576,1773,5.4,38.97%,01/07/19 144 | AAPL,147.93,Put,134.00,01/18/19,11,0.32,0.35,0.37,0.34,576,108,5.33,40.29%,01/07/19 145 | SQ,60.72,Call,57.50,01/25/19,18,5.00,5.13,5.25,5.00,606,114,5.32,58.70%,01/07/19 146 | BMY,48.41,Call,50.00,01/11/19,4,0.13,0.22,0.30,0.17,653,123,5.31,33.54%,01/07/19 147 | TEAM,92.71,Call,100.00,01/18/19,11,2.50,2.7,2.90,2.75,866,163,5.31,84.57%,01/07/19 148 | C,55.61,Put,48.50,01/18/19,11,0.15,0.17,0.19,0.17,1365,257,5.31,55.36%,01/07/19 149 | WFC,47.64,Put,44.00,01/11/19,4,0.02,0.03,0.03,0.02,1096,207,5.29,39.72%,01/07/19 150 | GE,8.74,Put,8.00,02/08/19,32,0.30,0.32,0.34,0.31,4759,900,5.29,62.64%,01/07/19 151 | AMD,20.57,Put,20.00,03/15/19,67,2.24,2.28,2.31,2.30,1291,245,5.27,76.28%,01/07/19 152 | BMY,48.41,Call,48.50,01/11/19,4,0.58,0.69,0.79,0.60,1501,285,5.27,31.45%,01/07/19 153 | LUV,47.87,Put,46.00,01/11/19,4,0.15,0.2,0.25,0.10,610,116,5.26,33.19%,01/07/19 154 | AAPL,147.93,Put,129.00,01/11/19,4,0.03,0.04,0.04,0.04,2090,397,5.26,59.18%,01/07/19 155 | AMD,20.57,Put,20.50,01/11/19,4,0.78,0.8,0.82,0.80,5558,1059,5.25,97.75%,01/07/19 156 | SIG,34.97,Put,30.00,04/18/19,101,2.55,2.65,2.75,2.70,1225,234,5.24,72.30%,01/07/19 157 | BMY,48.41,Put,48.00,01/18/19,11,0.86,0.92,0.98,0.95,4035,770,5.24,34.84%,01/07/19 158 | T,30.89,Call,33.00,03/15/19,67,0.35,0.36,0.37,0.37,12935,2473,5.23,19.65%,01/07/19 159 | GE,8.74,Put,7.50,02/22/19,46,0.25,0.27,0.28,0.26,559,107,5.22,63.35%,01/07/19 160 | CMG,485.15,Put,445.00,01/11/19,4,0.20,0.35,0.50,0.40,576,111,5.19,47.98%,01/07/19 161 | AMZN,1629.51,Call,1737.50,01/11/19,4,2.70,2.95,3.20,3.40,956,185,5.17,45.69%,01/07/19 162 | ENDP,9.17,Put,9.00,04/18/19,101,1.10,1.25,1.40,1.25,15259,2959,5.16,72.51%,01/07/19 163 | TWLO,96.98,Put,80.00,01/25/19,18,0.99,1.12,1.24,1.10,1102,214,5.15,80.28%,01/07/19 164 | BKS,7.57,Call,9.00,02/15/19,39,0.20,0.25,0.30,0.23,2586,504,5.13,67.55%,01/07/19 165 | XOM,71.52,Put,70.50,01/11/19,4,0.38,0.4,0.42,0.37,603,118,5.11,26.43%,01/07/19 166 | GE,8.74,Put,8.50,01/11/19,4,0.12,0.13,0.14,0.13,13869,2715,5.11,64.31%,01/07/19 167 | LLY,115.28,Call,115.00,01/18/19,11,2.32,2.43,2.53,2.40,10796,2124,5.08,27.64%,01/07/19 168 | ROKU,42.18,Call,37.50,01/11/19,4,4.90,5.08,5.25,5.10,851,168,5.07,114.38%,01/07/19 169 | SEDG,35.01,Call,36.00,01/18/19,11,0.70,0.8,0.90,0.80,865,171,5.06,49.63%,01/07/19 170 | TEVA,17.67,Call,18.50,01/11/19,4,0.10,0.11,0.12,0.11,1238,245,5.05,51.87%,01/07/19 171 | NVDA,143.4,Call,149.00,01/11/19,4,1.68,1.73,1.78,1.79,1253,250,5.01,64.93%,01/07/19 172 | SQ,60.72,Put,58.00,01/11/19,4,0.70,0.72,0.73,0.71,1448,290,4.99,70.58%,01/07/19 173 | FDC,17.22,Call,20.00,02/15/19,39,0.30,0.35,0.40,0.30,821,165,4.98,49.65%,01/07/19 174 | AMZN,1629.51,Put,1575.00,01/11/19,4,10.75,11.08,11.40,10.75,798,161,4.96,45.96%,01/07/19 175 | BMY,48.41,Put,46.00,01/11/19,4,0.07,0.11,0.14,0.09,535,108,4.95,38.36%,01/07/19 176 | ETN,68.73,Put,62.50,04/18/19,101,1.60,1.68,1.75,1.68,633,128,4.95,30.85%,01/07/19 177 | CELG,87.52,Call,95.00,07/19/19,193,2.52,3.26,4.00,3.45,563,114,4.94,22.79%,01/07/19 178 | AMD,20.57,Put,19.50,01/11/19,4,0.40,0.41,0.41,0.41,7570,1536,4.93,100.58%,01/07/19 179 | BMY,48.41,Call,55.00,04/18/19,101,1.42,1.49,1.55,1.42,629,128,4.91,34.42%,01/07/19 180 | TSLA,334.96,Call,342.50,01/11/19,4,4.55,4.65,4.75,4.72,1274,260,4.9,55.75%,01/07/19 181 | ETSY,51.57,Put,40.00,01/17/20,375,4.90,5.2,5.50,5.00,1500,309,4.85,56.60%,01/07/19 182 | T,30.89,Call,31.50,01/18/19,11,0.13,0.15,0.16,0.17,1740,361,4.82,18.27%,01/07/19 183 | NVDA,143.4,Put,142.00,01/11/19,4,3.10,3.2,3.30,3.15,985,205,4.8,64.29%,01/07/19 184 | CMG,485.15,Put,475.00,01/18/19,11,9.50,9.8,10.10,10.20,665,139,4.78,44.83%,01/07/19 185 | TSLA,334.96,Call,352.50,01/11/19,4,1.95,2.02,2.09,2.14,1024,215,4.76,55.85%,01/07/19 186 | BA,328.11,Call,330.00,01/11/19,4,4.15,4.25,4.35,4.20,3600,756,4.76,36.69%,01/07/19 187 | AAPL,147.93,Put,139.00,01/18/19,11,0.80,0.84,0.87,0.85,1015,214,4.74,37.95%,01/07/19 188 | AMZN,1629.51,Put,1580.00,01/11/19,4,11.85,12.2,12.55,11.80,672,142,4.73,45.54%,01/07/19 189 | TSLA,334.96,Put,327.50,01/11/19,4,4.75,4.88,5.00,4.85,974,206,4.73,58.40%,01/07/19 190 | MU,34,Call,37.00,01/11/19,4,0.06,0.08,0.09,0.09,1932,409,4.72,59.52%,01/07/19 191 | XOM,71.52,Call,72.50,01/11/19,4,0.37,0.39,0.41,0.48,1343,285,4.71,29.15%,01/07/19 192 | AAPL,147.93,Call,142.00,01/11/19,4,6.40,6.58,6.75,6.50,1403,298,4.71,40.09%,01/07/19 193 | MS,41.71,Put,41.00,01/11/19,4,0.36,0.37,0.38,0.34,1668,354,4.71,36.92%,01/07/19 194 | NVDA,143.4,Call,145.00,01/11/19,4,3.10,3.15,3.20,3.15,7532,1599,4.71,64.40%,01/07/19 195 | AMRN,14.07,Call,15.00,01/11/19,4,0.11,0.15,0.19,0.17,1239,264,4.69,82.91%,01/07/19 196 | TSLA,334.96,Call,332.50,01/11/19,4,8.85,9.18,9.50,9.18,1473,314,4.69,56.19%,01/07/19 197 | ANF,20.92,Put,22.00,01/18/19,11,1.50,1.57,1.63,1.59,3266,704,4.64,65.28%,01/07/19 198 | AMZN,1629.51,Put,1500.00,01/11/19,4,2.40,2.56,2.71,2.50,3542,764,4.64,52.76%,01/07/19 199 | AMD,20.57,Call,21.50,01/11/19,4,0.45,0.46,0.47,0.46,8829,1901,4.64,95.95%,01/07/19 200 | GME,15.48,Call,18.00,02/15/19,39,0.38,0.43,0.48,0.47,782,169,4.63,62.70%,01/07/19 201 | TXN,94.5,Call,105.00,02/15/19,39,0.65,0.71,0.77,0.79,1083,234,4.63,30.54%,01/07/19 202 | TEVA,17.67,Call,18.00,01/11/19,4,0.23,0.25,0.26,0.24,1615,349,4.63,51.07%,01/07/19 203 | AMD,20.57,Put,19.00,01/11/19,4,0.27,0.28,0.28,0.28,11387,2462,4.63,102.28%,01/07/19 204 | AMZN,1629.51,Call,1610.00,01/11/19,4,40.05,41.78,43.50,42.48,1759,381,4.62,46.51%,01/07/19 205 | FB,138.05,Call,150.00,01/25/19,18,0.57,0.62,0.66,0.64,5312,1149,4.62,32.04%,01/07/19 206 | AAPL,147.93,Put,146.00,01/11/19,4,1.45,1.5,1.55,1.50,6824,1478,4.62,38.43%,01/07/19 207 | TWLO,96.98,Call,95.00,01/11/19,4,4.00,4.23,4.45,4.50,539,117,4.61,84.86%,01/07/19 208 | AMZN,1629.51,Put,1560.00,01/11/19,4,7.85,8.28,8.70,7.86,693,151,4.59,46.73%,01/07/19 209 | IP,42.77,Put,40.00,07/19/19,193,2.36,2.42,2.48,2.35,1309,286,4.58,32.06%,01/07/19 210 | TSLA,334.96,Call,355.00,01/11/19,4,1.65,1.74,1.83,1.67,1566,343,4.57,55.32%,01/07/19 211 | LVS,55.47,Put,45.00,02/15/19,39,0.41,0.47,0.53,0.42,2164,474,4.57,51.72%,01/07/19 212 | SLB,40.17,Put,37.50,05/17/19,130,2.14,2.19,2.24,2.17,5026,1102,4.56,38.05%,01/07/19 213 | AAPL,147.93,Put,147.00,01/11/19,4,1.84,1.9,1.95,1.90,12075,2671,4.52,38.28%,01/07/19 214 | BMRN,90.19,Call,95.00,01/18/19,11,1.35,1.6,1.85,1.40,1317,294,4.48,50.37%,01/07/19 215 | TSLA,334.96,Put,320.00,01/11/19,4,2.69,2.78,2.86,2.82,4042,902,4.48,60.40%,01/07/19 216 | AAPL,147.93,Put,149.00,01/11/19,4,2.70,2.8,2.89,2.88,2529,567,4.46,37.65%,01/07/19 217 | AMZN,1629.51,Call,1620.00,01/11/19,4,34.50,35.2,35.90,35.07,2652,595,4.46,43.90%,01/07/19 218 | CTL,16.3,Call,16.50,01/18/19,11,0.33,0.37,0.41,0.41,1242,279,4.45,43.80%,01/07/19 219 | NVDA,143.4,Call,141.00,01/11/19,4,5.15,5.3,5.45,5.41,1407,319,4.41,68.57%,01/07/19 220 | KMI,16.59,Call,18.00,02/15/19,39,0.10,0.11,0.11,0.10,1341,305,4.4,23.04%,01/07/19 221 | MAT,11.21,Call,10.50,01/11/19,4,0.75,0.85,0.95,0.85,1320,301,4.39,87.20%,01/07/19 222 | AVGO,237.98,Call,245.00,01/18/19,11,2.90,3.05,3.20,3.50,684,156,4.38,37.86%,01/07/19 223 | TSLA,334.96,Call,340.00,01/11/19,4,5.35,5.53,5.70,5.60,5419,1238,4.38,55.49%,01/07/19 224 | LUV,47.87,Put,48.00,01/11/19,4,0.80,0.85,0.90,0.83,537,123,4.37,38.55%,01/07/19 225 | BA,328.11,Call,332.50,01/11/19,4,3.00,3.13,3.25,3.19,923,211,4.37,36.58%,01/07/19 226 | NVDA,143.4,Put,138.00,01/11/19,4,1.73,1.81,1.88,1.65,1579,364,4.34,64.06%,01/07/19 227 | CGC,28.9,Put,30.00,02/15/19,39,3.15,3.23,3.30,3.25,1061,247,4.3,71.06%,01/07/19 228 | GWW,277.13,Put,250.00,01/18/19,11,0.70,0.95,1.20,0.90,1000,234,4.27,45.31%,01/07/19 229 | AAPL,147.93,Put,144.00,01/11/19,4,0.91,0.94,0.97,0.94,6789,1594,4.26,39.84%,01/07/19 230 | SBUX,63.57,Put,63.50,01/11/19,4,0.62,0.69,0.76,0.59,1926,460,4.19,23.91%,01/07/19 231 | NFLX,315.34,Call,350.00,01/11/19,4,0.86,0.9,0.93,0.94,2252,538,4.19,71.62%,01/07/19 232 | HPQ,20.95,Call,22.00,02/15/19,39,0.42,0.45,0.47,0.46,4335,1036,4.18,30.88%,01/07/19 233 | TEAM,92.71,Call,110.00,01/18/19,11,0.60,0.9,1.20,0.85,1218,292,4.17,83.07%,01/07/19 234 | TSLA,334.96,Put,315.00,01/11/19,4,1.75,1.9,2.05,1.91,2183,523,4.17,61.84%,01/07/19 235 | DKS,32.97,Call,36.00,03/15/19,67,1.25,1.38,1.50,1.45,715,172,4.16,44.79%,01/07/19 236 | PCG,18.95,Call,23.00,03/15/19,67,1.50,1.7,1.90,1.70,1062,256,4.15,93.14%,01/07/19 237 | ROKU,42.18,Call,40.00,07/19/19,193,9.70,9.95,10.20,9.85,558,135,4.13,71.61%,01/07/19 238 | FB,138.05,Put,122.00,01/11/19,4,0.02,0.04,0.06,0.04,1273,309,4.12,54.67%,01/07/19 239 | TLRY,71.9,Call,55.00,01/18/19,11,14.60,16.4,18.20,15.50,1319,320,4.12,54.78%,01/07/19 240 | TWTR,31.34,Put,30.50,01/11/19,4,0.40,0.41,0.42,0.42,1333,325,4.1,59.78%,01/07/19 241 | TSLA,334.96,Call,372.50,01/11/19,4,0.35,0.39,0.43,0.38,749,183,4.09,58.86%,01/07/19 242 | MU,34,Put,31.00,01/11/19,4,0.10,0.11,0.11,0.11,5000,1222,4.09,68.91%,01/07/19 243 | DISH,28.6,Put,26.50,01/11/19,4,0.10,0.15,0.20,0.15,547,134,4.08,69.39%,01/07/19 244 | PYPL,86.93,Call,88.50,01/11/19,4,0.68,0.7,0.72,0.69,603,148,4.07,36.04%,01/07/19 245 | WFC,47.64,Put,44.00,01/18/19,11,0.26,0.28,0.29,0.26,2877,707,4.07,43.82%,01/07/19 246 | TSLA,334.96,Put,335.00,01/11/19,4,7.90,8.1,8.30,7.90,1051,261,4.03,56.73%,01/07/19 247 | HPQ,20.95,Put,19.00,02/15/19,39,0.26,0.27,0.28,0.25,691,173,3.99,35.77%,01/07/19 248 | PCG,18.95,Put,15.00,01/18/19,11,0.50,0.55,0.60,0.55,1008,253,3.98,164.09%,01/07/19 249 | GTT,27.44,Call,30.00,02/15/19,39,1.35,1.7,2.05,1.77,1110,279,3.98,76.02%,01/07/19 250 | AAPL,147.93,Put,148.00,01/11/19,4,2.26,2.33,2.40,2.37,4741,1190,3.98,38.19%,01/07/19 251 | TSLA,334.96,Put,325.00,01/11/19,4,3.90,4.05,4.20,4.10,2472,625,3.96,59.27%,01/07/19 252 | C,55.61,Put,54.50,01/11/19,4,0.42,0.44,0.46,0.43,743,188,3.95,38.35%,01/07/19 253 | GE,8.74,Call,10.00,02/15/19,39,0.20,0.21,0.21,0.20,7988,2028,3.94,52.07%,01/07/19 254 | YY,65.27,Call,60.00,02/15/19,39,7.30,7.5,7.70,7.22,506,129,3.92,47.85%,01/07/19 255 | AMRN,14.07,Call,14.00,01/11/19,4,0.45,0.53,0.60,0.53,1241,317,3.91,83.95%,01/07/19 256 | CIM,18.16,Call,19.00,06/21/19,165,0.35,0.43,0.50,0.39,2556,654,3.91,12.95%,01/07/19 257 | TWTR,31.34,Call,34.00,01/11/19,4,0.07,0.08,0.09,0.08,861,221,3.9,57.38%,01/07/19 258 | NVDA,143.4,Call,162.50,01/11/19,4,0.17,0.19,0.20,0.21,772,199,3.88,70.43%,01/07/19 259 | AMZN,1629.51,Call,1605.00,01/11/19,4,43.20,44.23,45.25,45.70,681,176,3.87,46.83%,01/07/19 260 | PCG,18.95,Put,10.00,03/15/19,67,0.65,0.8,0.95,0.80,772,200,3.86,156.76%,01/07/19 261 | BMY,48.41,Put,47.00,06/21/19,165,3.60,3.73,3.85,3.60,7053,1845,3.82,35.86%,01/07/19 262 | DAL,47.85,Put,46.00,01/18/19,11,0.65,0.67,0.69,0.63,3318,878,3.78,42.30%,01/07/19 263 | SNAP,6.21,Put,6.00,01/11/19,4,0.08,0.09,0.10,0.10,7281,1926,3.78,73.46%,01/07/19 264 | FB,138.05,Put,138.00,01/11/19,4,2.10,2.3,2.50,2.29,2450,651,3.76,40.56%,01/07/19 265 | PCG,18.95,Put,14.00,06/21/19,165,2.30,2.48,2.65,2.42,1327,354,3.75,106.24%,01/07/19 266 | AUY,2.43,Call,2.00,07/19/19,193,0.60,0.61,0.62,0.62,4670,1244,3.75,53.97%,01/07/19 267 | AMZN,1629.51,Call,1625.00,02/15/19,39,97.05,98.18,99.30,99.38,829,222,3.73,44.63%,01/07/19 268 | RDC,10.25,Call,12.00,04/18/19,101,0.90,0.93,0.95,0.90,876,237,3.7,68.96%,01/07/19 269 | AXP,98.17,Put,95.00,01/11/19,4,0.27,0.3,0.32,0.28,1046,283,3.7,32.21%,01/07/19 270 | AMD,20.57,Call,22.00,01/11/19,4,0.32,0.33,0.33,0.33,7862,2125,3.7,96.92%,01/07/19 271 | NVDA,143.4,Call,139.00,01/11/19,4,6.40,6.58,6.75,7.20,1541,420,3.67,78.77%,01/07/19 272 | SNAP,6.21,Call,7.00,01/25/19,18,0.05,0.06,0.07,0.07,1868,509,3.67,54.70%,01/07/19 273 | NVDA,143.4,Put,136.00,01/18/19,11,2.86,2.92,2.97,2.87,622,170,3.66,60.86%,01/07/19 274 | AMZN,1629.51,Put,1540.00,01/11/19,4,5.15,5.38,5.60,5.38,662,181,3.66,48.70%,01/07/19 275 | AAPL,147.93,Put,141.00,01/11/19,4,0.41,0.44,0.46,0.44,3184,871,3.66,42.10%,01/07/19 276 | ROKU,42.18,Put,38.00,01/18/19,11,0.92,1,1.08,1.01,1429,391,3.65,93.50%,01/07/19 277 | BAC,25.56,Put,24.50,01/11/19,4,0.07,0.08,0.08,0.08,16870,4625,3.65,39.33%,01/07/19 278 | BAC,25.56,Put,25.50,01/18/19,11,0.59,0.61,0.63,0.61,3597,989,3.64,36.82%,01/07/19 279 | XOM,71.52,Call,73.00,01/11/19,4,0.24,0.26,0.27,0.29,614,169,3.63,27.20%,01/07/19 280 | GS,176.02,Put,175.00,01/11/19,4,1.98,2.1,2.21,2.10,646,178,3.63,35.52%,01/07/19 281 | PBR,15.06,Call,15.00,02/08/19,32,0.82,0.85,0.88,0.71,1057,291,3.63,37.20%,01/07/19 282 | RIG,8.28,Put,8.00,01/11/19,4,0.11,0.13,0.14,0.14,1223,341,3.59,75.63%,01/07/19 283 | ROKU,42.18,Call,37.00,01/11/19,4,5.15,5.48,5.80,5.55,755,211,3.58,117.85%,01/07/19 284 | TSLA,334.96,Call,400.00,02/15/19,39,6.50,6.65,6.80,6.64,6997,1953,3.58,57.81%,01/07/19 285 | AMD,20.57,Call,21.00,01/11/19,4,0.64,0.65,0.66,0.64,9582,2675,3.58,96.20%,01/07/19 286 | GM,34.36,Call,37.00,02/15/19,39,0.66,0.68,0.70,0.70,1034,290,3.57,35.91%,01/07/19 287 | NVDA,143.4,Put,95.00,06/21/19,165,3.20,3.28,3.35,3.07,1387,390,3.56,57.69%,01/07/19 288 | AAPL,147.93,Put,145.00,01/11/19,4,1.16,1.21,1.25,1.19,12855,3617,3.55,39.07%,01/07/19 289 | BABA,143.1,Call,148.00,01/11/19,4,0.82,0.86,0.89,0.88,988,279,3.54,43.15%,01/07/19 290 | MU,34,Call,34.50,01/11/19,4,0.56,0.58,0.60,0.60,6061,1712,3.54,57.44%,01/07/19 291 | NVDA,143.4,Call,150.00,01/11/19,4,1.42,1.46,1.50,1.48,7980,2273,3.51,63.92%,01/07/19 292 | FB,138.05,Call,138.00,01/11/19,4,2.07,2.27,2.46,2.31,6743,1927,3.5,39.25%,01/07/19 293 | BG,55.35,Call,57.50,04/18/19,101,2.65,2.88,3.10,2.65,1216,348,3.49,29.07%,01/07/19 294 | SBUX,63.57,Put,63.00,01/11/19,4,0.44,0.48,0.52,0.42,1697,486,3.49,25.53%,01/07/19 295 | MSFT,102.06,Put,102.00,01/11/19,4,1.43,1.49,1.55,1.47,4885,1405,3.48,35.59%,01/07/19 296 | NFLX,315.34,Put,292.50,01/11/19,4,1.42,1.49,1.55,1.55,968,280,3.46,67.29%,01/07/19 297 | AAPL,147.93,Put,140.00,02/22/19,46,4.00,4.1,4.20,4.05,1335,387,3.45,37.06%,01/07/19 298 | DWDP,54.76,Put,53.00,01/11/19,4,0.25,0.3,0.35,0.26,506,147,3.44,38.97%,01/07/19 299 | DIS,110.56,Put,107.00,01/18/19,11,0.64,0.67,0.69,0.67,1078,314,3.43,26.37%,01/07/19 300 | NFLX,315.34,Call,310.00,01/11/19,4,10.75,11.05,11.35,11.34,4965,1448,3.43,63.88%,01/07/19 301 | AAPL,147.93,Call,150.00,01/11/19,4,1.30,1.35,1.40,1.40,28119,8196,3.43,36.48%,01/07/19 302 | BA,328.11,Put,325.00,01/11/19,4,3.75,3.9,4.05,3.88,557,163,3.42,39.12%,01/07/19 303 | AMZN,1629.51,Call,1622.50,01/11/19,4,32.85,33.65,34.45,34.82,914,267,3.42,45.52%,01/07/19 304 | MU,34,Put,33.00,01/11/19,4,0.42,0.43,0.44,0.43,2609,764,3.41,60.10%,01/07/19 305 | PCG,18.95,Put,14.00,03/15/19,67,1.30,1.5,1.70,1.55,1374,404,3.4,127.29%,01/07/19 306 | WBA,69.97,Call,82.50,01/17/20,375,3.10,3.4,3.70,3.25,867,256,3.39,23.78%,01/07/19 307 | PYPL,86.93,Put,86.00,01/25/19,18,2.00,2.08,2.15,2.01,1009,298,3.39,32.70%,01/07/19 308 | WFC,47.64,Put,48.00,01/18/19,11,1.34,1.37,1.39,1.36,2101,620,3.39,36.10%,01/07/19 309 | C,55.61,Put,55.00,01/11/19,4,0.57,0.59,0.60,0.58,956,283,3.38,37.14%,01/07/19 310 | WING,67.43,Call,66.95,01/18/19,11,2.35,2.5,2.65,2.20,797,237,3.36,41.24%,01/07/19 311 | NVDA,143.4,Call,160.00,01/11/19,4,0.24,0.26,0.28,0.28,1638,488,3.36,67.38%,01/07/19 312 | TEVA,17.67,Call,19.00,01/11/19,4,0.03,0.04,0.05,0.05,828,247,3.35,54.18%,01/07/19 313 | TSLA,334.96,Call,347.50,01/11/19,4,3.05,3.15,3.25,3.15,871,260,3.35,55.09%,01/07/19 314 | NVDA,143.4,Call,157.50,01/11/19,4,0.39,0.41,0.43,0.42,799,239,3.34,65.92%,01/07/19 315 | WWE,79.73,Put,75.00,01/18/19,11,1.00,1.15,1.30,1.17,1029,308,3.34,55.55%,01/07/19 316 | BA,328.11,Put,255.00,02/15/19,39,1.19,1.23,1.27,1.25,511,154,3.32,50.48%,01/07/19 317 | TSLA,334.96,Put,317.50,01/11/19,4,2.25,2.34,2.43,2.39,614,185,3.32,61.77%,01/07/19 318 | NVDA,143.4,Call,150.00,02/08/19,32,6.05,6.23,6.40,6.27,1047,315,3.32,52.28%,01/07/19 319 | SNAP,6.21,Call,7.00,01/11/19,4,0.00,0.01,0.01,0.01,3096,933,3.32,69.36%,01/07/19 320 | BIDU,162.6,Put,160.00,01/11/19,4,1.74,1.87,1.99,1.74,526,159,3.31,42.67%,01/07/19 321 | MU,34,Put,23.00,04/18/19,101,0.42,0.44,0.45,0.45,1020,308,3.31,60.85%,01/07/19 322 | TWTR,31.34,Call,31.00,01/11/19,4,0.91,0.93,0.94,0.92,2896,876,3.31,56.22%,01/07/19 323 | DRYS,6.75,Call,7.50,01/18/19,11,0.05,0.08,0.10,0.10,548,166,3.3,71.95%,01/07/19 324 | MU,34,Call,37.50,01/11/19,4,0.04,0.05,0.06,0.06,1670,507,3.29,60.46%,01/07/19 325 | BABA,143.1,Put,138.00,01/11/19,4,0.86,0.9,0.93,0.82,2717,825,3.29,44.82%,01/07/19 326 | LVS,55.47,Put,50.00,02/15/19,39,1.07,1.12,1.16,1.09,3648,1115,3.27,45.70%,01/07/19 327 | ADBE,229.26,Call,255.00,02/15/19,39,2.54,2.75,2.95,2.75,586,180,3.26,34.95%,01/07/19 328 | PBF,34.2,Call,40.00,06/21/19,165,1.55,1.65,1.75,1.60,501,154,3.25,37.03%,01/07/19 329 | MU,34,Call,34.50,01/18/19,11,1.03,1.06,1.08,1.07,2510,775,3.24,54.47%,01/07/19 330 | DNR,2.2,Put,2.50,01/18/19,11,0.35,0.38,0.40,0.36,1331,414,3.21,105.76%,01/07/19 331 | YNDX,29.02,Call,30.00,01/18/19,11,0.45,0.53,0.60,0.55,1360,424,3.21,46.60%,01/07/19 332 | APC,46.99,Call,70.00,05/17/19,130,0.24,0.28,0.32,0.29,1748,547,3.2,39.81%,01/07/19 333 | TSLA,334.96,Call,345.00,01/11/19,4,3.75,3.85,3.95,3.85,2176,681,3.2,55.19%,01/07/19 334 | AAPL,147.93,Call,147.00,01/25/19,18,4.75,4.85,4.95,4.80,709,222,3.19,32.20%,01/07/19 335 | AAL,32.95,Put,32.00,01/11/19,4,0.37,0.39,0.41,0.31,1268,398,3.19,50.59%,01/07/19 336 | AAPL,147.93,Call,152.50,01/11/19,4,0.61,0.63,0.65,0.64,18350,5756,3.19,35.07%,01/07/19 337 | BP,40.16,Call,40.50,01/18/19,11,0.50,0.52,0.54,0.54,1518,477,3.18,24.40%,01/07/19 338 | AAPL,147.93,Put,143.00,01/11/19,4,0.70,0.73,0.76,0.76,4703,1479,3.18,41.14%,01/07/19 339 | ROKU,42.18,Call,45.00,02/15/19,39,2.77,2.96,3.15,3.00,729,230,3.17,74.28%,01/07/19 340 | DG,112.94,Put,100.00,02/15/19,39,0.65,0.73,0.80,0.70,1011,319,3.17,33.01%,01/07/19 341 | SQ,60.72,Call,60.50,01/11/19,4,1.77,1.82,1.87,1.77,826,261,3.16,65.10%,01/07/19 342 | JCP,1.28,Put,3.50,02/15/19,39,2.12,2.24,2.36,2.30,948,300,3.16,253.75%,01/07/19 343 | ROKU,42.18,Call,43.00,01/18/19,11,2.03,2.11,2.18,2.14,2063,654,3.15,85.26%,01/07/19 344 | AAPL,147.93,Call,146.00,01/11/19,4,3.40,3.5,3.60,3.48,3079,981,3.14,38.47%,01/07/19 345 | AMD,20.57,Call,20.50,01/11/19,4,0.87,0.88,0.88,0.87,8734,2783,3.14,96.97%,01/07/19 346 | C,55.61,Call,57.00,01/11/19,4,0.27,0.3,0.33,0.34,1856,594,3.12,36.44%,01/07/19 347 | AAPL,147.93,Call,148.00,01/11/19,4,2.19,2.29,2.39,2.31,14213,4573,3.11,37.57%,01/07/19 348 | JPM,100.76,Put,100.00,01/11/19,4,0.86,0.89,0.92,0.85,836,270,3.1,28.75%,01/07/19 349 | IP,42.77,Call,50.00,07/19/19,193,0.89,0.94,0.98,1.02,1260,407,3.1,24.70%,01/07/19 350 | CELG,87.52,Call,90.00,01/11/19,4,0.21,0.31,0.40,0.26,672,219,3.07,28.76%,01/07/19 351 | AAPL,147.93,Put,141.00,01/18/19,11,1.16,1.19,1.22,1.18,781,254,3.07,36.83%,01/07/19 352 | FDX,166.73,Put,152.50,01/18/19,11,0.41,0.44,0.47,0.45,1075,350,3.07,38.79%,01/07/19 353 | BABA,143.1,Put,143.00,01/11/19,4,2.48,2.54,2.60,2.36,548,179,3.06,40.73%,01/07/19 354 | TEVA,17.67,Call,19.00,06/21/19,165,1.68,1.78,1.87,1.86,608,199,3.06,48.53%,01/07/19 355 | MA,191.22,Call,195.00,01/11/19,4,1.01,1.11,1.20,1.25,753,246,3.06,33.65%,01/07/19 356 | BMY,48.41,Call,53.00,01/18/19,11,0.10,0.14,0.18,0.17,3002,985,3.05,40.46%,01/07/19 357 | GOOG,1068.39,Call,1100.00,01/11/19,4,2.85,3.43,4.00,3.28,862,284,3.04,29.91%,01/07/19 358 | NVDA,143.4,Call,147.00,01/11/19,4,2.30,2.36,2.42,2.50,1657,545,3.04,66.47%,01/07/19 359 | TRN,21.66,Call,32.00,01/18/19,11,0.20,1.13,2.05,0.40,500,165,3.03,178.06%,01/07/19 360 | BA,328.11,Call,350.00,01/11/19,4,0.12,0.15,0.18,0.16,560,187,2.99,33.64%,01/07/19 361 | FDX,166.73,Call,165.00,01/25/19,18,5.45,5.65,5.85,5.72,679,227,2.99,31.80%,01/07/19 362 | EXEL,21.9,Call,37.00,01/17/20,375,1.60,2.3,3.00,1.80,503,169,2.98,58.02%,01/07/19 363 | TXN,94.5,Call,120.00,01/17/20,375,2.62,2.76,2.90,2.72,2001,672,2.98,23.85%,01/07/19 364 | ULTA,271,Call,285.00,01/18/19,11,2.15,2.43,2.70,2.43,504,170,2.96,38.18%,01/07/19 365 | MU,34,Put,32.50,01/11/19,4,0.30,0.31,0.31,0.30,1436,486,2.95,61.26%,01/07/19 366 | LW,70.55,Put,70.00,01/18/19,11,1.00,1.13,1.25,1.11,2089,707,2.95,28.68%,01/07/19 367 | NVDA,143.4,Call,142.00,01/11/19,4,4.55,4.7,4.85,4.73,3332,1129,2.95,66.55%,01/07/19 368 | BA,328.11,Put,310.00,01/11/19,4,0.73,0.82,0.91,0.84,890,303,2.94,45.28%,01/07/19 369 | MA,191.22,Call,115.00,01/18/19,11,75.90,76.23,76.55,77.10,1110,378,2.94,171.39%,01/07/19 370 | NVDA,143.4,Put,145.00,02/15/19,39,12.10,12.23,12.35,12.20,2375,811,2.93,62.01%,01/07/19 371 | NBR,2.66,Put,2.00,02/15/19,39,0.11,0.13,0.14,0.14,5007,1708,2.93,128.65%,01/07/19 372 | JPM,100.76,Call,104.00,01/11/19,4,0.16,0.18,0.20,0.19,1080,370,2.92,26.77%,01/07/19 373 | AMZN,1629.51,Call,1640.00,01/11/19,4,24.15,24.83,25.50,24.95,1504,515,2.92,43.46%,01/07/19 374 | FB,138.05,Put,136.00,01/11/19,4,1.38,1.49,1.59,1.50,2143,733,2.92,42.01%,01/07/19 375 | AMD,20.57,Call,22.50,01/11/19,4,0.21,0.22,0.22,0.22,2766,946,2.92,95.79%,01/07/19 376 | BUD,69.4,Put,60.00,03/15/19,67,0.64,0.75,0.86,0.87,3427,1174,2.92,36.16%,01/07/19 377 | BMY,48.41,Call,57.50,03/15/19,67,0.52,0.56,0.59,0.58,5085,1741,2.92,36.04%,01/07/19 378 | AXL,12.27,Put,12.00,01/18/19,11,0.35,0.4,0.45,0.40,1293,445,2.91,62.95%,01/07/19 379 | NFLX,315.34,Call,307.50,01/11/19,4,12.35,12.7,13.05,13.70,1369,471,2.91,70.68%,01/07/19 380 | AAPL,147.93,Call,141.00,01/11/19,4,7.30,7.5,7.70,7.38,659,227,2.9,40.99%,01/07/19 381 | NVDA,143.4,Put,125.00,01/11/19,4,0.11,0.13,0.15,0.12,1696,587,2.89,70.56%,01/07/19 382 | CGC,28.9,Call,31.50,01/11/19,4,0.09,0.11,0.12,0.10,1035,359,2.88,64.75%,01/07/19 383 | V,136.06,Put,135.00,02/15/19,39,4.50,4.6,4.70,4.51,575,202,2.85,29.60%,01/07/19 384 | AMZN,1629.51,Call,1590.00,01/11/19,4,54.00,54.78,55.55,54.00,860,302,2.85,44.35%,01/07/19 385 | AAPL,147.93,Put,132.00,01/11/19,4,0.05,0.06,0.06,0.06,1284,450,2.85,53.56%,01/07/19 386 | ADM,41.92,Call,45.00,01/18/19,11,0.08,0.1,0.11,0.09,9213,3232,2.85,29.70%,01/07/19 387 | UTX,106.97,Call,120.00,01/17/20,375,5.50,5.78,6.05,5.95,720,254,2.83,22.11%,01/07/19 388 | ROKU,42.18,Call,38.50,01/11/19,4,4.10,4.18,4.25,4.16,764,270,2.83,102.13%,01/07/19 389 | TEVA,17.67,Put,17.00,01/11/19,4,0.15,0.16,0.17,0.16,953,337,2.83,57.04%,01/07/19 390 | MU,34,Call,34.00,02/01/19,25,1.86,1.91,1.96,1.91,578,205,2.82,52.92%,01/07/19 391 | CRM,142.22,Call,142.00,01/11/19,4,2.37,2.51,2.65,2.66,617,219,2.82,42.55%,01/07/19 392 | BABA,143.1,Put,141.00,01/18/19,11,2.94,3,3.05,2.92,989,351,2.82,40.01%,01/07/19 393 | MA,191.22,Call,110.00,01/18/19,11,81.00,81.28,81.55,82.10,1200,425,2.82,184.42%,01/07/19 394 | NVDA,143.4,Put,135.00,01/11/19,4,1.05,1.12,1.19,1.07,1473,523,2.82,67.66%,01/07/19 395 | TSLA,334.96,Call,360.00,01/11/19,4,1.02,1.09,1.15,1.11,2145,761,2.82,56.35%,01/07/19 396 | AAL,32.95,Call,33.50,01/11/19,4,0.47,0.5,0.53,0.63,1506,536,2.81,62.95%,01/07/19 397 | NVDA,143.4,Call,143.00,01/11/19,4,4.05,4.15,4.25,4.20,1894,675,2.81,66.45%,01/07/19 398 | KR,27.92,Put,30.00,04/18/19,101,3.10,3.15,3.20,3.15,851,304,2.8,34.89%,01/07/19 399 | CRM,142.22,Call,145.00,01/11/19,4,1.16,1.21,1.25,1.25,972,348,2.79,39.52%,01/07/19 400 | NRP,38.61,Put,35.00,02/15/19,39,0.95,1.05,1.15,1.15,751,270,2.78,54.32%,01/07/19 401 | FCAU,15.18,Call,20.00,06/21/19,165,0.20,0.28,0.35,0.28,1566,563,2.78,35.39%,01/07/19 402 | AMZN,1629.51,Call,1615.00,01/11/19,4,37.10,38.03,38.95,38.45,726,263,2.76,44.79%,01/07/19 403 | WFC,47.64,Put,45.00,01/11/19,4,0.06,0.07,0.08,0.06,1003,363,2.76,37.76%,01/07/19 404 | BABA,143.1,Put,139.00,01/11/19,4,1.08,1.12,1.16,1.08,1289,467,2.76,45.06%,01/07/19 405 | GE,8.74,Call,9.50,01/25/19,18,0.13,0.14,0.15,0.14,2657,962,2.76,50.76%,01/07/19 406 | NVDA,143.4,Call,140.00,01/11/19,4,5.75,5.9,6.05,5.94,6089,2207,2.76,67.32%,01/07/19 407 | NFLX,315.34,Call,305.00,01/11/19,4,14.20,14.5,14.80,14.58,2525,917,2.75,64.42%,01/07/19 408 | AMZN,1629.51,Call,1600.00,01/11/19,4,46.45,47.5,48.55,47.62,3781,1373,2.75,44.89%,01/07/19 409 | DLTR,97.96,Call,100.00,05/17/19,130,6.20,6.45,6.70,6.40,720,263,2.74,29.39%,01/07/19 410 | FB,138.05,Put,137.00,01/11/19,4,1.72,1.84,1.95,1.70,3447,1263,2.73,38.39%,01/07/19 411 | PEP,109.53,Call,110.00,03/15/19,67,3.75,3.8,3.85,3.88,542,199,2.72,20.39%,01/07/19 412 | NVDA,143.4,Put,141.00,01/11/19,4,2.72,2.79,2.86,2.60,615,226,2.72,62.24%,01/07/19 413 | JNJ,127.01,Put,120.00,01/11/19,4,0.11,0.14,0.16,0.13,774,285,2.72,35.90%,01/07/19 414 | AMD,20.57,Call,20.00,02/01/19,25,2.13,2.23,2.33,2.23,1236,456,2.71,90.45%,01/07/19 415 | AMD,20.57,Call,23.00,01/11/19,4,0.13,0.14,0.14,0.14,3374,1243,2.71,94.45%,01/07/19 416 | TWTR,31.34,Put,28.00,01/11/19,4,0.05,0.06,0.07,0.07,2113,786,2.69,73.11%,01/07/19 417 | NVDA,143.4,Call,150.00,02/15/19,39,8.70,8.8,8.90,9.13,3154,1172,2.69,62.65%,01/07/19 418 | CPE,7.89,Call,8.00,01/18/19,11,0.25,0.3,0.35,0.30,1133,423,2.68,63.49%,01/07/19 419 | TWTR,31.34,Put,30.00,01/11/19,4,0.28,0.29,0.29,0.29,1469,548,2.68,61.53%,01/07/19 420 | GE,8.74,Call,10.00,02/01/19,25,0.14,0.16,0.17,0.17,1568,584,2.68,61.09%,01/07/19 421 | PHM,28.21,Call,27.50,01/18/19,11,1.07,1.15,1.23,1.03,625,234,2.67,30.68%,01/07/19 422 | X,20.45,Put,20.00,01/11/19,4,0.34,0.36,0.37,0.35,1658,622,2.67,64.94%,01/07/19 423 | SNAP,6.21,Call,6.00,01/11/19,4,0.28,0.29,0.29,0.28,6242,2339,2.67,59.22%,01/07/19 424 | AMZN,1629.51,Call,1750.00,01/11/19,4,1.98,2.19,2.40,2.25,1444,543,2.66,44.82%,01/07/19 425 | MA,191.22,Call,130.00,01/18/19,11,60.75,61.2,61.65,62.10,3002,1137,2.64,135.20%,01/07/19 426 | KO,46.95,Call,47.00,01/11/19,4,0.36,0.4,0.43,0.42,656,249,2.63,22.28%,01/07/19 427 | PBR,15.06,Call,15.50,01/11/19,4,0.13,0.15,0.17,0.16,1004,382,2.63,52.25%,01/07/19 428 | CDNS,43.42,Put,43.00,02/15/19,39,1.55,1.68,1.80,1.50,500,191,2.62,31.38%,01/07/19 429 | SQ,60.72,Call,63.00,01/11/19,4,0.76,0.79,0.81,0.83,735,281,2.62,67.00%,01/07/19 430 | VZ,56.72,Call,57.50,01/11/19,4,0.08,0.1,0.12,0.09,907,349,2.6,14.47%,01/07/19 431 | TSLA,334.96,Call,335.00,01/11/19,4,7.70,7.95,8.20,7.85,3222,1238,2.6,55.88%,01/07/19 432 | BX,31.13,Call,34.00,02/15/19,39,0.36,0.4,0.43,0.40,683,264,2.59,32.03%,01/07/19 433 | PCG,18.95,Put,20.00,02/15/19,39,2.95,3.03,3.10,3.05,779,302,2.58,100.10%,01/07/19 434 | BA,328.11,Call,340.00,01/11/19,4,0.95,1.05,1.15,1.05,1133,439,2.58,34.50%,01/07/19 435 | PLUG,1.53,Call,1.50,01/11/19,4,0.07,0.09,0.10,0.09,1802,700,2.57,116.66%,01/07/19 436 | JD,22.76,Call,18.00,03/15/19,67,5.35,5.38,5.40,5.35,6125,2385,2.57,60.22%,01/07/19 437 | CLF,8.73,Call,8.50,02/01/19,25,0.71,0.75,0.79,0.72,872,341,2.56,65.53%,01/07/19 438 | TSLA,334.96,Call,337.50,01/11/19,4,6.50,6.65,6.80,6.80,1205,470,2.56,56.68%,01/07/19 439 | BABA,143.1,Put,140.00,01/11/19,4,1.35,1.4,1.44,1.35,3307,1291,2.56,44.48%,01/07/19 440 | CGC,28.9,Call,30.00,01/11/19,4,0.28,0.32,0.35,0.33,1217,480,2.54,61.24%,01/07/19 441 | X,20.45,Call,21.00,01/11/19,4,0.31,0.33,0.35,0.35,2315,910,2.54,67.23%,01/07/19 442 | MIC,40.04,Call,45.00,04/18/19,101,0.75,0.8,0.85,0.75,786,311,2.53,26.74%,01/07/19 443 | VZ,56.72,Put,57.00,01/18/19,11,1.27,1.31,1.34,1.28,517,205,2.52,29.52%,01/07/19 444 | CGC,28.9,Call,40.00,03/15/19,67,0.49,0.54,0.58,0.54,594,236,2.52,63.44%,01/07/19 445 | BA,328.11,Call,335.00,01/11/19,4,2.14,2.24,2.34,2.25,765,304,2.52,35.50%,01/07/19 446 | V,136.06,Call,142.00,01/11/19,4,0.03,0.1,0.17,0.12,529,211,2.51,27.26%,01/07/19 447 | NVDA,143.4,Put,145.00,01/11/19,4,4.50,4.65,4.80,4.57,958,383,2.5,62.17%,01/07/19 448 | FB,138.05,Call,141.00,01/11/19,4,0.95,1.01,1.07,0.99,2479,992,2.5,36.65%,01/07/19 449 | NVDA,143.4,Call,152.50,01/18/19,11,2.40,2.46,2.51,2.52,1666,668,2.49,58.24%,01/07/19 450 | GE,8.74,Put,8.50,01/18/19,11,0.22,0.23,0.24,0.23,3902,1566,2.49,56.93%,01/07/19 451 | HES,47.88,Put,27.50,01/18/19,11,0.00,0.04,0.07,0.02,525,212,2.48,131.29%,01/07/19 452 | MA,191.22,Call,120.00,01/18/19,11,71.00,71.3,71.60,72.15,14413,5816,2.48,160.86%,01/07/19 453 | AAPL,147.93,Call,155.00,01/11/19,4,0.25,0.27,0.28,0.26,19291,7780,2.48,34.58%,01/07/19 454 | NVDA,143.4,Put,133.00,01/18/19,11,2.08,2.13,2.17,2.10,630,256,2.46,62.09%,01/07/19 455 | HON,135.37,Call,138.00,01/25/19,18,1.51,1.63,1.74,1.60,751,305,2.46,21.80%,01/07/19 456 | DB,8.7,Call,9.00,07/19/19,193,0.95,1,1.04,0.98,754,307,2.46,41.69%,01/07/19 457 | TLRY,71.9,Call,55.00,06/21/19,165,15.55,17.43,19.30,17.04,878,359,2.45,9.08%,01/07/19 458 | ROKU,42.18,Call,45.00,01/18/19,11,1.32,1.39,1.45,1.36,3249,1327,2.45,83.24%,01/07/19 459 | MU,34,Call,34.00,01/11/19,4,0.80,0.82,0.83,0.81,6576,2680,2.45,56.67%,01/07/19 460 | IQ,17.22,Call,17.00,01/11/19,4,0.59,0.62,0.64,0.59,1760,725,2.43,65.60%,01/07/19 461 | ZNGA,4.07,Call,4.50,06/21/19,165,0.25,0.27,0.28,0.27,1772,728,2.43,37.79%,01/07/19 462 | MDT,82.45,Put,75.00,02/15/19,39,0.72,0.81,0.90,0.78,1086,448,2.42,32.13%,01/07/19 463 | TWLO,96.98,Put,88.00,01/11/19,4,0.51,0.59,0.66,0.60,672,279,2.41,86.48%,01/07/19 464 | JNJ,127.01,Call,128.00,01/11/19,4,0.89,0.96,1.03,1.15,1051,437,2.41,29.66%,01/07/19 465 | PBR,15.06,Call,15.50,01/18/19,11,0.27,0.29,0.31,0.29,2808,1164,2.41,44.71%,01/07/19 466 | MA,191.22,Call,125.00,01/18/19,11,65.65,66.13,66.60,67.10,3600,1494,2.41,146.84%,01/07/19 467 | UAA,18.67,Call,20.00,02/15/19,39,0.96,0.99,1.02,1.00,524,218,2.4,61.77%,01/07/19 468 | INTC,47.44,Call,60.00,07/19/19,193,0.55,0.59,0.62,0.59,1035,431,2.4,25.76%,01/07/19 469 | LCI,7.32,Call,7.50,01/18/19,11,0.35,0.4,0.45,0.42,854,357,2.39,97.96%,01/07/19 470 | MU,34,Put,31.00,02/15/19,39,1.09,1.1,1.10,1.10,3814,1594,2.39,55.14%,01/07/19 471 | TSLA,334.96,Call,327.50,01/11/19,4,11.85,12.3,12.75,12.25,651,274,2.38,57.10%,01/07/19 472 | T,30.89,Call,32.00,01/25/19,18,0.11,0.14,0.17,0.18,1327,557,2.38,20.03%,01/07/19 473 | FDX,166.73,Put,150.00,01/18/19,11,0.27,0.3,0.33,0.31,2134,898,2.38,40.40%,01/07/19 474 | AMD,20.57,Call,21.50,01/18/19,11,0.72,0.74,0.76,0.74,3070,1288,2.38,78.21%,01/07/19 475 | X,20.45,Call,22.00,01/11/19,4,0.11,0.13,0.14,0.13,3971,1666,2.38,69.76%,01/07/19 476 | YY,65.27,Put,60.00,02/15/19,39,1.95,2.05,2.15,2.13,513,217,2.36,53.10%,01/07/19 477 | CAT,128.23,Call,134.00,01/11/19,4,0.39,0.44,0.49,0.40,602,255,2.36,39.34%,01/07/19 478 | PYPL,86.93,Call,86.00,01/11/19,4,1.87,1.92,1.96,1.98,697,295,2.36,40.19%,01/07/19 479 | AAPL,147.93,Put,139.00,01/11/19,4,0.25,0.27,0.28,0.27,3882,1645,2.36,44.21%,01/07/19 480 | MRK,75.43,Put,67.00,02/22/19,46,0.00,2,4.00,0.42,610,260,2.35,29.00%,01/07/19 481 | NEM,33.97,Put,34.00,03/15/19,67,1.76,1.79,1.81,1.73,1023,436,2.35,31.21%,01/07/19 482 | ROKU,42.18,Call,42.00,01/18/19,11,2.56,2.61,2.66,2.60,2155,918,2.35,85.52%,01/07/19 483 | AAPL,147.93,Call,147.00,01/18/19,11,4.00,4.1,4.20,4.10,2689,1145,2.35,34.72%,01/07/19 484 | NNBR,7.5,Call,7.50,01/18/19,11,0.30,0.38,0.45,0.35,633,271,2.34,66.80%,01/07/19 485 | NS,23.18,Call,25.00,01/18/19,11,0.05,0.1,0.15,0.12,651,278,2.34,39.97%,01/07/19 486 | FB,138.05,Call,140.00,01/11/19,4,1.24,1.34,1.43,1.49,12315,5293,2.33,39.95%,01/07/19 487 | ZUO,19.49,Put,15.00,01/17/20,375,2.50,2.63,2.75,2.50,501,216,2.32,67.91%,01/07/19 488 | DIS,110.56,Call,114.00,01/11/19,4,0.10,0.13,0.15,0.15,508,220,2.31,23.73%,01/07/19 489 | X,20.45,Put,20.50,01/11/19,4,0.54,0.57,0.59,0.55,1106,479,2.31,61.78%,01/07/19 490 | NFLX,315.34,Put,285.00,01/11/19,4,0.78,0.85,0.92,0.84,1482,642,2.31,70.17%,01/07/19 491 | PBR,15.06,Call,17.00,01/25/19,18,0.08,0.1,0.11,0.15,1501,650,2.31,52.81%,01/07/19 492 | BABA,143.1,Call,143.00,01/11/19,4,2.70,2.75,2.80,2.86,1763,764,2.31,46.65%,01/07/19 493 | NVDA,143.4,Call,144.00,01/18/19,11,5.60,5.68,5.75,5.90,565,246,2.3,61.68%,01/07/19 494 | WFC,47.64,Put,46.00,01/18/19,11,0.60,0.63,0.65,0.61,1528,665,2.3,39.46%,01/07/19 495 | XOM,71.52,Put,67.50,03/15/19,67,1.68,1.73,1.77,1.66,2148,932,2.3,28.85%,01/07/19 496 | FB,138.05,Call,140.00,02/01/19,25,5.65,5.9,6.15,5.82,2332,1014,2.3,45.67%,01/07/19 497 | MU,34,Put,33.50,01/11/19,4,0.58,0.59,0.60,0.58,1498,658,2.28,57.48%,01/07/19 498 | FND,29.26,Call,30.00,01/18/19,11,0.90,1.18,1.45,1.20,1970,869,2.27,74.66%,01/07/19 499 | TSLA,334.96,Call,360.00,02/01/19,25,9.50,10.2,10.90,10.10,533,236,2.26,55.09%,01/07/19 500 | NVDA,143.4,Put,133.00,01/11/19,4,0.73,0.76,0.79,0.70,588,260,2.26,67.20%,01/07/19 501 | GRPN,3.5,Call,4.00,07/19/19,193,0.29,0.32,0.34,0.32,1652,730,2.26,47.48%,01/07/19 502 | CAT,128.23,Put,65.00,02/15/19,39,0.00,0.02,0.04,0.04,1696,750,2.26,81.56%,01/07/19 503 | WDC,38.48,Call,42.00,01/18/19,11,0.27,0.29,0.31,0.26,777,345,2.25,48.10%,01/07/19 504 | BA,328.11,Call,337.50,01/11/19,4,1.46,1.55,1.63,1.59,1089,483,2.25,35.21%,01/07/19 505 | T,30.89,Call,31.50,01/25/19,18,0.20,0.24,0.27,0.29,2257,1001,2.25,18.99%,01/07/19 506 | RCL,101.83,Call,110.00,02/15/19,39,2.40,2.54,2.68,2.60,5419,2404,2.25,41.19%,01/07/19 507 | SYF,25.37,Call,25.50,01/18/19,11,0.55,0.7,0.85,0.75,538,240,2.24,45.58%,01/07/19 508 | FCX,11,Put,11.00,01/11/19,4,0.24,0.26,0.27,0.28,810,362,2.24,61.36%,01/07/19 509 | T,30.89,Call,31.00,01/11/19,4,0.15,0.17,0.18,0.18,5870,2625,2.24,17.52%,01/07/19 510 | ALXN,107.94,Put,105.00,01/17/20,375,14.30,14.75,15.20,14.74,510,229,2.23,41.88%,01/07/19 511 | CAT,128.23,Call,131.00,01/11/19,4,1.08,1.16,1.24,1.10,674,304,2.22,40.65%,01/07/19 512 | BCS,7.96,Call,6.00,03/15/19,67,2.00,2.08,2.15,2.05,1000,450,2.22,49.25%,01/07/19 513 | DRYS,6.75,Call,7.50,02/15/19,39,0.25,0.28,0.30,0.30,1668,754,2.21,64.19%,01/07/19 514 | ET,14.46,Put,14.00,02/15/19,39,0.52,0.55,0.57,0.54,2236,1013,2.21,41.38%,01/07/19 515 | V,136.06,Call,137.00,01/11/19,4,1.20,1.32,1.43,1.35,977,445,2.2,30.90%,01/07/19 516 | AAPL,147.93,Put,142.00,01/11/19,4,0.53,0.57,0.60,0.59,3821,1740,2.2,41.83%,01/07/19 517 | TSLA,334.96,Call,330.00,01/11/19,4,10.45,10.73,11.00,10.70,4564,2074,2.2,56.98%,01/07/19 518 | AMRN,14.07,Call,14.50,01/18/19,11,0.54,0.59,0.64,0.52,598,273,2.19,71.76%,01/07/19 519 | BAC,25.56,Call,23.50,02/01/19,25,2.30,2.37,2.43,2.39,523,240,2.18,39.23%,01/07/19 520 | BAC,25.56,Call,26.50,02/08/19,32,0.55,0.57,0.59,0.59,581,267,2.18,31.39%,01/07/19 521 | MA,191.22,Call,50.00,01/18/19,11,140.70,141.13,141.55,142.05,750,344,2.18,412.36%,01/07/19 522 | AG,6.06,Put,6.00,02/15/19,39,0.35,0.4,0.45,0.40,500,230,2.17,55.92%,01/07/19 523 | ETN,68.73,Call,72.50,02/15/19,39,1.00,1.08,1.15,1.30,508,234,2.17,29.49%,01/07/19 524 | MRK,75.43,Put,67.50,02/22/19,46,0.00,2.03,4.05,0.45,600,277,2.17,28.29%,01/07/19 525 | AMZN,1629.51,Call,1635.00,01/11/19,4,26.75,27.35,27.95,28.50,653,301,2.17,45.36%,01/07/19 526 | OSTK,15.28,Call,17.00,01/18/19,11,0.40,0.45,0.50,0.45,813,374,2.17,98.51%,01/07/19 527 | CTL,16.3,Put,16.50,01/18/19,11,0.50,0.55,0.60,0.50,1144,528,2.17,35.29%,01/07/19 528 | BAC,25.56,Call,26.00,01/25/19,18,0.53,0.56,0.58,0.56,10692,4936,2.17,32.59%,01/07/19 529 | JPM,100.76,Call,101.00,01/11/19,4,1.08,1.11,1.14,1.11,1288,599,2.15,28.74%,01/07/19 530 | SQ,60.72,Put,59.00,01/18/19,11,1.86,1.91,1.95,1.82,542,253,2.14,63.05%,01/07/19 531 | BABA,143.1,Call,148.00,01/18/19,11,1.96,2.01,2.05,2.03,973,454,2.14,39.37%,01/07/19 532 | FB,138.05,Call,137.00,01/11/19,4,2.77,2.94,3.10,2.78,3884,1817,2.14,38.13%,01/07/19 533 | BABA,143.1,Call,147.00,01/11/19,4,1.07,1.11,1.15,1.17,948,446,2.13,44.00%,01/07/19 534 | BABA,143.1,Call,144.00,01/18/19,11,3.55,3.63,3.70,3.73,1133,531,2.13,41.31%,01/07/19 535 | PCG,18.95,Put,19.00,01/18/19,11,1.60,1.73,1.85,1.60,1230,577,2.13,120.77%,01/07/19 536 | FDX,166.73,Call,167.50,01/11/19,4,1.97,2.06,2.14,2.00,705,332,2.12,33.54%,01/07/19 537 | T,30.89,Put,30.50,01/18/19,11,0.53,0.56,0.59,0.54,2422,1142,2.12,34.35%,01/07/19 538 | PE,18.12,Call,20.00,03/15/19,67,0.95,1,1.05,1.03,3953,1868,2.12,54.86%,01/07/19 539 | AMRN,14.07,Call,14.50,01/11/19,4,0.20,0.27,0.33,0.32,719,341,2.11,84.59%,01/07/19 540 | TWTR,31.34,Call,39.00,02/15/19,39,0.48,0.49,0.50,0.49,727,346,2.1,60.82%,01/07/19 541 | SQ,60.72,Call,62.50,01/11/19,4,0.91,0.94,0.97,0.92,1223,583,2.1,64.27%,01/07/19 542 | INTC,47.44,Put,46.50,01/18/19,11,0.69,0.71,0.73,0.68,1326,632,2.1,33.90%,01/07/19 543 | TSLA,334.96,Put,290.00,08/16/19,221,36.65,36.93,37.20,36.75,602,288,2.09,61.45%,01/07/19 544 | RIG,8.28,Call,8.50,01/11/19,4,0.14,0.15,0.16,0.15,1607,769,2.09,69.48%,01/07/19 545 | MSFT,102.06,Call,102.00,01/11/19,4,1.55,1.6,1.64,1.60,5511,2632,2.09,36.45%,01/07/19 546 | MSFT,102.06,Call,106.00,01/11/19,4,0.23,0.25,0.26,0.27,3931,1893,2.08,33.70%,01/07/19 547 | HUN,20.72,Call,23.00,02/15/19,39,0.30,0.35,0.40,0.38,506,245,2.07,41.04%,01/07/19 548 | CDNS,43.42,Call,43.00,02/15/19,39,2.15,2.25,2.35,2.20,510,246,2.07,33.95%,01/07/19 549 | IQ,17.22,Call,18.00,01/18/19,11,0.43,0.45,0.46,0.47,719,347,2.07,65.19%,01/07/19 550 | MSFT,102.06,Put,80.00,07/19/19,193,1.91,2.06,2.21,1.98,1010,488,2.07,36.00%,01/07/19 551 | XOM,71.52,Put,71.00,01/11/19,4,0.54,0.57,0.59,0.51,564,274,2.06,25.22%,01/07/19 552 | PCG,18.95,Put,18.00,03/15/19,67,2.65,2.83,3.00,2.80,1120,544,2.06,105.63%,01/07/19 553 | BABA,143.1,Put,137.00,01/11/19,4,0.65,0.7,0.75,0.63,1714,831,2.06,45.14%,01/07/19 554 | GPRO,4.63,Call,5.00,02/15/19,39,0.38,0.41,0.44,0.41,714,348,2.05,91.25%,01/07/19 555 | TLRY,71.9,Call,70.00,01/11/19,4,2.37,2.76,3.15,2.95,763,373,2.05,61.79%,01/07/19 556 | CRON,12.4,Put,11.50,01/11/19,4,0.12,0.13,0.14,0.13,1437,706,2.04,88.78%,01/07/19 557 | C,55.61,Call,65.00,03/15/19,67,0.29,0.31,0.33,0.31,10500,5159,2.04,26.90%,01/07/19 558 | AAPL,147.93,Call,140.00,01/11/19,4,8.20,8.38,8.55,8.25,1941,954,2.03,40.53%,01/07/19 559 | NVDA,143.4,Put,130.00,01/11/19,4,0.39,0.42,0.45,0.39,2677,1316,2.03,68.90%,01/07/19 560 | MA,191.22,Call,135.00,01/18/19,11,55.60,56.13,56.65,57.00,728,360,2.02,120.45%,01/07/19 561 | INTC,47.44,Put,47.00,01/11/19,4,0.57,0.6,0.62,0.60,1478,733,2.02,40.95%,01/07/19 562 | BMY,48.41,Call,52.50,04/18/19,101,1.90,2.03,2.16,2.10,1107,551,2.01,34.59%,01/07/19 563 | AAPL,147.93,Call,149.00,01/11/19,4,1.78,1.82,1.85,1.80,5618,2798,2.01,36.69%,01/07/19 564 | SYF,25.37,Call,25.50,01/11/19,4,0.30,0.38,0.45,0.50,629,315,2,52.61%,01/07/19 565 | AAPL,147.93,Call,147.00,02/01/19,25,6.35,6.45,6.55,6.40,850,424,2,37.49%,01/07/19 566 | ADNT,16.37,Put,19.00,02/15/19,39,3.10,3.25,3.40,4.30,1000,500,2,124.06%,01/07/19 567 | AMD,20.57,Call,19.50,01/18/19,11,1.71,1.75,1.78,1.78,2464,1229,2,83.42%,01/07/19 568 | AAPL,147.93,Put,130.00,01/11/19,4,0.03,0.04,0.04,0.04,3292,1646,2,56.27%,01/07/19 569 | AAPL,147.93,Call,148.00,01/18/19,11,3.45,3.55,3.65,3.55,3388,1698,2,34.36%,01/07/19 570 | TSLA,334.96,Put,300.00,01/11/19,4,0.55,0.57,0.59,0.57,3710,1857,2,67.62%,01/07/19 571 | TSLA,334.96,Put,302.50,01/11/19,4,0.64,0.69,0.74,0.69,584,294,1.99,66.36%,01/07/19 572 | PODD,74.21,Call,80.00,02/15/19,39,2.50,2.8,3.10,2.65,597,300,1.99,49.20%,01/07/19 573 | AKS,2.57,Call,3.00,01/11/19,4,0.01,0.02,0.02,0.02,831,418,1.99,122.88%,01/07/19 574 | FB,138.05,Put,135.00,01/11/19,4,1.07,1.18,1.29,1.21,3207,1608,1.99,43.03%,01/07/19 575 | AMZN,1629.51,Call,1660.00,01/11/19,4,15.45,16.63,17.80,16.85,874,441,1.98,42.86%,01/07/19 576 | CVS,68.61,Put,75.00,05/17/19,130,8.70,8.8,8.90,8.60,1173,591,1.98,31.47%,01/07/19 577 | AAPL,147.93,Put,150.00,01/11/19,4,3.30,3.38,3.45,3.40,4078,2056,1.98,36.12%,01/07/19 578 | VALE,13.83,Call,15.50,01/18/19,11,0.04,0.05,0.06,0.06,501,254,1.97,50.59%,01/07/19 579 | HUN,20.72,Call,22.00,02/15/19,39,0.55,0.63,0.70,0.69,525,267,1.97,43.17%,01/07/19 580 | AAPL,147.93,Put,134.00,01/11/19,4,0.07,0.08,0.08,0.08,616,313,1.97,49.76%,01/07/19 581 | DDD,10.84,Call,11.00,01/18/19,11,0.37,0.41,0.45,0.42,1169,597,1.96,65.04%,01/07/19 582 | INTC,47.44,Call,49.00,01/11/19,4,0.18,0.2,0.22,0.22,2902,1484,1.96,37.42%,01/07/19 583 | SQ,60.72,Call,59.00,01/11/19,4,2.64,2.71,2.78,2.70,977,501,1.95,67.63%,01/07/19 584 | AAPL,147.93,Put,147.00,01/18/19,11,2.94,3.05,3.15,3.05,4950,2535,1.95,34.84%,01/07/19 585 | NVDA,143.4,Call,145.00,02/15/19,39,10.95,11.08,11.20,11.12,3240,1671,1.94,62.32%,01/07/19 586 | MU,34,Call,35.00,01/11/19,4,0.39,0.4,0.41,0.40,4517,2334,1.94,55.47%,01/07/19 587 | TME,12.81,Put,12.00,02/15/19,39,0.80,0.88,0.95,0.90,522,271,1.93,79.48%,01/07/19 588 | WFC,47.64,Call,48.50,01/11/19,4,0.25,0.28,0.31,0.30,1010,525,1.92,31.63%,01/07/19 589 | SQ,60.72,Call,65.00,01/11/19,4,0.34,0.36,0.38,0.39,1301,677,1.92,66.94%,01/07/19 590 | VZ,56.72,Put,56.50,01/18/19,11,0.97,1.01,1.04,0.93,650,341,1.91,27.05%,01/07/19 591 | TGT,69.68,Put,65.00,02/15/19,39,1.24,1.28,1.32,1.25,1178,616,1.91,35.39%,01/07/19 592 | DGX,82.64,Call,85.00,01/18/19,11,0.70,0.78,0.85,0.90,1775,927,1.91,31.34%,01/07/19 593 | DIS,110.56,Call,111.00,01/11/19,4,0.91,0.94,0.96,0.92,564,297,1.9,24.00%,01/07/19 594 | BA,328.11,Put,320.00,01/11/19,4,2.26,2.42,2.58,2.35,687,362,1.9,40.73%,01/07/19 595 | BBBY,12.08,Call,12.00,01/11/19,4,0.91,0.96,1.00,1.00,1056,557,1.9,190.76%,01/07/19 596 | AVGO,237.98,Call,270.00,04/18/19,101,5.90,6.05,6.20,6.05,3490,1838,1.9,32.00%,01/07/19 597 | MU,34,Call,36.50,01/11/19,4,0.10,0.12,0.13,0.10,1538,815,1.89,53.88%,01/07/19 598 | AMD,20.57,Call,20.00,01/11/19,4,1.15,1.16,1.16,1.16,14367,7600,1.89,99.28%,01/07/19 599 | JNJ,127.01,Call,130.00,01/11/19,4,0.35,0.36,0.37,0.35,1730,922,1.88,24.93%,01/07/19 600 | BABA,143.1,Put,136.00,01/11/19,4,0.53,0.56,0.59,0.50,566,303,1.87,46.15%,01/07/19 601 | ROKU,42.18,Call,46.00,01/18/19,11,1.03,1.1,1.16,1.10,1015,542,1.87,83.92%,01/07/19 602 | KKR,20.69,Put,20.00,01/18/19,11,0.30,0.33,0.35,0.35,2073,1106,1.87,45.67%,01/07/19 603 | CAT,128.23,Put,125.00,01/11/19,4,1.10,1.18,1.25,1.10,577,310,1.86,45.16%,01/07/19 604 | TWTR,31.34,Put,29.50,01/11/19,4,0.18,0.2,0.21,0.25,774,416,1.86,69.58%,01/07/19 605 | NVDA,143.4,Call,146.00,01/11/19,4,2.67,2.74,2.80,2.75,1607,865,1.86,64.46%,01/07/19 606 | IQ,17.22,Call,17.00,01/18/19,11,0.86,0.88,0.90,0.87,2289,1229,1.86,63.06%,01/07/19 607 | BIDU,162.6,Call,165.00,01/11/19,4,1.80,1.93,2.05,2.00,1327,719,1.85,44.30%,01/07/19 608 | NVDA,143.4,Call,140.00,01/25/19,18,8.85,9.05,9.25,9.27,958,520,1.84,58.45%,01/07/19 609 | TGT,69.68,Call,72.00,01/18/19,11,0.98,1.03,1.07,1.04,1143,623,1.83,40.09%,01/07/19 610 | AMAT,34.3,Call,35.00,02/15/19,39,1.71,1.75,1.78,1.83,700,385,1.82,46.85%,01/07/19 611 | MA,191.22,Call,140.00,01/18/19,11,50.60,51.13,51.65,52.15,2180,1200,1.82,114.57%,01/07/19 612 | BAC,25.56,Put,22.00,03/15/19,67,0.33,0.35,0.36,0.34,4924,2717,1.81,37.66%,01/07/19 613 | NVDA,143.4,Put,124.00,01/18/19,11,0.68,0.71,0.74,0.67,532,295,1.8,64.50%,01/07/19 614 | T,30.89,Call,32.00,01/11/19,4,0.02,0.03,0.03,0.03,1235,687,1.8,24.11%,01/07/19 615 | TSLA,334.96,Put,310.00,01/11/19,4,1.23,1.28,1.32,1.32,1875,1039,1.8,64.13%,01/07/19 616 | DDD,10.84,Call,11.00,01/11/19,4,0.17,0.23,0.28,0.26,574,320,1.79,72.91%,01/07/19 617 | GE,8.74,Put,9.00,02/15/19,39,0.75,0.77,0.78,0.75,847,473,1.79,54.41%,01/07/19 618 | TEVA,17.67,Put,17.50,01/11/19,4,0.29,0.32,0.34,0.29,922,515,1.79,50.57%,01/07/19 619 | CSX,62.45,Call,62.50,02/15/19,39,2.83,2.92,3.00,2.98,1301,727,1.79,35.73%,01/07/19 620 | X,20.45,Put,21.00,04/18/19,101,2.29,2.33,2.36,2.17,4095,2290,1.79,45.72%,01/07/19 621 | NFLX,315.34,Put,310.00,02/15/19,39,22.20,22.45,22.70,21.83,523,293,1.78,61.18%,01/07/19 622 | NFLX,315.34,Call,302.50,01/11/19,4,15.75,16.25,16.75,16.83,699,392,1.78,69.06%,01/07/19 623 | BIDU,162.6,Call,170.00,01/18/19,11,1.90,1.95,2.00,1.89,1876,1054,1.78,40.33%,01/07/19 624 | MSFT,102.06,Put,101.00,01/11/19,4,1.05,1.1,1.15,1.10,2613,1472,1.78,37.44%,01/07/19 625 | AABA,59.64,Call,65.00,02/15/19,39,0.81,0.92,1.02,1.00,569,322,1.77,35.42%,01/07/19 626 | AAPL,147.93,Put,125.00,02/01/19,25,0.40,0.5,0.60,0.58,573,323,1.77,46.04%,01/07/19 627 | NTNX,44.92,Call,42.50,04/18/19,101,6.80,6.95,7.10,7.00,605,342,1.77,60.53%,01/07/19 628 | FB,138.05,Put,134.00,01/11/19,4,0.88,0.93,0.98,0.94,1393,787,1.77,43.40%,01/07/19 629 | BABA,143.1,Call,150.00,02/01/19,25,3.90,3.98,4.05,4.05,1638,927,1.77,44.83%,01/07/19 630 | F,8.29,Put,8.50,01/18/19,11,0.35,0.36,0.37,0.36,1795,1012,1.77,42.28%,01/07/19 631 | MU,34,Put,31.00,04/18/19,101,2.20,2.24,2.27,2.18,6165,3485,1.77,52.82%,01/07/19 632 | PYPL,86.93,Call,87.50,01/11/19,4,1.04,1.08,1.12,1.17,548,314,1.75,39.11%,01/07/19 633 | MA,191.22,Call,145.00,01/18/19,11,46.00,46.33,46.65,47.15,1202,688,1.75,103.83%,01/07/19 634 | BMY,48.41,Put,43.00,06/21/19,165,2.00,2.08,2.15,1.95,2514,1439,1.75,35.40%,01/07/19 635 | AMD,20.57,Put,16.00,03/15/19,67,0.76,0.78,0.80,0.78,1395,800,1.74,78.78%,01/07/19 636 | C,55.61,Call,56.00,01/11/19,4,0.64,0.67,0.70,0.76,1816,1043,1.74,40.09%,01/07/19 637 | NFLX,315.34,Put,175.00,01/17/20,375,5.50,7.95,10.40,7.85,2520,1449,1.74,53.77%,01/07/19 638 | TEVA,17.67,Call,26.00,03/15/19,67,0.05,0.08,0.11,0.06,5213,2991,1.74,48.77%,01/07/19 639 | CHK,2.37,Call,2.50,01/11/19,4,0.03,0.04,0.05,0.04,5569,3209,1.74,88.83%,01/07/19 640 | BABA,143.1,Call,145.00,01/11/19,4,1.77,1.79,1.81,1.98,6199,3558,1.74,46.72%,01/07/19 641 | T,30.89,Put,31.00,01/11/19,4,0.69,0.72,0.74,0.64,905,524,1.73,45.57%,01/07/19 642 | ZUO,19.49,Call,25.00,06/21/19,165,1.55,1.63,1.70,1.66,1794,1040,1.73,62.96%,01/07/19 643 | SQ,60.72,Call,62.00,01/11/19,4,1.10,1.12,1.14,1.11,1059,617,1.72,64.98%,01/07/19 644 | MSFT,102.06,Put,99.50,01/11/19,4,0.63,0.67,0.70,0.65,815,478,1.71,38.70%,01/07/19 645 | NFLX,315.34,Put,280.00,01/11/19,4,0.50,0.55,0.60,0.55,3075,1799,1.71,72.18%,01/07/19 646 | CROX,29.17,Call,30.00,01/18/19,11,0.80,0.9,1.00,0.84,635,374,1.7,58.57%,01/07/19 647 | AAPL,147.93,Put,138.00,01/18/19,11,0.67,0.7,0.73,0.71,692,408,1.7,38.36%,01/07/19 648 | AAL,32.95,Call,33.00,01/11/19,4,0.70,0.74,0.78,0.92,917,539,1.7,68.25%,01/07/19 649 | BKS,7.57,Call,8.00,02/15/19,39,0.40,0.45,0.50,0.45,1781,1049,1.7,62.46%,01/07/19 650 | ADSK,132.72,Put,115.00,01/18/19,11,0.46,0.71,0.95,0.47,2765,1624,1.7,59.46%,01/07/19 651 | AMD,20.57,Put,18.50,01/11/19,4,0.18,0.19,0.19,0.19,5480,3233,1.7,105.07%,01/07/19 652 | MSFT,102.06,Call,103.00,01/11/19,4,1.05,1.11,1.16,1.07,5544,3257,1.7,34.55%,01/07/19 653 | TSLA,334.96,Call,357.50,01/11/19,4,1.28,1.34,1.40,1.39,727,430,1.69,56.17%,01/07/19 654 | NFLX,315.34,Put,275.00,01/11/19,4,0.30,0.38,0.45,0.34,2067,1223,1.69,73.61%,01/07/19 655 | FCAU,15.18,Put,10.00,01/17/20,375,0.35,0.4,0.45,0.40,19393,11456,1.69,42.59%,01/07/19 656 | SBUX,63.57,Put,63.00,01/18/19,11,0.80,0.83,0.86,0.76,701,418,1.68,23.82%,01/07/19 657 | HCHC,3.09,Call,5.00,08/16/19,221,0.20,0.33,0.45,0.35,500,300,1.67,84.25%,01/07/19 658 | PEP,109.53,Call,115.00,02/15/19,39,1.12,1.16,1.19,1.21,845,505,1.67,21.36%,01/07/19 659 | FB,138.05,Call,139.00,01/11/19,4,1.70,1.78,1.86,1.68,2624,1570,1.67,36.33%,01/07/19 660 | GE,8.74,Call,8.50,01/11/19,4,0.36,0.37,0.37,0.37,31787,19077,1.67,63.46%,01/07/19 661 | MS,41.71,Call,42.00,01/11/19,4,0.48,0.52,0.56,0.57,631,379,1.66,40.03%,01/07/19 662 | DAL,47.85,Call,50.00,01/11/19,4,0.09,0.12,0.14,0.16,677,408,1.66,40.22%,01/07/19 663 | DAL,47.85,Put,47.00,01/11/19,4,0.41,0.47,0.53,0.44,807,485,1.66,40.36%,01/07/19 664 | T,30.89,Put,29.50,01/18/19,11,0.20,0.21,0.22,0.22,1103,664,1.66,34.27%,01/07/19 665 | MU,34,Call,33.50,01/11/19,4,1.07,1.1,1.12,1.11,4237,2548,1.66,58.88%,01/07/19 666 | ADNT,16.37,Call,17.00,03/15/19,67,1.75,1.78,1.80,1.75,551,333,1.65,70.86%,01/07/19 667 | AMZN,1629.51,Call,1580.00,01/11/19,4,60.55,61.63,62.70,63.93,879,532,1.65,49.36%,01/07/19 668 | X,20.45,Put,19.50,01/11/19,4,0.20,0.22,0.23,0.20,1298,785,1.65,66.10%,01/07/19 669 | AAPL,147.93,Put,138.00,01/11/19,4,0.17,0.2,0.22,0.20,1778,1079,1.65,44.72%,01/07/19 670 | CELG,87.52,Put,75.00,01/15/21,739,4.65,5.83,7.00,5.25,564,343,1.64,26.62%,01/07/19 671 | DO,11.16,Put,10.00,06/21/19,165,1.20,1.23,1.26,1.24,3049,1859,1.64,64.92%,01/07/19 672 | JPM,100.76,Call,103.00,01/11/19,4,0.35,0.37,0.39,0.37,1223,752,1.63,27.09%,01/07/19 673 | X,20.45,Call,21.50,01/11/19,4,0.19,0.21,0.22,0.24,2634,1615,1.63,71.80%,01/07/19 674 | AMZN,1629.51,Put,1510.00,01/11/19,4,2.74,2.95,3.15,2.97,536,333,1.61,51.49%,01/07/19 675 | ROKU,42.18,Put,29.00,03/15/19,67,1.07,1.16,1.25,1.25,651,405,1.61,93.07%,01/07/19 676 | CRBP,7.8,Call,7.50,07/19/19,193,1.85,1.98,2.10,1.95,1031,639,1.61,79.84%,01/07/19 677 | SQ,60.72,Put,57.50,01/11/19,4,0.58,0.61,0.64,0.61,623,390,1.6,72.15%,01/07/19 678 | AAPL,147.93,Put,137.00,01/11/19,4,0.12,0.15,0.17,0.16,1142,712,1.6,46.06%,01/07/19 679 | BMY,48.41,Call,67.50,06/21/19,165,0.42,0.54,0.65,0.54,1736,1088,1.6,35.04%,01/07/19 680 | SGMS,19.66,Call,24.00,01/18/19,11,0.15,0.2,0.25,0.15,500,315,1.59,87.88%,01/07/19 681 | CGC,28.9,Call,29.00,01/11/19,4,0.62,0.67,0.72,0.66,995,627,1.59,58.27%,01/07/19 682 | NFLX,315.34,Call,300.00,01/11/19,4,17.65,18.18,18.70,18.60,3095,1942,1.59,68.62%,01/07/19 683 | NVDA,143.4,Call,142.00,01/18/19,11,6.60,6.73,6.85,6.77,624,396,1.58,60.52%,01/07/19 684 | KBH,21,Put,16.00,01/18/19,11,0.00,0.04,0.07,0.04,807,515,1.57,87.49%,01/07/19 685 | NVDA,143.4,Put,120.00,02/15/19,39,3.45,3.53,3.60,3.45,1813,1156,1.57,68.49%,01/07/19 686 | BBD,10.85,Put,11.00,03/15/19,67,0.80,0.82,0.83,0.80,672,432,1.56,40.55%,01/07/19 687 | NFLX,315.34,Put,287.50,01/11/19,4,0.96,1.04,1.11,0.93,724,464,1.56,67.27%,01/07/19 688 | TLRY,71.9,Call,72.00,01/11/19,4,1.57,1.86,2.14,1.80,726,464,1.56,61.19%,01/07/19 689 | MTCH,43.37,Put,23.00,06/21/19,165,0.35,0.5,0.65,0.53,885,567,1.56,69.07%,01/07/19 690 | NVDA,143.4,Put,139.00,01/11/19,4,2.03,2.13,2.22,2.07,950,610,1.56,66.09%,01/07/19 691 | ABT,69.13,Call,72.50,05/17/19,130,2.53,2.63,2.73,2.60,987,633,1.56,22.44%,01/07/19 692 | XOM,71.52,Call,72.00,01/11/19,4,0.56,0.59,0.61,0.68,1017,651,1.56,29.69%,01/07/19 693 | TSLA,334.96,Call,370.00,01/11/19,4,0.43,0.48,0.52,0.44,505,325,1.55,57.51%,01/07/19 694 | SQ,60.72,Put,59.00,01/11/19,4,0.96,1,1.03,0.93,552,355,1.55,66.29%,01/07/19 695 | MU,34,Put,24.00,01/11/19,4,0.00,0.01,0.02,0.01,621,401,1.55,136.79%,01/07/19 696 | COST,207,Call,210.00,01/11/19,4,1.39,1.49,1.59,1.58,827,533,1.55,32.23%,01/07/19 697 | INTC,47.44,Call,50.00,07/19/19,193,2.94,3,3.05,2.99,1109,714,1.55,27.25%,01/07/19 698 | QCOM,56.44,Call,58.50,01/18/19,11,0.40,0.45,0.50,0.50,1621,1044,1.55,31.60%,01/07/19 699 | SBUX,63.57,Put,64.00,01/11/19,4,0.86,0.93,1.00,0.95,664,432,1.54,27.30%,01/07/19 700 | BAC,25.56,Put,25.00,08/16/19,221,1.85,1.88,1.91,1.89,795,517,1.54,30.41%,01/07/19 701 | ATVI,48.5,Call,55.00,01/17/20,375,5.25,5.33,5.40,5.30,1302,844,1.54,36.53%,01/07/19 702 | MS,41.71,Put,40.00,02/15/19,39,1.21,1.23,1.25,1.19,2089,1355,1.54,37.14%,01/07/19 703 | JNJ,127.01,Call,131.00,01/18/19,11,0.62,0.67,0.72,0.75,785,512,1.53,24.13%,01/07/19 704 | GPS,26.57,Call,26.00,01/11/19,4,0.70,0.76,0.81,0.83,856,561,1.53,44.38%,01/07/19 705 | AAPL,147.93,Call,149.00,01/18/19,11,2.93,3.02,3.10,2.99,2171,1416,1.53,33.46%,01/07/19 706 | BKS,7.57,Call,8.00,03/15/19,67,0.65,0.7,0.75,0.75,2889,1891,1.53,70.40%,01/07/19 707 | MA,191.22,Put,180.00,01/18/19,11,1.05,1.16,1.27,1.04,5280,3446,1.53,36.51%,01/07/19 708 | CLF,8.73,Put,7.00,01/17/20,375,1.02,1.05,1.08,1.05,5469,3574,1.53,60.59%,01/07/19 709 | BABA,143.1,Call,143.00,01/18/19,11,4.05,4.15,4.25,4.25,573,376,1.52,41.76%,01/07/19 710 | ROKU,42.18,Call,40.00,02/15/19,39,5.05,5.33,5.60,5.21,723,476,1.52,74.02%,01/07/19 711 | BAC,25.56,Call,28.00,03/15/19,67,0.39,0.4,0.41,0.40,21137,13894,1.52,26.69%,01/07/19 712 | GE,8.74,Put,15.00,03/15/19,67,6.20,6.28,6.35,6.23,602,400,1.51,70.31%,01/07/19 713 | WFC,47.64,Call,55.00,03/15/19,67,0.19,0.21,0.23,0.19,11738,7787,1.51,23.20%,01/07/19 714 | VGR,10.56,Call,12.50,02/15/19,39,0.10,0.15,0.20,0.15,708,471,1.5,49.75%,01/07/19 715 | NVDA,143.4,Put,137.00,01/11/19,4,1.48,1.53,1.57,1.50,776,516,1.5,66.73%,01/07/19 716 | FB,138.05,Call,138.00,01/18/19,11,3.45,3.6,3.75,3.55,1323,882,1.5,36.24%,01/07/19 717 | JPM,100.76,Put,93.00,01/11/19,4,0.02,0.03,0.04,0.03,1723,1151,1.5,37.86%,01/07/19 718 | MS,41.71,Call,47.00,03/15/19,67,0.49,0.52,0.55,0.58,10805,7218,1.5,29.93%,01/07/19 719 | INTC,47.44,Call,48.00,01/25/19,18,1.43,1.48,1.53,1.53,645,434,1.49,41.77%,01/07/19 720 | ABC,74.75,Put,100.00,01/17/20,375,25.40,26,26.60,25.50,901,604,1.49,31.95%,01/07/19 721 | AMD,20.57,Call,22.50,01/18/19,11,0.42,0.44,0.45,0.45,1810,1211,1.49,78.20%,01/07/19 722 | HD,177.04,Put,167.50,01/11/19,4,0.16,0.19,0.21,0.17,580,391,1.48,34.72%,01/07/19 723 | SQ,60.72,Call,64.00,01/11/19,4,0.52,0.54,0.55,0.51,821,555,1.48,63.51%,01/07/19 724 | TSLA,334.96,Put,305.00,01/11/19,4,0.77,0.87,0.96,0.84,1833,1238,1.48,65.20%,01/07/19 725 | GLUU,8.47,Call,9.00,01/18/19,11,0.15,0.18,0.20,0.15,2789,1879,1.48,58.08%,01/07/19 726 | AAPL,147.93,Put,137.00,01/18/19,11,0.56,0.59,0.61,0.58,625,424,1.47,38.57%,01/07/19 727 | TSLA,334.96,Put,295.00,01/11/19,4,0.38,0.4,0.42,0.38,1106,752,1.47,69.88%,01/07/19 728 | VZ,56.72,Call,58.00,01/18/19,11,0.17,0.19,0.21,0.20,1364,928,1.47,15.95%,01/07/19 729 | IDTI,48.06,Call,48.00,02/15/19,39,0.10,0.5,0.90,0.85,600,411,1.46,11.82%,01/07/19 730 | FB,138.05,Put,132.00,01/11/19,4,0.47,0.55,0.63,0.53,899,616,1.46,43.77%,01/07/19 731 | AMD,20.57,Call,23.50,01/11/19,4,0.08,0.09,0.09,0.09,1630,1119,1.46,94.43%,01/07/19 732 | FB,138.05,Call,146.00,01/11/19,4,0.15,0.18,0.21,0.20,2071,1423,1.46,37.67%,01/07/19 733 | WFC,47.64,Call,52.50,03/15/19,67,0.50,0.52,0.54,0.53,11799,8087,1.46,24.13%,01/07/19 734 | AMZN,1629.51,Call,1840.00,01/17/20,375,158.50,160.33,162.15,157.50,510,352,1.45,33.01%,01/07/19 735 | SNAP,6.21,Put,6.50,01/11/19,4,0.33,0.35,0.37,0.38,766,529,1.45,77.16%,01/07/19 736 | HOLX,40.49,Call,44.00,01/18/19,11,0.05,0.13,0.20,0.15,1023,706,1.45,38.61%,01/07/19 737 | T,30.89,Put,30.00,01/11/19,4,0.16,0.18,0.20,0.19,3837,2638,1.45,40.98%,01/07/19 738 | MSFT,102.06,Call,105.00,01/11/19,4,0.43,0.45,0.46,0.43,5285,3635,1.45,33.31%,01/07/19 739 | NVDA,143.4,Call,144.00,01/11/19,4,3.55,3.63,3.70,3.60,1916,1326,1.44,64.51%,01/07/19 740 | LEN,42.38,Put,42.50,01/18/19,11,1.60,1.65,1.70,1.67,2357,1642,1.44,55.46%,01/07/19 741 | GS,176.02,Call,195.00,03/15/19,67,2.62,2.76,2.90,2.87,2896,2006,1.44,29.07%,01/07/19 742 | BAC,25.56,Call,29.00,03/15/19,67,0.20,0.22,0.23,0.21,19658,13618,1.44,25.85%,01/07/19 743 | CGC,28.9,Call,30.50,01/11/19,4,0.18,0.2,0.22,0.22,503,351,1.43,61.84%,01/07/19 744 | SQ,60.72,Call,60.00,01/11/19,4,2.03,2.09,2.14,2.03,2866,2002,1.43,64.83%,01/07/19 745 | WYNN,109.47,Put,105.00,01/17/20,375,16.40,16.6,16.80,17.35,500,352,1.42,49.57%,01/07/19 746 | TSN,56.05,Call,57.50,02/15/19,39,1.70,1.75,1.80,2.00,573,404,1.42,34.98%,01/07/19 747 | GWPH,114.66,Call,130.00,02/15/19,39,3.30,3.8,4.30,3.81,644,453,1.42,59.56%,01/07/19 748 | MSFT,102.06,Call,104.00,01/11/19,4,0.68,0.71,0.74,0.72,2934,2068,1.42,34.45%,01/07/19 749 | RCL,101.83,Call,110.00,03/15/19,67,3.40,3.5,3.60,3.46,4906,3444,1.42,36.40%,01/07/19 750 | JNJ,127.01,Call,130.00,03/15/19,67,3.60,3.7,3.80,3.70,545,387,1.41,21.71%,01/07/19 751 | WMB,24.15,Call,25.00,02/15/19,39,0.54,0.57,0.60,0.58,2817,2003,1.41,28.58%,01/07/19 752 | JCP,1.28,Call,5.00,01/15/21,739,0.06,0.14,0.22,0.12,658,470,1.4,73.58%,01/07/19 753 | V,136.06,Put,131.00,01/11/19,4,0.35,0.4,0.45,0.41,520,373,1.39,36.07%,01/07/19 754 | DE,154.16,Call,160.00,02/15/19,39,4.45,4.63,4.80,4.82,591,426,1.39,35.09%,01/07/19 755 | WBA,69.97,Put,62.50,01/17/20,375,4.35,4.5,4.65,4.55,611,440,1.39,32.06%,01/07/19 756 | BMY,48.41,Call,50.00,02/15/19,39,1.48,1.57,1.66,1.52,7585,5462,1.39,33.74%,01/07/19 757 | RIG,8.28,Call,8.00,01/11/19,4,0.39,0.41,0.43,0.42,1015,736,1.38,74.78%,01/07/19 758 | AAPL,147.93,Put,133.00,01/11/19,4,0.05,0.06,0.07,0.07,1519,1104,1.38,51.76%,01/07/19 759 | ROKU,42.18,Put,35.00,01/11/19,4,0.18,0.21,0.24,0.18,2115,1537,1.38,126.23%,01/07/19 760 | QEP,8.53,Call,12.00,03/15/19,67,0.05,0.1,0.15,0.10,3513,2543,1.38,57.76%,01/07/19 761 | FCX,11,Call,13.00,03/15/19,67,0.29,0.3,0.30,0.29,668,486,1.37,47.23%,01/07/19 762 | AAPL,147.93,Call,145.00,01/18/19,11,5.20,5.33,5.45,5.30,55355,40312,1.37,35.15%,01/07/19 763 | ROKU,42.18,Call,44.00,01/18/19,11,1.65,1.72,1.79,1.81,543,398,1.36,87.39%,01/07/19 764 | NFLX,315.34,Put,270.00,01/11/19,4,0.15,0.2,0.24,0.22,1265,931,1.36,75.89%,01/07/19 765 | SQ,60.72,Call,80.00,06/21/19,165,3.20,3.3,3.40,3.25,1354,993,1.36,52.75%,01/07/19 766 | CRM,142.22,Call,140.00,02/15/19,39,8.00,8.15,8.30,8.24,4233,3109,1.36,37.17%,01/07/19 767 | AMD,20.57,Put,19.00,01/25/19,18,0.70,0.74,0.77,0.77,643,475,1.35,81.74%,01/07/19 768 | VZ,56.72,Call,57.00,01/11/19,4,0.21,0.23,0.24,0.24,1743,1291,1.35,14.97%,01/07/19 769 | GS,176.02,Call,200.00,03/15/19,67,1.20,1.64,2.07,1.82,2883,2142,1.35,28.10%,01/07/19 770 | MU,34,Call,35.50,01/18/19,11,0.65,0.68,0.70,0.70,701,523,1.34,54.27%,01/07/19 771 | GG,9.58,Call,9.00,02/15/19,39,0.75,0.83,0.91,0.81,790,588,1.34,36.44%,01/07/19 772 | AAL,32.95,Call,34.00,01/11/19,4,0.30,0.34,0.37,0.45,979,732,1.34,62.46%,01/07/19 773 | AMBA,36.77,Call,37.00,01/11/19,4,1.05,1.18,1.30,1.05,1078,804,1.34,75.06%,01/07/19 774 | GOLD,12.92,Put,13.00,02/15/19,39,0.64,0.67,0.69,0.65,1543,1151,1.34,37.39%,01/07/19 775 | SQ,60.72,Call,61.00,01/11/19,4,1.49,1.54,1.59,1.56,2579,1918,1.34,66.39%,01/07/19 776 | SNAP,6.21,Call,6.50,01/11/19,4,0.05,0.06,0.06,0.06,3715,2773,1.34,62.45%,01/07/19 777 | SLB,40.17,Put,37.50,02/15/19,39,1.08,1.11,1.13,1.08,5170,3865,1.34,43.54%,01/07/19 778 | MTCH,43.37,Put,45.00,01/18/19,11,2.45,2.6,2.75,2.85,726,547,1.33,63.89%,01/07/19 779 | TDOC,52.13,Call,60.00,01/18/19,11,0.35,0.43,0.50,0.45,747,562,1.33,71.40%,01/07/19 780 | BABA,143.1,Put,135.00,01/11/19,4,0.42,0.44,0.46,0.41,1465,1101,1.33,47.67%,01/07/19 781 | GPS,26.57,Call,20.00,01/18/19,11,6.45,6.6,6.75,6.66,2840,2139,1.33,96.98%,01/07/19 782 | TEO,14.95,Call,15.00,01/18/19,11,0.00,0.3,0.60,0.46,501,379,1.32,46.13%,01/07/19 783 | TWTR,31.34,Put,19.00,06/21/19,165,0.57,0.59,0.61,0.59,956,725,1.32,64.23%,01/07/19 784 | FB,138.05,Call,100.00,06/21/19,165,40.10,41.55,43.00,40.60,1100,836,1.32,37.25%,01/07/19 785 | BABA,143.1,Call,146.00,01/11/19,4,1.38,1.43,1.48,1.45,2487,1881,1.32,43.65%,01/07/19 786 | AAPL,147.93,Put,140.00,01/11/19,4,0.31,0.34,0.36,0.34,6453,4871,1.32,42.98%,01/07/19 787 | GE,8.74,Call,11.00,03/15/19,67,0.16,0.17,0.17,0.17,25887,19660,1.32,51.18%,01/07/19 788 | IR,92.13,Call,95.00,02/15/19,39,2.25,2.4,2.55,2.70,501,385,1.3,31.61%,01/07/19 789 | FB,138.05,Put,139.00,01/11/19,4,2.58,2.89,3.20,2.61,575,443,1.3,36.78%,01/07/19 790 | AAPL,147.93,Call,155.00,02/01/19,25,2.79,2.84,2.89,2.82,1159,891,1.3,35.19%,01/07/19 791 | FCX,11,Call,11.50,01/11/19,4,0.08,0.09,0.09,0.09,1780,1373,1.3,57.11%,01/07/19 792 | AMD,20.57,Call,20.50,01/18/19,11,1.15,1.17,1.18,1.18,2756,2112,1.3,79.92%,01/07/19 793 | HPQ,20.95,Call,25.00,01/17/20,375,1.12,1.16,1.20,1.15,8015,6163,1.3,26.99%,01/07/19 794 | BBD,10.85,Call,11.00,02/15/19,39,0.55,0.57,0.59,0.58,912,708,1.29,44.74%,01/07/19 795 | NSTG,18.13,Call,20.00,01/18/19,11,0.10,0.18,0.25,0.15,4249,3297,1.29,55.51%,01/07/19 796 | BAC,25.56,Put,25.00,01/11/19,4,0.15,0.17,0.18,0.16,5290,4097,1.29,35.82%,01/07/19 797 | GE,8.74,Put,8.00,01/11/19,4,0.03,0.04,0.04,0.04,9527,7358,1.29,73.72%,01/07/19 798 | C,55.61,Call,62.50,03/15/19,67,0.60,0.63,0.65,0.67,10432,8086,1.29,27.97%,01/07/19 799 | CAT,128.23,Put,122.00,01/11/19,4,0.52,0.6,0.68,0.47,500,392,1.28,46.21%,01/07/19 800 | AMD,20.57,Put,17.00,01/25/19,18,0.21,0.25,0.28,0.26,530,415,1.28,82.59%,01/07/19 801 | AXP,98.17,Put,92.50,01/17/20,375,6.50,6.65,6.80,6.70,753,587,1.28,27.45%,01/07/19 802 | MA,191.22,Call,150.00,01/18/19,11,40.80,41.23,41.65,42.00,1542,1203,1.28,89.16%,01/07/19 803 | ROKU,42.18,Call,36.00,01/11/19,4,6.20,6.38,6.55,6.25,528,417,1.27,86.97%,01/07/19 804 | BA,328.11,Call,345.00,01/11/19,4,0.36,0.45,0.54,0.41,541,429,1.26,33.46%,01/07/19 805 | JD,22.76,Call,23.50,01/11/19,4,0.26,0.28,0.29,0.29,1088,864,1.26,60.55%,01/07/19 806 | ADBE,229.26,Call,225.00,02/15/19,39,13.65,13.95,14.25,14.28,2304,1832,1.26,39.33%,01/07/19 807 | AAPL,147.93,Put,125.00,01/11/19,4,0.01,0.02,0.02,0.02,1046,835,1.25,65.11%,01/07/19 808 | CGC,28.9,Call,29.50,01/11/19,4,0.41,0.48,0.54,0.45,612,493,1.24,57.94%,01/07/19 809 | JPM,100.76,Call,103.00,01/18/19,11,1.25,1.29,1.32,1.33,1375,1106,1.24,31.80%,01/07/19 810 | BABA,143.1,Call,138.00,01/18/19,11,7.15,7.3,7.45,7.55,2252,1813,1.24,45.85%,01/07/19 811 | "Downloaded from Barchart.com as of 01-08-2019 01:13am CST" 812 | --------------------------------------------------------------------------------