mirror of
https://github.com/wassname/options_backtester.git
synced 2026-06-27 17:49:11 +08:00
3134 lines
171 KiB
Plaintext
3134 lines
171 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import os\n",
|
||
"import sys\n",
|
||
"\n",
|
||
"import pandas as pd\n",
|
||
"\n",
|
||
"backtester_dir = os.path.realpath(os.path.join(os.getcwd(), '..', '..'))\n",
|
||
"sys.path.append(backtester_dir) # Add backtester base dir to $PYTHONPATH"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"data_dir = os.path.join(backtester_dir, 'data')\n",
|
||
"store_path = os.path.join(data_dir, 'options_data_full_v2.h5')\n",
|
||
"store = pd.HDFStore(store_path, complevel=9, complib='blosc', fletcher32=True)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"First we move the data from a h5 store with multiple keys (one per year) to another with a single key."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"old_data = os.path.join(data_dir, 'options_data_compressed_v2.h5')\n",
|
||
"sizes = {'optionroot': 20, 'optionalias': 20}\n",
|
||
"underlying_categories = pd.CategoricalDtype(categories=['SPX', 'SPXW', 'SPXPM'], ordered=False)\n",
|
||
"\n",
|
||
"keys = ('spx_{}'.format(year) for year in range(1990, 2019))\n",
|
||
"offset = 0\n",
|
||
"\n",
|
||
"for k in keys:\n",
|
||
" df = pd.read_hdf(old_data, key=k)\n",
|
||
" df['underlying'] = df['underlying'].astype(underlying_categories)\n",
|
||
" df.drop(columns='exchange', inplace=True)\n",
|
||
" \n",
|
||
" df.index += offset\n",
|
||
" offset += len(df)\n",
|
||
" store.append('/SPX', df, index=False, data_columns=['quotedate', 'expiration'], min_itemsize=sizes)\n",
|
||
" \n",
|
||
"os.path.getsize(store_path) / 1024**2"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"store.close()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Data cleaning"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"We will remove contracts where `bid` _and_ `ask` columns go to 0 unexpectedly, that is, where the bid/ask price of the contract is greater than 0 for the previous and following days. \n",
|
||
"We will also remove contracts that have a missing `quotedate` before expiration."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>underlying</th>\n",
|
||
" <th>underlying_last</th>\n",
|
||
" <th>optionroot</th>\n",
|
||
" <th>type</th>\n",
|
||
" <th>expiration</th>\n",
|
||
" <th>quotedate</th>\n",
|
||
" <th>strike</th>\n",
|
||
" <th>last</th>\n",
|
||
" <th>bid</th>\n",
|
||
" <th>ask</th>\n",
|
||
" <th>volume</th>\n",
|
||
" <th>openinterest</th>\n",
|
||
" <th>impliedvol</th>\n",
|
||
" <th>delta</th>\n",
|
||
" <th>gamma</th>\n",
|
||
" <th>theta</th>\n",
|
||
" <th>vega</th>\n",
|
||
" <th>optionalias</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <td>0</td>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>359.69</td>\n",
|
||
" <td>SPX900120C00225000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1990-01-20</td>\n",
|
||
" <td>1990-01-02</td>\n",
|
||
" <td>225.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>135.5</td>\n",
|
||
" <td>135.5</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>820</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>SPX900120C00225000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <td>1</td>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>359.69</td>\n",
|
||
" <td>SPX900120C00320000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1990-01-20</td>\n",
|
||
" <td>1990-01-02</td>\n",
|
||
" <td>320.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>40.9</td>\n",
|
||
" <td>40.9</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1088</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>SPX900120C00320000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <td>2</td>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>359.69</td>\n",
|
||
" <td>SPX900120C00325000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1990-01-20</td>\n",
|
||
" <td>1990-01-02</td>\n",
|
||
" <td>325.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>35.9</td>\n",
|
||
" <td>35.9</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1252</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>SPX900120C00325000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <td>3</td>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>359.69</td>\n",
|
||
" <td>SPX900120C00330000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1990-01-20</td>\n",
|
||
" <td>1990-01-02</td>\n",
|
||
" <td>330.0</td>\n",
|
||
" <td>30.5</td>\n",
|
||
" <td>30.9</td>\n",
|
||
" <td>30.9</td>\n",
|
||
" <td>25</td>\n",
|
||
" <td>8738</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>SPX900120C00330000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <td>4</td>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>359.69</td>\n",
|
||
" <td>SPX900120C00335000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1990-01-20</td>\n",
|
||
" <td>1990-01-02</td>\n",
|
||
" <td>335.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>26.0</td>\n",
|
||
" <td>26.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>580</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>SPX900120C00335000</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" underlying underlying_last optionroot type expiration quotedate \\\n",
|
||
"0 SPX 359.69 SPX900120C00225000 call 1990-01-20 1990-01-02 \n",
|
||
"1 SPX 359.69 SPX900120C00320000 call 1990-01-20 1990-01-02 \n",
|
||
"2 SPX 359.69 SPX900120C00325000 call 1990-01-20 1990-01-02 \n",
|
||
"3 SPX 359.69 SPX900120C00330000 call 1990-01-20 1990-01-02 \n",
|
||
"4 SPX 359.69 SPX900120C00335000 call 1990-01-20 1990-01-02 \n",
|
||
"\n",
|
||
" strike last bid ask volume openinterest impliedvol delta gamma \\\n",
|
||
"0 225.0 0.0 135.5 135.5 0 820 0.0 0.0 0.0 \n",
|
||
"1 320.0 0.0 40.9 40.9 0 1088 0.0 0.0 0.0 \n",
|
||
"2 325.0 0.0 35.9 35.9 0 1252 0.0 0.0 0.0 \n",
|
||
"3 330.0 30.5 30.9 30.9 25 8738 0.0 0.0 0.0 \n",
|
||
"4 335.0 0.0 26.0 26.0 0 580 0.0 0.0 0.0 \n",
|
||
"\n",
|
||
" theta vega optionalias \n",
|
||
"0 0.0 0.0 SPX900120C00225000 \n",
|
||
"1 0.0 0.0 SPX900120C00320000 \n",
|
||
"2 0.0 0.0 SPX900120C00325000 \n",
|
||
"3 0.0 0.0 SPX900120C00330000 \n",
|
||
"4 0.0 0.0 SPX900120C00335000 "
|
||
]
|
||
},
|
||
"execution_count": 3,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"full_data = os.path.join(data_dir, 'options_data_full_v2.h5')\n",
|
||
"df = pd.read_hdf(full_data, key='/SPX')\n",
|
||
"df.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"240554"
|
||
]
|
||
},
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df['optionroot'].nunique()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"16756680"
|
||
]
|
||
},
|
||
"execution_count": 5,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"len(df)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"to_clean = set()\n",
|
||
"threshold = 0.5\n",
|
||
"\n",
|
||
"dates = pd.Series(index=df['quotedate'].unique())\n",
|
||
"\n",
|
||
"for contract, group in df.groupby('optionroot'):\n",
|
||
" both_zero = group.eval('bid == ask == 0.0')\n",
|
||
" if both_zero.any():\n",
|
||
" ask_diff_previous = group['ask'].diff().abs()\n",
|
||
" ask_diff_next = group['ask'].diff(-1).abs()\n",
|
||
" \n",
|
||
" if ((ask_diff_previous > threshold) & (ask_diff_next > threshold) & both_zero).any():\n",
|
||
" to_clean.add(contract)\n",
|
||
" else:\n",
|
||
" start_date, end_date = group['quotedate'].min(), group['quotedate'].max()\n",
|
||
" if len(dates.loc[start_date:end_date]) != len(group):\n",
|
||
" to_clean.add(contract)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"29394"
|
||
]
|
||
},
|
||
"execution_count": 7,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"len(to_clean)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 12,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0.1221929379681901"
|
||
]
|
||
},
|
||
"execution_count": 12,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"len(to_clean) / df['optionroot'].nunique()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 24,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"to_clean_mask = df[df['optionroot'].isin(to_clean)]\n",
|
||
"clean_df = df.drop(to_clean_mask.index)\n",
|
||
"clean_df.reset_index(drop=True, inplace=True)\n",
|
||
"\n",
|
||
"min_sizes = {'optionroot': 20, 'optionalias': 20}\n",
|
||
"clean_file = os.path.join(data_dir, 'options_data_clean_v2.h5')\n",
|
||
"clean_df.to_hdf(clean_file,\n",
|
||
" mode='w',\n",
|
||
" key='/SPX',\n",
|
||
" format='table',\n",
|
||
" data_columns=['quotedate', 'expiration'],\n",
|
||
" complevel=9,\n",
|
||
" complib='blosc:lz4',\n",
|
||
" fletcher32=True,\n",
|
||
" min_itemsize=min_sizes)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 26,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"<class 'pandas.core.frame.DataFrame'>\n",
|
||
"RangeIndex: 13909922 entries, 0 to 13909921\n",
|
||
"Data columns (total 18 columns):\n",
|
||
"underlying category\n",
|
||
"underlying_last float64\n",
|
||
"optionroot object\n",
|
||
"type category\n",
|
||
"expiration datetime64[ns]\n",
|
||
"quotedate datetime64[ns]\n",
|
||
"strike float64\n",
|
||
"last float64\n",
|
||
"bid float64\n",
|
||
"ask float64\n",
|
||
"volume int64\n",
|
||
"openinterest int64\n",
|
||
"impliedvol float64\n",
|
||
"delta float64\n",
|
||
"gamma float64\n",
|
||
"theta float64\n",
|
||
"vega float64\n",
|
||
"optionalias object\n",
|
||
"dtypes: category(2), datetime64[ns](2), float64(10), int64(2), object(2)\n",
|
||
"memory usage: 3.4 GB\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"clean_df.info(memory_usage='deep')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 27,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"568.1449775695801"
|
||
]
|
||
},
|
||
"execution_count": 27,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"os.path.getsize(clean_file) / 1024**2"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 31,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"<matplotlib.axes._subplots.AxesSubplot at 0x1c0d21510>"
|
||
]
|
||
},
|
||
"execution_count": 31,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"needs_background": "light"
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"unique_contracts_per_day = df.groupby('quotedate').apply(lambda x: x['optionroot'].nunique())\n",
|
||
"unique_contracts_per_day.plot()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 30,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"<matplotlib.axes._subplots.AxesSubplot at 0x1c0c37c10>"
|
||
]
|
||
},
|
||
"execution_count": 30,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"needs_background": "light"
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"unique_contracts_per_day_clean = clean_df.groupby('quotedate').apply(lambda x: x['optionroot'].nunique())\n",
|
||
"unique_contracts_per_day_clean.plot()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Previous data cleaning attempt"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Our data has some zero values and missing entries that are inaccurate and could throw off our backtester, giving misleading results. We perform here a cleanup of the data."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"store_path = os.path.join(\"/Users/jrchatruc/Documents/backtester_options/allspx/\", \"options_data_v2_light.h5\")\n",
|
||
"store = pd.HDFStore(store_path, complevel=9, complib=\"blosc\", fletcher32=True)\n",
|
||
"underlying_dtype = pd.api.types.CategoricalDtype(\n",
|
||
" categories=['SPX', 'SPXW', 'SPXPM'])\n",
|
||
"\n",
|
||
"offset = 0\n",
|
||
"sizes = {\"optionroot\": 20, \"optionalias\": 20}\n",
|
||
"for year in range(1990, 2019):\n",
|
||
" filename = \"SPX_{}.csv\".format(year)\n",
|
||
" year_df = pd.read_csv(os.path.join(\"/Users/jrchatruc/Documents/backtester_options/allspx/\", filename),\n",
|
||
" parse_dates=[\"expiration\", \"quotedate\"])\n",
|
||
" year_df.rename(columns={\" exchange\": \"exchange\"}, inplace=True)\n",
|
||
" year_df = year_df.astype({\"strike\": \"float\", \"optionalias\": \"object\", \"type\": \"category\",\n",
|
||
" 'underlying': underlying_dtype})\n",
|
||
" year_df = year_df.drop('optionext', axis=1)\n",
|
||
" year_df = year_df.drop('exchange', axis=1)\n",
|
||
" year_df = year_df.reset_index(drop=True)\n",
|
||
" year_df.index += offset\n",
|
||
" offset += len(year_df)\n",
|
||
" store.append(\"/SPX\", year_df, index=False, data_columns=True, min_itemsize=sizes)\n",
|
||
" print(year)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"%cd -q /Users/jrchatruc/Documents/backtester_options/allspx\n",
|
||
"!ptrepack --complevel=9 --complib=blosc options_data_v2_light.h5 options_data_v2_light_compressed.h5"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 95,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"data = HistoricalOptionsData(\"options_data_v2_light_compressed.h5\", key=\"/SPX\")\n",
|
||
"schema = data.schema\n",
|
||
"df = data._data"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 96,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"(16756680, 19)"
|
||
]
|
||
},
|
||
"execution_count": 96,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df.shape"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 97,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0.065681208926828"
|
||
]
|
||
},
|
||
"execution_count": 97,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df[(df['bid'] == 0) & (df['ask'] == 0)].shape[0] / df.shape[0]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"As can be seen, around $6.5\\%$ of the rows have both their bid and ask equal to zero. Some of these are because these values are going progressively down until they reach around $0.1$ or $0.05$, at which point they (sometimes) get replaced with zero. This isn't a problematic case, but it is not the only one."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 98,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>underlying</th>\n",
|
||
" <th>underlying_last</th>\n",
|
||
" <th>optionroot</th>\n",
|
||
" <th>type</th>\n",
|
||
" <th>expiration</th>\n",
|
||
" <th>quotedate</th>\n",
|
||
" <th>strike</th>\n",
|
||
" <th>last</th>\n",
|
||
" <th>bid</th>\n",
|
||
" <th>ask</th>\n",
|
||
" <th>volume</th>\n",
|
||
" <th>openinterest</th>\n",
|
||
" <th>impliedvol</th>\n",
|
||
" <th>delta</th>\n",
|
||
" <th>gamma</th>\n",
|
||
" <th>theta</th>\n",
|
||
" <th>vega</th>\n",
|
||
" <th>optionalias</th>\n",
|
||
" <th>dte</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>13359109</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>2276.98</td>\n",
|
||
" <td>SPX191220P00100000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>2019-12-20</td>\n",
|
||
" <td>2017-01-06</td>\n",
|
||
" <td>100.0</td>\n",
|
||
" <td>0.15</td>\n",
|
||
" <td>0.10</td>\n",
|
||
" <td>0.15</td>\n",
|
||
" <td>20</td>\n",
|
||
" <td>773</td>\n",
|
||
" <td>0.3185</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>SPX191220P00100000</td>\n",
|
||
" <td>1078</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>13388755</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>2275.32</td>\n",
|
||
" <td>SPX191220P00100000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>2019-12-20</td>\n",
|
||
" <td>2017-01-11</td>\n",
|
||
" <td>100.0</td>\n",
|
||
" <td>0.15</td>\n",
|
||
" <td>0.10</td>\n",
|
||
" <td>0.15</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>783</td>\n",
|
||
" <td>0.5958</td>\n",
|
||
" <td>-0.0002</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.2454</td>\n",
|
||
" <td>2.4561</td>\n",
|
||
" <td>SPX191220P00100000</td>\n",
|
||
" <td>1073</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>13400173</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>2270.44</td>\n",
|
||
" <td>SPX191220P00100000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>2019-12-20</td>\n",
|
||
" <td>2017-01-12</td>\n",
|
||
" <td>100.0</td>\n",
|
||
" <td>0.15</td>\n",
|
||
" <td>0.10</td>\n",
|
||
" <td>0.15</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>783</td>\n",
|
||
" <td>0.5940</td>\n",
|
||
" <td>-0.0002</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.2466</td>\n",
|
||
" <td>2.4588</td>\n",
|
||
" <td>SPX191220P00100000</td>\n",
|
||
" <td>1072</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>13411669</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>2274.64</td>\n",
|
||
" <td>SPX191220P00100000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>2019-12-20</td>\n",
|
||
" <td>2017-01-13</td>\n",
|
||
" <td>100.0</td>\n",
|
||
" <td>0.11</td>\n",
|
||
" <td>0.10</td>\n",
|
||
" <td>0.15</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>785</td>\n",
|
||
" <td>0.5963</td>\n",
|
||
" <td>-0.0002</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.2458</td>\n",
|
||
" <td>2.4539</td>\n",
|
||
" <td>SPX191220P00100000</td>\n",
|
||
" <td>1071</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>13423111</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>2267.89</td>\n",
|
||
" <td>SPX191220P00100000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>2019-12-20</td>\n",
|
||
" <td>2017-01-17</td>\n",
|
||
" <td>100.0</td>\n",
|
||
" <td>0.10</td>\n",
|
||
" <td>0.10</td>\n",
|
||
" <td>0.15</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>805</td>\n",
|
||
" <td>0.5986</td>\n",
|
||
" <td>-0.0002</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.2453</td>\n",
|
||
" <td>2.4442</td>\n",
|
||
" <td>SPX191220P00100000</td>\n",
|
||
" <td>1067</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>16740413</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>2351.10</td>\n",
|
||
" <td>SPX191220P00100000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>2019-12-21</td>\n",
|
||
" <td>2018-12-24</td>\n",
|
||
" <td>100.0</td>\n",
|
||
" <td>0.05</td>\n",
|
||
" <td>0.05</td>\n",
|
||
" <td>0.10</td>\n",
|
||
" <td>530</td>\n",
|
||
" <td>14541</td>\n",
|
||
" <td>0.3500</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>362</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>16744107</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>2467.70</td>\n",
|
||
" <td>SPX191220P00100000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>2019-12-21</td>\n",
|
||
" <td>2018-12-26</td>\n",
|
||
" <td>100.0</td>\n",
|
||
" <td>0.05</td>\n",
|
||
" <td>0.00</td>\n",
|
||
" <td>0.10</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>15059</td>\n",
|
||
" <td>0.3219</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>360</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>16747947</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>2488.83</td>\n",
|
||
" <td>SPX191220P00100000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>2019-12-21</td>\n",
|
||
" <td>2018-12-27</td>\n",
|
||
" <td>100.0</td>\n",
|
||
" <td>0.05</td>\n",
|
||
" <td>0.00</td>\n",
|
||
" <td>0.05</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>15059</td>\n",
|
||
" <td>0.3314</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>359</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>16751791</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>2485.74</td>\n",
|
||
" <td>SPX191220P00100000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>2019-12-21</td>\n",
|
||
" <td>2018-12-28</td>\n",
|
||
" <td>100.0</td>\n",
|
||
" <td>0.05</td>\n",
|
||
" <td>0.00</td>\n",
|
||
" <td>0.05</td>\n",
|
||
" <td>500</td>\n",
|
||
" <td>15059</td>\n",
|
||
" <td>0.3256</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>358</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>16755635</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>2506.85</td>\n",
|
||
" <td>SPX191220P00100000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>2019-12-21</td>\n",
|
||
" <td>2018-12-31</td>\n",
|
||
" <td>100.0</td>\n",
|
||
" <td>0.05</td>\n",
|
||
" <td>0.00</td>\n",
|
||
" <td>0.05</td>\n",
|
||
" <td>1100</td>\n",
|
||
" <td>15559</td>\n",
|
||
" <td>0.3188</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>355</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>497 rows × 19 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" underlying underlying_last optionroot type expiration \\\n",
|
||
"13359109 SPX 2276.98 SPX191220P00100000 put 2019-12-20 \n",
|
||
"13388755 SPX 2275.32 SPX191220P00100000 put 2019-12-20 \n",
|
||
"13400173 SPX 2270.44 SPX191220P00100000 put 2019-12-20 \n",
|
||
"13411669 SPX 2274.64 SPX191220P00100000 put 2019-12-20 \n",
|
||
"13423111 SPX 2267.89 SPX191220P00100000 put 2019-12-20 \n",
|
||
"... ... ... ... ... ... \n",
|
||
"16740413 SPX 2351.10 SPX191220P00100000 put 2019-12-21 \n",
|
||
"16744107 SPX 2467.70 SPX191220P00100000 put 2019-12-21 \n",
|
||
"16747947 SPX 2488.83 SPX191220P00100000 put 2019-12-21 \n",
|
||
"16751791 SPX 2485.74 SPX191220P00100000 put 2019-12-21 \n",
|
||
"16755635 SPX 2506.85 SPX191220P00100000 put 2019-12-21 \n",
|
||
"\n",
|
||
" quotedate strike last bid ask volume openinterest \\\n",
|
||
"13359109 2017-01-06 100.0 0.15 0.10 0.15 20 773 \n",
|
||
"13388755 2017-01-11 100.0 0.15 0.10 0.15 0 783 \n",
|
||
"13400173 2017-01-12 100.0 0.15 0.10 0.15 1 783 \n",
|
||
"13411669 2017-01-13 100.0 0.11 0.10 0.15 0 785 \n",
|
||
"13423111 2017-01-17 100.0 0.10 0.10 0.15 0 805 \n",
|
||
"... ... ... ... ... ... ... ... \n",
|
||
"16740413 2018-12-24 100.0 0.05 0.05 0.10 530 14541 \n",
|
||
"16744107 2018-12-26 100.0 0.05 0.00 0.10 0 15059 \n",
|
||
"16747947 2018-12-27 100.0 0.05 0.00 0.05 0 15059 \n",
|
||
"16751791 2018-12-28 100.0 0.05 0.00 0.05 500 15059 \n",
|
||
"16755635 2018-12-31 100.0 0.05 0.00 0.05 1100 15559 \n",
|
||
"\n",
|
||
" impliedvol delta gamma theta vega optionalias dte \n",
|
||
"13359109 0.3185 0.0000 0.0 0.0000 0.0000 SPX191220P00100000 1078 \n",
|
||
"13388755 0.5958 -0.0002 0.0 -0.2454 2.4561 SPX191220P00100000 1073 \n",
|
||
"13400173 0.5940 -0.0002 0.0 -0.2466 2.4588 SPX191220P00100000 1072 \n",
|
||
"13411669 0.5963 -0.0002 0.0 -0.2458 2.4539 SPX191220P00100000 1071 \n",
|
||
"13423111 0.5986 -0.0002 0.0 -0.2453 2.4442 SPX191220P00100000 1067 \n",
|
||
"... ... ... ... ... ... ... ... \n",
|
||
"16740413 0.3500 0.0000 0.0 0.0000 0.0000 NaN 362 \n",
|
||
"16744107 0.3219 0.0000 0.0 0.0000 0.0000 NaN 360 \n",
|
||
"16747947 0.3314 0.0000 0.0 0.0000 0.0000 NaN 359 \n",
|
||
"16751791 0.3256 0.0000 0.0 0.0000 0.0000 NaN 358 \n",
|
||
"16755635 0.3188 0.0000 0.0 0.0000 0.0000 NaN 355 \n",
|
||
"\n",
|
||
"[497 rows x 19 columns]"
|
||
]
|
||
},
|
||
"execution_count": 98,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# A (mostly) innocuous contract, its bid and ask values are always very close to zero, so them dipping into zero\n",
|
||
"# is not a problem.\n",
|
||
"df[df['optionroot'] == 'SPX191220P00100000']"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"This next contract, however, is a problem. On first inspection it looks fine, but it actually contains a lot of zero values intermingled."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 99,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>underlying</th>\n",
|
||
" <th>underlying_last</th>\n",
|
||
" <th>optionroot</th>\n",
|
||
" <th>type</th>\n",
|
||
" <th>expiration</th>\n",
|
||
" <th>quotedate</th>\n",
|
||
" <th>strike</th>\n",
|
||
" <th>last</th>\n",
|
||
" <th>bid</th>\n",
|
||
" <th>ask</th>\n",
|
||
" <th>volume</th>\n",
|
||
" <th>openinterest</th>\n",
|
||
" <th>impliedvol</th>\n",
|
||
" <th>delta</th>\n",
|
||
" <th>gamma</th>\n",
|
||
" <th>theta</th>\n",
|
||
" <th>vega</th>\n",
|
||
" <th>optionalias</th>\n",
|
||
" <th>dte</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>144</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>359.69</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1990-01-02</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>94.3</td>\n",
|
||
" <td>94.3</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>536</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>314</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>358.76</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1990-01-03</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>93.3</td>\n",
|
||
" <td>93.3</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>535</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>484</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>355.66</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1990-01-04</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>90.2</td>\n",
|
||
" <td>90.2</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>534</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>654</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>352.20</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1990-01-05</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>86.6</td>\n",
|
||
" <td>86.6</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>533</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>824</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>353.79</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1990-01-08</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>88.1</td>\n",
|
||
" <td>88.1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>530</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>68132</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>380.13</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1991-06-17</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>81.5</td>\n",
|
||
" <td>80.4</td>\n",
|
||
" <td>80.9</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>3728</td>\n",
|
||
" <td>1.0531</td>\n",
|
||
" <td>0.9832</td>\n",
|
||
" <td>0.0010</td>\n",
|
||
" <td>-0.2442</td>\n",
|
||
" <td>0.0173</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>5</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>68330</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>378.59</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1991-06-18</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>78.5</td>\n",
|
||
" <td>79.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3727</td>\n",
|
||
" <td>1.4422</td>\n",
|
||
" <td>0.9608</td>\n",
|
||
" <td>0.0016</td>\n",
|
||
" <td>-0.6967</td>\n",
|
||
" <td>0.0307</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>4</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>68528</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>375.09</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1991-06-19</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>75.5</td>\n",
|
||
" <td>75.0</td>\n",
|
||
" <td>76.0</td>\n",
|
||
" <td>756</td>\n",
|
||
" <td>3727</td>\n",
|
||
" <td>1.6634</td>\n",
|
||
" <td>0.9598</td>\n",
|
||
" <td>0.0017</td>\n",
|
||
" <td>-0.9583</td>\n",
|
||
" <td>0.0260</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>3</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>68726</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>375.42</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1991-06-20</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>75.0</td>\n",
|
||
" <td>76.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3557</td>\n",
|
||
" <td>1.8106</td>\n",
|
||
" <td>0.9824</td>\n",
|
||
" <td>0.0011</td>\n",
|
||
" <td>-0.7040</td>\n",
|
||
" <td>0.0099</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>2</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>68924</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>377.75</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1991-06-21</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>76.0</td>\n",
|
||
" <td>77.5</td>\n",
|
||
" <td>78.5</td>\n",
|
||
" <td>132</td>\n",
|
||
" <td>3557</td>\n",
|
||
" <td>3.9547</td>\n",
|
||
" <td>0.9766</td>\n",
|
||
" <td>0.0012</td>\n",
|
||
" <td>-3.7758</td>\n",
|
||
" <td>0.0063</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>373 rows × 19 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" underlying underlying_last optionroot type expiration \\\n",
|
||
"144 SPX 359.69 SPX910622C00300000 call 1991-06-22 \n",
|
||
"314 SPX 358.76 SPX910622C00300000 call 1991-06-22 \n",
|
||
"484 SPX 355.66 SPX910622C00300000 call 1991-06-22 \n",
|
||
"654 SPX 352.20 SPX910622C00300000 call 1991-06-22 \n",
|
||
"824 SPX 353.79 SPX910622C00300000 call 1991-06-22 \n",
|
||
"... ... ... ... ... ... \n",
|
||
"68132 SPX 380.13 SPX910622C00300000 call 1991-06-22 \n",
|
||
"68330 SPX 378.59 SPX910622C00300000 call 1991-06-22 \n",
|
||
"68528 SPX 375.09 SPX910622C00300000 call 1991-06-22 \n",
|
||
"68726 SPX 375.42 SPX910622C00300000 call 1991-06-22 \n",
|
||
"68924 SPX 377.75 SPX910622C00300000 call 1991-06-22 \n",
|
||
"\n",
|
||
" quotedate strike last bid ask volume openinterest impliedvol \\\n",
|
||
"144 1990-01-02 300.0 0.0 94.3 94.3 0 0 0.0000 \n",
|
||
"314 1990-01-03 300.0 0.0 93.3 93.3 0 0 0.0000 \n",
|
||
"484 1990-01-04 300.0 0.0 90.2 90.2 0 0 0.0000 \n",
|
||
"654 1990-01-05 300.0 0.0 86.6 86.6 0 0 0.0000 \n",
|
||
"824 1990-01-08 300.0 0.0 88.1 88.1 0 0 0.0000 \n",
|
||
"... ... ... ... ... ... ... ... ... \n",
|
||
"68132 1991-06-17 300.0 81.5 80.4 80.9 1 3728 1.0531 \n",
|
||
"68330 1991-06-18 300.0 0.0 78.5 79.0 0 3727 1.4422 \n",
|
||
"68528 1991-06-19 300.0 75.5 75.0 76.0 756 3727 1.6634 \n",
|
||
"68726 1991-06-20 300.0 0.0 75.0 76.0 0 3557 1.8106 \n",
|
||
"68924 1991-06-21 300.0 76.0 77.5 78.5 132 3557 3.9547 \n",
|
||
"\n",
|
||
" delta gamma theta vega optionalias dte \n",
|
||
"144 0.0000 0.0000 0.0000 0.0000 SPX910622C00300000 536 \n",
|
||
"314 0.0000 0.0000 0.0000 0.0000 SPX910622C00300000 535 \n",
|
||
"484 0.0000 0.0000 0.0000 0.0000 SPX910622C00300000 534 \n",
|
||
"654 0.0000 0.0000 0.0000 0.0000 SPX910622C00300000 533 \n",
|
||
"824 0.0000 0.0000 0.0000 0.0000 SPX910622C00300000 530 \n",
|
||
"... ... ... ... ... ... ... \n",
|
||
"68132 0.9832 0.0010 -0.2442 0.0173 SPX910622C00300000 5 \n",
|
||
"68330 0.9608 0.0016 -0.6967 0.0307 SPX910622C00300000 4 \n",
|
||
"68528 0.9598 0.0017 -0.9583 0.0260 SPX910622C00300000 3 \n",
|
||
"68726 0.9824 0.0011 -0.7040 0.0099 SPX910622C00300000 2 \n",
|
||
"68924 0.9766 0.0012 -3.7758 0.0063 SPX910622C00300000 1 \n",
|
||
"\n",
|
||
"[373 rows x 19 columns]"
|
||
]
|
||
},
|
||
"execution_count": 99,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"problematic = df[df['optionroot'] == 'SPX910622C00300000']\n",
|
||
"problematic"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 100,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>underlying</th>\n",
|
||
" <th>underlying_last</th>\n",
|
||
" <th>optionroot</th>\n",
|
||
" <th>type</th>\n",
|
||
" <th>expiration</th>\n",
|
||
" <th>quotedate</th>\n",
|
||
" <th>strike</th>\n",
|
||
" <th>last</th>\n",
|
||
" <th>bid</th>\n",
|
||
" <th>ask</th>\n",
|
||
" <th>volume</th>\n",
|
||
" <th>openinterest</th>\n",
|
||
" <th>impliedvol</th>\n",
|
||
" <th>delta</th>\n",
|
||
" <th>gamma</th>\n",
|
||
" <th>theta</th>\n",
|
||
" <th>vega</th>\n",
|
||
" <th>optionalias</th>\n",
|
||
" <th>dte</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>824</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>353.79</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1990-01-08</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>88.1</td>\n",
|
||
" <td>88.1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>530</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>994</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>349.62</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1990-01-09</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>83.8</td>\n",
|
||
" <td>83.8</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>529</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1164</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>347.31</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1990-01-10</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>81.4</td>\n",
|
||
" <td>81.4</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>528</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1334</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>348.53</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1990-01-11</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>82.6</td>\n",
|
||
" <td>82.6</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>527</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1504</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>339.93</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1990-01-12</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>526</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1674</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>337.00</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1990-01-15</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>70.8</td>\n",
|
||
" <td>70.8</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>523</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1844</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>340.75</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1990-01-16</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>74.5</td>\n",
|
||
" <td>74.5</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>522</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2026</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>337.40</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1990-01-17</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>71.1</td>\n",
|
||
" <td>71.1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>521</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2208</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>338.19</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1990-01-18</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>520</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2391</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>339.15</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1990-01-19</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>519</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2548</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>330.38</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1990-01-22</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>63.8</td>\n",
|
||
" <td>64.5</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0926</td>\n",
|
||
" <td>0.9776</td>\n",
|
||
" <td>0.0015</td>\n",
|
||
" <td>-22.3628</td>\n",
|
||
" <td>20.9095</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>516</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2705</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>331.61</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1990-01-23</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>65.0</td>\n",
|
||
" <td>65.5</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0904</td>\n",
|
||
" <td>0.9816</td>\n",
|
||
" <td>0.0013</td>\n",
|
||
" <td>-22.3658</td>\n",
|
||
" <td>17.7692</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>515</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2862</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>330.26</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1990-01-24</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>63.5</td>\n",
|
||
" <td>64.2</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0896</td>\n",
|
||
" <td>0.9806</td>\n",
|
||
" <td>0.0013</td>\n",
|
||
" <td>-22.3636</td>\n",
|
||
" <td>18.4703</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>514</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3022</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>326.08</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1990-01-25</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>59.7</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>513</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3182</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>325.80</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1990-01-26</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>59.0</td>\n",
|
||
" <td>59.7</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0887</td>\n",
|
||
" <td>0.9747</td>\n",
|
||
" <td>0.0017</td>\n",
|
||
" <td>-22.3457</td>\n",
|
||
" <td>22.7432</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>512</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3344</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>325.20</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>call</td>\n",
|
||
" <td>1991-06-22</td>\n",
|
||
" <td>1990-01-29</td>\n",
|
||
" <td>300.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>58.2</td>\n",
|
||
" <td>59.3</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0957</td>\n",
|
||
" <td>0.9644</td>\n",
|
||
" <td>0.0021</td>\n",
|
||
" <td>-22.3769</td>\n",
|
||
" <td>30.0972</td>\n",
|
||
" <td>SPX910622C00300000</td>\n",
|
||
" <td>509</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" underlying underlying_last optionroot type expiration \\\n",
|
||
"824 SPX 353.79 SPX910622C00300000 call 1991-06-22 \n",
|
||
"994 SPX 349.62 SPX910622C00300000 call 1991-06-22 \n",
|
||
"1164 SPX 347.31 SPX910622C00300000 call 1991-06-22 \n",
|
||
"1334 SPX 348.53 SPX910622C00300000 call 1991-06-22 \n",
|
||
"1504 SPX 339.93 SPX910622C00300000 call 1991-06-22 \n",
|
||
"1674 SPX 337.00 SPX910622C00300000 call 1991-06-22 \n",
|
||
"1844 SPX 340.75 SPX910622C00300000 call 1991-06-22 \n",
|
||
"2026 SPX 337.40 SPX910622C00300000 call 1991-06-22 \n",
|
||
"2208 SPX 338.19 SPX910622C00300000 call 1991-06-22 \n",
|
||
"2391 SPX 339.15 SPX910622C00300000 call 1991-06-22 \n",
|
||
"2548 SPX 330.38 SPX910622C00300000 call 1991-06-22 \n",
|
||
"2705 SPX 331.61 SPX910622C00300000 call 1991-06-22 \n",
|
||
"2862 SPX 330.26 SPX910622C00300000 call 1991-06-22 \n",
|
||
"3022 SPX 326.08 SPX910622C00300000 call 1991-06-22 \n",
|
||
"3182 SPX 325.80 SPX910622C00300000 call 1991-06-22 \n",
|
||
"3344 SPX 325.20 SPX910622C00300000 call 1991-06-22 \n",
|
||
"\n",
|
||
" quotedate strike last bid ask volume openinterest impliedvol \\\n",
|
||
"824 1990-01-08 300.0 0.0 88.1 88.1 0 0 0.0000 \n",
|
||
"994 1990-01-09 300.0 0.0 83.8 83.8 0 0 0.0000 \n",
|
||
"1164 1990-01-10 300.0 0.0 81.4 81.4 0 0 0.0000 \n",
|
||
"1334 1990-01-11 300.0 0.0 82.6 82.6 0 0 0.0000 \n",
|
||
"1504 1990-01-12 300.0 0.0 0.0 0.0 0 0 0.0000 \n",
|
||
"1674 1990-01-15 300.0 0.0 70.8 70.8 0 0 0.0000 \n",
|
||
"1844 1990-01-16 300.0 0.0 74.5 74.5 0 0 0.0000 \n",
|
||
"2026 1990-01-17 300.0 0.0 71.1 71.1 0 0 0.0000 \n",
|
||
"2208 1990-01-18 300.0 0.0 0.0 0.0 0 0 0.0000 \n",
|
||
"2391 1990-01-19 300.0 0.0 0.0 0.0 0 0 0.0000 \n",
|
||
"2548 1990-01-22 300.0 0.0 63.8 64.5 0 0 0.0926 \n",
|
||
"2705 1990-01-23 300.0 0.0 65.0 65.5 0 0 0.0904 \n",
|
||
"2862 1990-01-24 300.0 0.0 63.5 64.2 0 0 0.0896 \n",
|
||
"3022 1990-01-25 300.0 0.0 0.0 59.7 0 0 0.0000 \n",
|
||
"3182 1990-01-26 300.0 0.0 59.0 59.7 0 0 0.0887 \n",
|
||
"3344 1990-01-29 300.0 0.0 58.2 59.3 0 0 0.0957 \n",
|
||
"\n",
|
||
" delta gamma theta vega optionalias dte \n",
|
||
"824 0.0000 0.0000 0.0000 0.0000 SPX910622C00300000 530 \n",
|
||
"994 0.0000 0.0000 0.0000 0.0000 SPX910622C00300000 529 \n",
|
||
"1164 0.0000 0.0000 0.0000 0.0000 SPX910622C00300000 528 \n",
|
||
"1334 0.0000 0.0000 0.0000 0.0000 SPX910622C00300000 527 \n",
|
||
"1504 0.0000 0.0000 0.0000 0.0000 SPX910622C00300000 526 \n",
|
||
"1674 0.0000 0.0000 0.0000 0.0000 SPX910622C00300000 523 \n",
|
||
"1844 0.0000 0.0000 0.0000 0.0000 SPX910622C00300000 522 \n",
|
||
"2026 0.0000 0.0000 0.0000 0.0000 SPX910622C00300000 521 \n",
|
||
"2208 0.0000 0.0000 0.0000 0.0000 SPX910622C00300000 520 \n",
|
||
"2391 0.0000 0.0000 0.0000 0.0000 SPX910622C00300000 519 \n",
|
||
"2548 0.9776 0.0015 -22.3628 20.9095 SPX910622C00300000 516 \n",
|
||
"2705 0.9816 0.0013 -22.3658 17.7692 SPX910622C00300000 515 \n",
|
||
"2862 0.9806 0.0013 -22.3636 18.4703 SPX910622C00300000 514 \n",
|
||
"3022 0.0000 0.0000 0.0000 0.0000 SPX910622C00300000 513 \n",
|
||
"3182 0.9747 0.0017 -22.3457 22.7432 SPX910622C00300000 512 \n",
|
||
"3344 0.9644 0.0021 -22.3769 30.0972 SPX910622C00300000 509 "
|
||
]
|
||
},
|
||
"execution_count": 100,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"problematic[4:20]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 101,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"(34, 19)"
|
||
]
|
||
},
|
||
"execution_count": 101,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"problematic[problematic['bid'] == 0].shape"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Of $373$ total rows, $34$ of them have their bid equal to zero even though the non-zero values in between are never even close to zero. These types of contracts happen all throughout the dataset and need to be addressed. We will drop contracts that have an entry with both their ask and bid equal to zero. This means of course that we will also be dropping some contracts with correct values, but we are willing to make that tradeoff."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Here's an example of a contract with all its bid and ask entries set to zero."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 102,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>underlying</th>\n",
|
||
" <th>underlying_last</th>\n",
|
||
" <th>optionroot</th>\n",
|
||
" <th>type</th>\n",
|
||
" <th>expiration</th>\n",
|
||
" <th>quotedate</th>\n",
|
||
" <th>strike</th>\n",
|
||
" <th>last</th>\n",
|
||
" <th>bid</th>\n",
|
||
" <th>ask</th>\n",
|
||
" <th>volume</th>\n",
|
||
" <th>openinterest</th>\n",
|
||
" <th>impliedvol</th>\n",
|
||
" <th>delta</th>\n",
|
||
" <th>gamma</th>\n",
|
||
" <th>theta</th>\n",
|
||
" <th>vega</th>\n",
|
||
" <th>optionalias</th>\n",
|
||
" <th>dte</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>117271</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>409.76</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-06-12</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.5202</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0025</td>\n",
|
||
" <td>0.0035</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>36</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>117505</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>410.29</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-06-15</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.031</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.5463</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0028</td>\n",
|
||
" <td>0.0034</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>33</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>117743</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>408.32</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-06-16</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.5485</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0029</td>\n",
|
||
" <td>0.0033</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>32</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>117981</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>402.26</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-06-17</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>0.5408</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0029</td>\n",
|
||
" <td>0.0033</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>31</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>118219</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>400.96</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-06-18</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>0.5452</td>\n",
|
||
" <td>-0.0009</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0031</td>\n",
|
||
" <td>0.0033</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>30</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>118457</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>403.67</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-06-19</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>0.5618</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0032</td>\n",
|
||
" <td>0.0032</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>29</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>118645</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>403.40</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-06-22</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>0.5933</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0035</td>\n",
|
||
" <td>0.0030</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>26</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>118833</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>404.04</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-06-23</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>0.6072</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0037</td>\n",
|
||
" <td>0.0030</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>25</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>119021</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>403.84</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-06-24</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>0.6194</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0039</td>\n",
|
||
" <td>0.0029</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>24</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>119209</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>403.12</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-06-25</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>0.6311</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0040</td>\n",
|
||
" <td>0.0029</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>23</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>119397</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>403.45</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-06-26</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>0.6466</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0042</td>\n",
|
||
" <td>0.0028</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>22</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>119585</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>408.94</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-06-29</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>0.7150</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0049</td>\n",
|
||
" <td>0.0025</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>19</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>119773</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>408.14</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-06-30</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>0.7327</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0052</td>\n",
|
||
" <td>0.0025</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>18</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>119961</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>412.88</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-07-01</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>0.7704</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0056</td>\n",
|
||
" <td>0.0024</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>17</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>120149</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>411.79</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-07-02</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>0.7914</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0059</td>\n",
|
||
" <td>0.0023</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>16</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>120339</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>413.84</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-07-06</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>0.9286</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0080</td>\n",
|
||
" <td>0.0020</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>12</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>120529</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>409.16</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-07-07</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>0.9527</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0087</td>\n",
|
||
" <td>0.0019</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>11</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>120719</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>410.28</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-07-08</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>1.0074</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0097</td>\n",
|
||
" <td>0.0018</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>10</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>120909</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>414.22</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-07-09</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>1.0846</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0109</td>\n",
|
||
" <td>0.0017</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>9</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>121099</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>414.62</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-07-10</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>1.1581</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0124</td>\n",
|
||
" <td>0.0016</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>8</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>121289</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>414.87</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-07-13</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>1.5091</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0209</td>\n",
|
||
" <td>0.0012</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>5</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>121479</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>417.68</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-07-14</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>1.7409</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0273</td>\n",
|
||
" <td>0.0010</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>4</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>121669</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>417.10</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-07-15</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>2.0753</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0390</td>\n",
|
||
" <td>0.0009</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>3</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>121859</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>417.54</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-07-16</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>2.7500</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.0683</td>\n",
|
||
" <td>0.0007</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>2</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>122049</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>415.62</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>1992-07-18</td>\n",
|
||
" <td>1992-07-17</td>\n",
|
||
" <td>250.0</td>\n",
|
||
" <td>0.000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>250</td>\n",
|
||
" <td>5.4547</td>\n",
|
||
" <td>-0.0008</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-0.2727</td>\n",
|
||
" <td>0.0003</td>\n",
|
||
" <td>SPX920718P00250000</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" underlying underlying_last optionroot type expiration \\\n",
|
||
"117271 SPX 409.76 SPX920718P00250000 put 1992-07-18 \n",
|
||
"117505 SPX 410.29 SPX920718P00250000 put 1992-07-18 \n",
|
||
"117743 SPX 408.32 SPX920718P00250000 put 1992-07-18 \n",
|
||
"117981 SPX 402.26 SPX920718P00250000 put 1992-07-18 \n",
|
||
"118219 SPX 400.96 SPX920718P00250000 put 1992-07-18 \n",
|
||
"118457 SPX 403.67 SPX920718P00250000 put 1992-07-18 \n",
|
||
"118645 SPX 403.40 SPX920718P00250000 put 1992-07-18 \n",
|
||
"118833 SPX 404.04 SPX920718P00250000 put 1992-07-18 \n",
|
||
"119021 SPX 403.84 SPX920718P00250000 put 1992-07-18 \n",
|
||
"119209 SPX 403.12 SPX920718P00250000 put 1992-07-18 \n",
|
||
"119397 SPX 403.45 SPX920718P00250000 put 1992-07-18 \n",
|
||
"119585 SPX 408.94 SPX920718P00250000 put 1992-07-18 \n",
|
||
"119773 SPX 408.14 SPX920718P00250000 put 1992-07-18 \n",
|
||
"119961 SPX 412.88 SPX920718P00250000 put 1992-07-18 \n",
|
||
"120149 SPX 411.79 SPX920718P00250000 put 1992-07-18 \n",
|
||
"120339 SPX 413.84 SPX920718P00250000 put 1992-07-18 \n",
|
||
"120529 SPX 409.16 SPX920718P00250000 put 1992-07-18 \n",
|
||
"120719 SPX 410.28 SPX920718P00250000 put 1992-07-18 \n",
|
||
"120909 SPX 414.22 SPX920718P00250000 put 1992-07-18 \n",
|
||
"121099 SPX 414.62 SPX920718P00250000 put 1992-07-18 \n",
|
||
"121289 SPX 414.87 SPX920718P00250000 put 1992-07-18 \n",
|
||
"121479 SPX 417.68 SPX920718P00250000 put 1992-07-18 \n",
|
||
"121669 SPX 417.10 SPX920718P00250000 put 1992-07-18 \n",
|
||
"121859 SPX 417.54 SPX920718P00250000 put 1992-07-18 \n",
|
||
"122049 SPX 415.62 SPX920718P00250000 put 1992-07-18 \n",
|
||
"\n",
|
||
" quotedate strike last bid ask volume openinterest impliedvol \\\n",
|
||
"117271 1992-06-12 250.0 0.000 0.0 0.0 0 0 0.5202 \n",
|
||
"117505 1992-06-15 250.0 0.031 0.0 0.0 250 0 0.5463 \n",
|
||
"117743 1992-06-16 250.0 0.000 0.0 0.0 0 0 0.5485 \n",
|
||
"117981 1992-06-17 250.0 0.000 0.0 0.0 0 250 0.5408 \n",
|
||
"118219 1992-06-18 250.0 0.000 0.0 0.0 0 250 0.5452 \n",
|
||
"118457 1992-06-19 250.0 0.000 0.0 0.0 0 250 0.5618 \n",
|
||
"118645 1992-06-22 250.0 0.000 0.0 0.0 0 250 0.5933 \n",
|
||
"118833 1992-06-23 250.0 0.000 0.0 0.0 0 250 0.6072 \n",
|
||
"119021 1992-06-24 250.0 0.000 0.0 0.0 0 250 0.6194 \n",
|
||
"119209 1992-06-25 250.0 0.000 0.0 0.0 0 250 0.6311 \n",
|
||
"119397 1992-06-26 250.0 0.000 0.0 0.0 0 250 0.6466 \n",
|
||
"119585 1992-06-29 250.0 0.000 0.0 0.0 0 250 0.7150 \n",
|
||
"119773 1992-06-30 250.0 0.000 0.0 0.0 0 250 0.7327 \n",
|
||
"119961 1992-07-01 250.0 0.000 0.0 0.0 0 250 0.7704 \n",
|
||
"120149 1992-07-02 250.0 0.000 0.0 0.0 0 250 0.7914 \n",
|
||
"120339 1992-07-06 250.0 0.000 0.0 0.0 0 250 0.9286 \n",
|
||
"120529 1992-07-07 250.0 0.000 0.0 0.0 0 250 0.9527 \n",
|
||
"120719 1992-07-08 250.0 0.000 0.0 0.0 0 250 1.0074 \n",
|
||
"120909 1992-07-09 250.0 0.000 0.0 0.0 0 250 1.0846 \n",
|
||
"121099 1992-07-10 250.0 0.000 0.0 0.0 0 250 1.1581 \n",
|
||
"121289 1992-07-13 250.0 0.000 0.0 0.0 0 250 1.5091 \n",
|
||
"121479 1992-07-14 250.0 0.000 0.0 0.0 0 250 1.7409 \n",
|
||
"121669 1992-07-15 250.0 0.000 0.0 0.0 0 250 2.0753 \n",
|
||
"121859 1992-07-16 250.0 0.000 0.0 0.0 0 250 2.7500 \n",
|
||
"122049 1992-07-17 250.0 0.000 0.0 0.0 0 250 5.4547 \n",
|
||
"\n",
|
||
" delta gamma theta vega optionalias dte \n",
|
||
"117271 -0.0008 0.0 -0.0025 0.0035 SPX920718P00250000 36 \n",
|
||
"117505 -0.0008 0.0 -0.0028 0.0034 SPX920718P00250000 33 \n",
|
||
"117743 -0.0008 0.0 -0.0029 0.0033 SPX920718P00250000 32 \n",
|
||
"117981 -0.0008 0.0 -0.0029 0.0033 SPX920718P00250000 31 \n",
|
||
"118219 -0.0009 0.0 -0.0031 0.0033 SPX920718P00250000 30 \n",
|
||
"118457 -0.0008 0.0 -0.0032 0.0032 SPX920718P00250000 29 \n",
|
||
"118645 -0.0008 0.0 -0.0035 0.0030 SPX920718P00250000 26 \n",
|
||
"118833 -0.0008 0.0 -0.0037 0.0030 SPX920718P00250000 25 \n",
|
||
"119021 -0.0008 0.0 -0.0039 0.0029 SPX920718P00250000 24 \n",
|
||
"119209 -0.0008 0.0 -0.0040 0.0029 SPX920718P00250000 23 \n",
|
||
"119397 -0.0008 0.0 -0.0042 0.0028 SPX920718P00250000 22 \n",
|
||
"119585 -0.0008 0.0 -0.0049 0.0025 SPX920718P00250000 19 \n",
|
||
"119773 -0.0008 0.0 -0.0052 0.0025 SPX920718P00250000 18 \n",
|
||
"119961 -0.0008 0.0 -0.0056 0.0024 SPX920718P00250000 17 \n",
|
||
"120149 -0.0008 0.0 -0.0059 0.0023 SPX920718P00250000 16 \n",
|
||
"120339 -0.0008 0.0 -0.0080 0.0020 SPX920718P00250000 12 \n",
|
||
"120529 -0.0008 0.0 -0.0087 0.0019 SPX920718P00250000 11 \n",
|
||
"120719 -0.0008 0.0 -0.0097 0.0018 SPX920718P00250000 10 \n",
|
||
"120909 -0.0008 0.0 -0.0109 0.0017 SPX920718P00250000 9 \n",
|
||
"121099 -0.0008 0.0 -0.0124 0.0016 SPX920718P00250000 8 \n",
|
||
"121289 -0.0008 0.0 -0.0209 0.0012 SPX920718P00250000 5 \n",
|
||
"121479 -0.0008 0.0 -0.0273 0.0010 SPX920718P00250000 4 \n",
|
||
"121669 -0.0008 0.0 -0.0390 0.0009 SPX920718P00250000 3 \n",
|
||
"121859 -0.0008 0.0 -0.0683 0.0007 SPX920718P00250000 2 \n",
|
||
"122049 -0.0008 0.0 -0.2727 0.0003 SPX920718P00250000 1 "
|
||
]
|
||
},
|
||
"execution_count": 102,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df[df['optionroot'] == 'SPX920718P00250000']"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Another issue are contracts with missing entries like the following, which stops showing up at 358 dte (it also has almost all rows with both ask and bid set to zero, so this is a particularly problematic contract)."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 109,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>underlying</th>\n",
|
||
" <th>underlying_last</th>\n",
|
||
" <th>optionroot</th>\n",
|
||
" <th>type</th>\n",
|
||
" <th>expiration</th>\n",
|
||
" <th>quotedate</th>\n",
|
||
" <th>strike</th>\n",
|
||
" <th>last</th>\n",
|
||
" <th>bid</th>\n",
|
||
" <th>ask</th>\n",
|
||
" <th>volume</th>\n",
|
||
" <th>openinterest</th>\n",
|
||
" <th>impliedvol</th>\n",
|
||
" <th>delta</th>\n",
|
||
" <th>gamma</th>\n",
|
||
" <th>theta</th>\n",
|
||
" <th>vega</th>\n",
|
||
" <th>optionalias</th>\n",
|
||
" <th>dte</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>1120981</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>1165.25</td>\n",
|
||
" <td>SXG031220P01450000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>2003-12-20</td>\n",
|
||
" <td>2002-01-03</td>\n",
|
||
" <td>1450.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.1837</td>\n",
|
||
" <td>-0.7189</td>\n",
|
||
" <td>0.0011</td>\n",
|
||
" <td>-4.9932</td>\n",
|
||
" <td>550.1433</td>\n",
|
||
" <td>SXG031220P01450000</td>\n",
|
||
" <td>716</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1121467</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>1172.50</td>\n",
|
||
" <td>SXG031220P01450000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>2003-12-20</td>\n",
|
||
" <td>2002-01-04</td>\n",
|
||
" <td>1450.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>200</td>\n",
|
||
" <td>0.1780</td>\n",
|
||
" <td>-0.7198</td>\n",
|
||
" <td>0.0012</td>\n",
|
||
" <td>-4.3687</td>\n",
|
||
" <td>552.3557</td>\n",
|
||
" <td>SXG031220P01450000</td>\n",
|
||
" <td>715</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1121957</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>1164.90</td>\n",
|
||
" <td>SXG031220P01450000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>2003-12-20</td>\n",
|
||
" <td>2002-01-07</td>\n",
|
||
" <td>1450.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>200</td>\n",
|
||
" <td>0.1820</td>\n",
|
||
" <td>-0.7230</td>\n",
|
||
" <td>0.0011</td>\n",
|
||
" <td>-4.5666</td>\n",
|
||
" <td>544.5476</td>\n",
|
||
" <td>SXG031220P01450000</td>\n",
|
||
" <td>712</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1122447</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>1160.70</td>\n",
|
||
" <td>SXG031220P01450000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>2003-12-20</td>\n",
|
||
" <td>2002-01-08</td>\n",
|
||
" <td>1450.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>200</td>\n",
|
||
" <td>0.1830</td>\n",
|
||
" <td>-0.7265</td>\n",
|
||
" <td>0.0011</td>\n",
|
||
" <td>-4.3912</td>\n",
|
||
" <td>538.8742</td>\n",
|
||
" <td>SXG031220P01450000</td>\n",
|
||
" <td>711</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1122940</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>1155.15</td>\n",
|
||
" <td>SXG031220P01450000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>2003-12-20</td>\n",
|
||
" <td>2002-01-09</td>\n",
|
||
" <td>1450.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>200</td>\n",
|
||
" <td>0.1846</td>\n",
|
||
" <td>-0.7304</td>\n",
|
||
" <td>0.0011</td>\n",
|
||
" <td>-4.2222</td>\n",
|
||
" <td>532.0289</td>\n",
|
||
" <td>SXG031220P01450000</td>\n",
|
||
" <td>710</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1265123</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>895.82</td>\n",
|
||
" <td>SXG031220P01450000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>2003-12-20</td>\n",
|
||
" <td>2002-12-20</td>\n",
|
||
" <td>1450.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2421</td>\n",
|
||
" <td>0.2241</td>\n",
|
||
" <td>-0.9648</td>\n",
|
||
" <td>0.0002</td>\n",
|
||
" <td>1.5314</td>\n",
|
||
" <td>43.4461</td>\n",
|
||
" <td>SXG031220P01450000</td>\n",
|
||
" <td>365</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1265633</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>897.38</td>\n",
|
||
" <td>SXG031220P01450000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>2003-12-20</td>\n",
|
||
" <td>2002-12-23</td>\n",
|
||
" <td>1450.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2421</td>\n",
|
||
" <td>0.2170</td>\n",
|
||
" <td>-0.9666</td>\n",
|
||
" <td>0.0002</td>\n",
|
||
" <td>0.5313</td>\n",
|
||
" <td>36.1597</td>\n",
|
||
" <td>SXG031220P01450000</td>\n",
|
||
" <td>362</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1266143</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>892.47</td>\n",
|
||
" <td>SXG031220P01450000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>2003-12-20</td>\n",
|
||
" <td>2002-12-24</td>\n",
|
||
" <td>1450.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2419</td>\n",
|
||
" <td>0.2175</td>\n",
|
||
" <td>-0.9667</td>\n",
|
||
" <td>0.0002</td>\n",
|
||
" <td>-0.1834</td>\n",
|
||
" <td>33.7203</td>\n",
|
||
" <td>SXG031220P01450000</td>\n",
|
||
" <td>361</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1266653</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>889.66</td>\n",
|
||
" <td>SXG031220P01450000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>2003-12-20</td>\n",
|
||
" <td>2002-12-26</td>\n",
|
||
" <td>1450.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2419</td>\n",
|
||
" <td>0.2145</td>\n",
|
||
" <td>-0.9651</td>\n",
|
||
" <td>0.0002</td>\n",
|
||
" <td>-3.3717</td>\n",
|
||
" <td>28.2564</td>\n",
|
||
" <td>SXG031220P01450000</td>\n",
|
||
" <td>359</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1267163</th>\n",
|
||
" <td>SPX</td>\n",
|
||
" <td>875.40</td>\n",
|
||
" <td>SXG031220P01450000</td>\n",
|
||
" <td>put</td>\n",
|
||
" <td>2003-12-20</td>\n",
|
||
" <td>2002-12-27</td>\n",
|
||
" <td>1450.0</td>\n",
|
||
" <td>550.0</td>\n",
|
||
" <td>571.3</td>\n",
|
||
" <td>574.3</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2419</td>\n",
|
||
" <td>0.2282</td>\n",
|
||
" <td>-0.9625</td>\n",
|
||
" <td>0.0002</td>\n",
|
||
" <td>-3.8675</td>\n",
|
||
" <td>32.5230</td>\n",
|
||
" <td>SXG031220P01450000</td>\n",
|
||
" <td>358</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>249 rows × 19 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" underlying underlying_last optionroot type expiration \\\n",
|
||
"1120981 SPX 1165.25 SXG031220P01450000 put 2003-12-20 \n",
|
||
"1121467 SPX 1172.50 SXG031220P01450000 put 2003-12-20 \n",
|
||
"1121957 SPX 1164.90 SXG031220P01450000 put 2003-12-20 \n",
|
||
"1122447 SPX 1160.70 SXG031220P01450000 put 2003-12-20 \n",
|
||
"1122940 SPX 1155.15 SXG031220P01450000 put 2003-12-20 \n",
|
||
"... ... ... ... ... ... \n",
|
||
"1265123 SPX 895.82 SXG031220P01450000 put 2003-12-20 \n",
|
||
"1265633 SPX 897.38 SXG031220P01450000 put 2003-12-20 \n",
|
||
"1266143 SPX 892.47 SXG031220P01450000 put 2003-12-20 \n",
|
||
"1266653 SPX 889.66 SXG031220P01450000 put 2003-12-20 \n",
|
||
"1267163 SPX 875.40 SXG031220P01450000 put 2003-12-20 \n",
|
||
"\n",
|
||
" quotedate strike last bid ask volume openinterest \\\n",
|
||
"1120981 2002-01-03 1450.0 0.0 0.0 0.0 0 0 \n",
|
||
"1121467 2002-01-04 1450.0 0.0 0.0 0.0 0 200 \n",
|
||
"1121957 2002-01-07 1450.0 0.0 0.0 0.0 0 200 \n",
|
||
"1122447 2002-01-08 1450.0 0.0 0.0 0.0 0 200 \n",
|
||
"1122940 2002-01-09 1450.0 0.0 0.0 0.0 0 200 \n",
|
||
"... ... ... ... ... ... ... ... \n",
|
||
"1265123 2002-12-20 1450.0 0.0 0.0 0.0 0 2421 \n",
|
||
"1265633 2002-12-23 1450.0 0.0 0.0 0.0 0 2421 \n",
|
||
"1266143 2002-12-24 1450.0 0.0 0.0 0.0 0 2419 \n",
|
||
"1266653 2002-12-26 1450.0 0.0 0.0 0.0 0 2419 \n",
|
||
"1267163 2002-12-27 1450.0 550.0 571.3 574.3 0 2419 \n",
|
||
"\n",
|
||
" impliedvol delta gamma theta vega optionalias dte \n",
|
||
"1120981 0.1837 -0.7189 0.0011 -4.9932 550.1433 SXG031220P01450000 716 \n",
|
||
"1121467 0.1780 -0.7198 0.0012 -4.3687 552.3557 SXG031220P01450000 715 \n",
|
||
"1121957 0.1820 -0.7230 0.0011 -4.5666 544.5476 SXG031220P01450000 712 \n",
|
||
"1122447 0.1830 -0.7265 0.0011 -4.3912 538.8742 SXG031220P01450000 711 \n",
|
||
"1122940 0.1846 -0.7304 0.0011 -4.2222 532.0289 SXG031220P01450000 710 \n",
|
||
"... ... ... ... ... ... ... ... \n",
|
||
"1265123 0.2241 -0.9648 0.0002 1.5314 43.4461 SXG031220P01450000 365 \n",
|
||
"1265633 0.2170 -0.9666 0.0002 0.5313 36.1597 SXG031220P01450000 362 \n",
|
||
"1266143 0.2175 -0.9667 0.0002 -0.1834 33.7203 SXG031220P01450000 361 \n",
|
||
"1266653 0.2145 -0.9651 0.0002 -3.3717 28.2564 SXG031220P01450000 359 \n",
|
||
"1267163 0.2282 -0.9625 0.0002 -3.8675 32.5230 SXG031220P01450000 358 \n",
|
||
"\n",
|
||
"[249 rows x 19 columns]"
|
||
]
|
||
},
|
||
"execution_count": 109,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df[df['optionroot'] == 'SXG031220P01450000']"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Once again, we will drop contracts with missing entries."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 26,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"unique_contracts_per_day = df.groupby('quotedate').apply(lambda x: x['optionroot'].nunique())"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Let's plot the number of contracts per day to compare after the cleanup."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 28,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"needs_background": "light"
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"unique_contracts_per_day.plot();"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 71,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# to_clean is a set with the contracts with missing entries to then drop.\n",
|
||
"current_contracts = set()\n",
|
||
"to_clean = set()\n",
|
||
"for _, options in df.groupby('quotedate'):\n",
|
||
" current_contracts = current_contracts.union(set(options['optionroot']))\n",
|
||
" current_contracts = current_contracts.difference(set(options[options['dte'] <= 1]['optionroot']))\n",
|
||
" missing_contracts = current_contracts.difference(set(options['optionroot']))\n",
|
||
" to_clean = to_clean.union(missing_contracts)\n",
|
||
"to_clean = to_clean.union(current_contracts)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 54,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"to_clean_df = df[df['optionroot'].isin(list(to_clean))]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 55,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"new_df = df.drop(to_clean_df.index)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 56,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"new_df.reset_index(inplace=True, drop=True)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 57,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Drop the contracts that have a row with both their ask and bid zero.\n",
|
||
"contracts_with_zero = new_df[(new_df['ask'] == 0) & (new_df['bid'] == 0)]['optionroot'].unique()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 58,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"final_df = new_df.drop(new_df[new_df['optionroot'].isin(contracts_with_zero)].index)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 59,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"final_df.reset_index(inplace=True, drop=True)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 72,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0.6339574482236837"
|
||
]
|
||
},
|
||
"execution_count": 72,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"final_df['optionroot'].nunique() / df['optionroot'].nunique()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 64,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"(9245562, 19)"
|
||
]
|
||
},
|
||
"execution_count": 64,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"final_df.shape"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 103,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"unique_contracts_per_day_final = final_df.groupby('quotedate').apply(lambda x: x['optionroot'].nunique())"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 105,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"needs_background": "light"
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"unique_contracts_per_day_final.plot();"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 66,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"store_path = os.path.join(\"/Users/jrchatruc/Documents/backtester_options/allspx/\", \"options_data_v2_pruned.h5\")\n",
|
||
"store = pd.HDFStore(store_path, complevel=9, complib=\"blosc\", fletcher32=True)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 68,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"sizes = {\"optionroot\": 20, \"optionalias\": 20}\n",
|
||
"store.append(\"/SPX\", final_df, index=False, data_columns=True, min_itemsize=sizes)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 69,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"store.close()"
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.7.5"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 4
|
||
}
|