Skip to content

Instantly share code, notes, and snippets.

@AnthonyFJGarner
Created October 26, 2018 08:42
Show Gist options
  • Save AnthonyFJGarner/d1bb036228b018ee12849ecd144d76d6 to your computer and use it in GitHub Desktop.
Save AnthonyFJGarner/d1bb036228b018ee12849ecd144d76d6 to your computer and use it in GitHub Desktop.

Revisions

  1. AnthonyFJGarner created this gist Oct 26, 2018.
    1,699 changes: 1,699 additions & 0 deletions Options_Roll_vix.ipynb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,1699 @@
    {
    "cells": [
    {
    "cell_type": "code",
    "execution_count": 2,
    "metadata": {
    "ExecuteTime": {
    "end_time": "2018-10-18T12:45:44.192244Z",
    "start_time": "2018-10-18T12:45:43.850069Z"
    }
    },
    "outputs": [],
    "source": [
    "#Imports\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from typing import Dict, List\n",
    "from collections import OrderedDict\n",
    "import datetime as datetime\n",
    "from pandas.tseries.offsets import *\n",
    "from IPython.core.debugger import set_trace\n",
    "#import pixiedust\n",
    "#ctrl-shift-p for the command palette\n",
    "pd.set_option(\"max_colwidth\", 100)\n",
    "pd.set_option(\"display.max_rows\", 100000)\n",
    "pd.set_option(\"display.max_columns\", 1000)"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 3,
    "metadata": {
    "ExecuteTime": {
    "end_time": "2018-10-18T16:21:37.413860Z",
    "start_time": "2018-10-18T16:21:37.351988Z"
    }
    },
    "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_symbol</th>\n",
    " <th>quote_date</th>\n",
    " <th>root</th>\n",
    " <th>expiration</th>\n",
    " <th>strike</th>\n",
    " <th>option_type</th>\n",
    " <th>open</th>\n",
    " <th>high</th>\n",
    " <th>low</th>\n",
    " <th>close</th>\n",
    " <th>trade_volume</th>\n",
    " <th>bid_size_1545</th>\n",
    " <th>bid_1545</th>\n",
    " <th>ask_size_1545</th>\n",
    " <th>ask_1545</th>\n",
    " <th>underlying_bid_1545</th>\n",
    " <th>underlying_ask_1545</th>\n",
    " <th>bid_size_eod</th>\n",
    " <th>ask_size_eod</th>\n",
    " <th>vwap</th>\n",
    " <th>open_interest</th>\n",
    " <th>delivery_code</th>\n",
    " <th>futures</th>\n",
    " <th>mid_eod</th>\n",
    " <th>mid_underlying</th>\n",
    " </tr>\n",
    " </thead>\n",
    " <tbody>\n",
    " <tr>\n",
    " <th>0</th>\n",
    " <td>^VIX</td>\n",
    " <td>2006-02-27</td>\n",
    " <td>VIX</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>10.0</td>\n",
    " <td>c</td>\n",
    " <td>2.80</td>\n",
    " <td>2.80</td>\n",
    " <td>2.8</td>\n",
    " <td>2.8</td>\n",
    " <td>10.0</td>\n",
    " <td>1.0</td>\n",
    " <td>2.70</td>\n",
    " <td>50.0</td>\n",
    " <td>2.90</td>\n",
    " <td>11.47</td>\n",
    " <td>11.47</td>\n",
    " <td>1.0</td>\n",
    " <td>10.0</td>\n",
    " <td>2.80</td>\n",
    " <td>23.0</td>\n",
    " <td>0</td>\n",
    " <td>12.5</td>\n",
    " <td>2.950</td>\n",
    " <td>11.59</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>1</th>\n",
    " <td>^VIX</td>\n",
    " <td>2006-02-27</td>\n",
    " <td>VIX</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>10.0</td>\n",
    " <td>p</td>\n",
    " <td>0.00</td>\n",
    " <td>0.00</td>\n",
    " <td>0.0</td>\n",
    " <td>0.0</td>\n",
    " <td>0.0</td>\n",
    " <td>0.0</td>\n",
    " <td>0.00</td>\n",
    " <td>50.0</td>\n",
    " <td>0.15</td>\n",
    " <td>11.47</td>\n",
    " <td>11.47</td>\n",
    " <td>0.0</td>\n",
    " <td>50.0</td>\n",
    " <td>0.00</td>\n",
    " <td>0.0</td>\n",
    " <td>0</td>\n",
    " <td>12.5</td>\n",
    " <td>0.075</td>\n",
    " <td>11.59</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>2</th>\n",
    " <td>^VIX</td>\n",
    " <td>2006-02-27</td>\n",
    " <td>VIX</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>12.5</td>\n",
    " <td>c</td>\n",
    " <td>1.15</td>\n",
    " <td>1.15</td>\n",
    " <td>1.1</td>\n",
    " <td>1.1</td>\n",
    " <td>30.0</td>\n",
    " <td>10.0</td>\n",
    " <td>1.15</td>\n",
    " <td>50.0</td>\n",
    " <td>1.20</td>\n",
    " <td>11.47</td>\n",
    " <td>11.47</td>\n",
    " <td>10.0</td>\n",
    " <td>10.0</td>\n",
    " <td>1.13</td>\n",
    " <td>560.0</td>\n",
    " <td>0</td>\n",
    " <td>12.5</td>\n",
    " <td>1.300</td>\n",
    " <td>11.59</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>3</th>\n",
    " <td>^VIX</td>\n",
    " <td>2006-02-27</td>\n",
    " <td>VIX</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>12.5</td>\n",
    " <td>p</td>\n",
    " <td>0.00</td>\n",
    " <td>0.00</td>\n",
    " <td>0.0</td>\n",
    " <td>0.0</td>\n",
    " <td>0.0</td>\n",
    " <td>50.0</td>\n",
    " <td>0.75</td>\n",
    " <td>1.0</td>\n",
    " <td>0.90</td>\n",
    " <td>11.47</td>\n",
    " <td>11.47</td>\n",
    " <td>10.0</td>\n",
    " <td>10.0</td>\n",
    " <td>0.00</td>\n",
    " <td>975.0</td>\n",
    " <td>0</td>\n",
    " <td>12.5</td>\n",
    " <td>0.875</td>\n",
    " <td>11.59</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>4</th>\n",
    " <td>^VIX</td>\n",
    " <td>2006-02-27</td>\n",
    " <td>VIX</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>12.5</td>\n",
    " <td>c</td>\n",
    " <td>0.00</td>\n",
    " <td>0.00</td>\n",
    " <td>0.0</td>\n",
    " <td>0.0</td>\n",
    " <td>0.0</td>\n",
    " <td>0.0</td>\n",
    " <td>0.00</td>\n",
    " <td>0.0</td>\n",
    " <td>0.00</td>\n",
    " <td>11.47</td>\n",
    " <td>11.47</td>\n",
    " <td>0.0</td>\n",
    " <td>0.0</td>\n",
    " <td>0.00</td>\n",
    " <td>0.0</td>\n",
    " <td>0</td>\n",
    " <td>12.5</td>\n",
    " <td>0.000</td>\n",
    " <td>11.59</td>\n",
    " </tr>\n",
    " </tbody>\n",
    "</table>\n",
    "</div>"
    ],
    "text/plain": [
    " underlying_symbol quote_date root expiration strike option_type open \\\n",
    "0 ^VIX 2006-02-27 VIX 2006-04-19 10.0 c 2.80 \n",
    "1 ^VIX 2006-02-27 VIX 2006-04-19 10.0 p 0.00 \n",
    "2 ^VIX 2006-02-27 VIX 2006-04-19 12.5 c 1.15 \n",
    "3 ^VIX 2006-02-27 VIX 2006-04-19 12.5 p 0.00 \n",
    "4 ^VIX 2006-02-27 VIX 2006-04-19 12.5 c 0.00 \n",
    "\n",
    " high low close trade_volume bid_size_1545 bid_1545 ask_size_1545 \\\n",
    "0 2.80 2.8 2.8 10.0 1.0 2.70 50.0 \n",
    "1 0.00 0.0 0.0 0.0 0.0 0.00 50.0 \n",
    "2 1.15 1.1 1.1 30.0 10.0 1.15 50.0 \n",
    "3 0.00 0.0 0.0 0.0 50.0 0.75 1.0 \n",
    "4 0.00 0.0 0.0 0.0 0.0 0.00 0.0 \n",
    "\n",
    " ask_1545 underlying_bid_1545 underlying_ask_1545 bid_size_eod \\\n",
    "0 2.90 11.47 11.47 1.0 \n",
    "1 0.15 11.47 11.47 0.0 \n",
    "2 1.20 11.47 11.47 10.0 \n",
    "3 0.90 11.47 11.47 10.0 \n",
    "4 0.00 11.47 11.47 0.0 \n",
    "\n",
    " ask_size_eod vwap open_interest delivery_code futures mid_eod \\\n",
    "0 10.0 2.80 23.0 0 12.5 2.950 \n",
    "1 50.0 0.00 0.0 0 12.5 0.075 \n",
    "2 10.0 1.13 560.0 0 12.5 1.300 \n",
    "3 10.0 0.00 975.0 0 12.5 0.875 \n",
    "4 0.0 0.00 0.0 0 12.5 0.000 \n",
    "\n",
    " mid_underlying \n",
    "0 11.59 \n",
    "1 11.59 \n",
    "2 11.59 \n",
    "3 11.59 \n",
    "4 11.59 "
    ]
    },
    "execution_count": 3,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "options_data = '../data/Options/vix_w_futures.csv'\n",
    "\n",
    "options = pd.read_csv(\n",
    " options_data,\n",
    " header=0,\n",
    " parse_dates=[\"quote_date\", \"expiration\"],\n",
    ")\n",
    "options.head()"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 4,
    "metadata": {
    "ExecuteTime": {
    "end_time": "2018-10-18T12:45:50.874434Z",
    "start_time": "2018-10-18T12:45:50.860470Z"
    }
    },
    "outputs": [],
    "source": [
    "expiry_dates=options.expiration.unique()"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 5,
    "metadata": {
    "ExecuteTime": {
    "end_time": "2018-10-06T16:29:13.028743Z",
    "start_time": "2018-10-06T16:29:12.018163Z"
    },
    "scrolled": true
    },
    "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>quote_date</th>\n",
    " <th>expiration</th>\n",
    " <th>strike</th>\n",
    " <th>trade_volume</th>\n",
    " <th>futures</th>\n",
    " <th>mid_eod</th>\n",
    " <th>mid_underlying</th>\n",
    " </tr>\n",
    " </thead>\n",
    " <tbody>\n",
    " <tr>\n",
    " <th>0</th>\n",
    " <td>2006-02-27</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>10.0</td>\n",
    " <td>0.0</td>\n",
    " <td>12.5</td>\n",
    " <td>0.075</td>\n",
    " <td>11.59</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>1</th>\n",
    " <td>2006-02-27</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>12.5</td>\n",
    " <td>0.0</td>\n",
    " <td>12.5</td>\n",
    " <td>0.875</td>\n",
    " <td>11.59</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>2</th>\n",
    " <td>2006-02-27</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>12.5</td>\n",
    " <td>0.0</td>\n",
    " <td>12.5</td>\n",
    " <td>0.000</td>\n",
    " <td>11.59</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>3</th>\n",
    " <td>2006-02-27</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>15.0</td>\n",
    " <td>0.0</td>\n",
    " <td>12.5</td>\n",
    " <td>2.700</td>\n",
    " <td>11.59</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>4</th>\n",
    " <td>2006-02-27</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>15.0</td>\n",
    " <td>0.0</td>\n",
    " <td>12.5</td>\n",
    " <td>0.000</td>\n",
    " <td>11.59</td>\n",
    " </tr>\n",
    " </tbody>\n",
    "</table>\n",
    "</div>"
    ],
    "text/plain": [
    " quote_date expiration strike trade_volume futures mid_eod \\\n",
    "0 2006-02-27 2006-04-19 10.0 0.0 12.5 0.075 \n",
    "1 2006-02-27 2006-04-19 12.5 0.0 12.5 0.875 \n",
    "2 2006-02-27 2006-04-19 12.5 0.0 12.5 0.000 \n",
    "3 2006-02-27 2006-04-19 15.0 0.0 12.5 2.700 \n",
    "4 2006-02-27 2006-04-19 15.0 0.0 12.5 0.000 \n",
    "\n",
    " mid_underlying \n",
    "0 11.59 \n",
    "1 11.59 \n",
    "2 11.59 \n",
    "3 11.59 \n",
    "4 11.59 "
    ]
    },
    "execution_count": 5,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "puts_data = '../data/Options/vixPuts.csv'\n",
    "#puts_data='../data/Options/vxxPuts.csv'\n",
    "puts = pd.read_csv(\n",
    " puts_data,\n",
    " header=0,\n",
    " parse_dates=[\"quote_date\", \"expiration\"],\n",
    " usecols=[\n",
    " \"quote_date\", \"expiration\", \"strike\", 'trade_volume',\"mid_eod\", \"mid_underlying\",\"futures\"\n",
    " ])\n",
    "puts.head()"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 6,
    "metadata": {
    "ExecuteTime": {
    "end_time": "2018-10-06T16:29:13.040391Z",
    "start_time": "2018-10-06T16:29:13.031414Z"
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "154"
    ]
    },
    "execution_count": 6,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "len(puts.expiration.unique())"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 7,
    "metadata": {
    "ExecuteTime": {
    "end_time": "2018-10-06T16:29:13.126238Z",
    "start_time": "2018-10-06T16:29:13.042385Z"
    }
    },
    "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>quote_date</th>\n",
    " <th>expiration</th>\n",
    " <th>strike</th>\n",
    " <th>trade_volume</th>\n",
    " <th>futures</th>\n",
    " <th>mid_eod</th>\n",
    " <th>mid_underlying</th>\n",
    " <th>DSame</th>\n",
    " <th>MSame</th>\n",
    " </tr>\n",
    " </thead>\n",
    " <tbody>\n",
    " <tr>\n",
    " <th>0</th>\n",
    " <td>2006-02-27</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>10.0</td>\n",
    " <td>0.0</td>\n",
    " <td>12.5</td>\n",
    " <td>0.075</td>\n",
    " <td>11.59</td>\n",
    " <td>True</td>\n",
    " <td>False</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>1</th>\n",
    " <td>2006-02-27</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>12.5</td>\n",
    " <td>0.0</td>\n",
    " <td>12.5</td>\n",
    " <td>0.875</td>\n",
    " <td>11.59</td>\n",
    " <td>True</td>\n",
    " <td>False</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>2</th>\n",
    " <td>2006-02-27</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>12.5</td>\n",
    " <td>0.0</td>\n",
    " <td>12.5</td>\n",
    " <td>0.000</td>\n",
    " <td>11.59</td>\n",
    " <td>True</td>\n",
    " <td>False</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>3</th>\n",
    " <td>2006-02-27</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>15.0</td>\n",
    " <td>0.0</td>\n",
    " <td>12.5</td>\n",
    " <td>2.700</td>\n",
    " <td>11.59</td>\n",
    " <td>True</td>\n",
    " <td>False</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>4</th>\n",
    " <td>2006-02-27</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>15.0</td>\n",
    " <td>0.0</td>\n",
    " <td>12.5</td>\n",
    " <td>0.000</td>\n",
    " <td>11.59</td>\n",
    " <td>True</td>\n",
    " <td>False</td>\n",
    " </tr>\n",
    " </tbody>\n",
    "</table>\n",
    "</div>"
    ],
    "text/plain": [
    " quote_date expiration strike trade_volume futures mid_eod \\\n",
    "0 2006-02-27 2006-04-19 10.0 0.0 12.5 0.075 \n",
    "1 2006-02-27 2006-04-19 12.5 0.0 12.5 0.875 \n",
    "2 2006-02-27 2006-04-19 12.5 0.0 12.5 0.000 \n",
    "3 2006-02-27 2006-04-19 15.0 0.0 12.5 2.700 \n",
    "4 2006-02-27 2006-04-19 15.0 0.0 12.5 0.000 \n",
    "\n",
    " mid_underlying DSame MSame \n",
    "0 11.59 True False \n",
    "1 11.59 True False \n",
    "2 11.59 True False \n",
    "3 11.59 True False \n",
    "4 11.59 True False "
    ]
    },
    "execution_count": 7,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "#insert some column markers so we know when days, months change\n",
    "\n",
    "first_filter=puts.quote_date.isin(expiry_dates)\n",
    "second_filter=puts.quote_date.isin(expiry_dates).shift(1)\n",
    "\n",
    "puts['DSame'] = puts.quote_date.eq(puts.quote_date.shift(-1))\n",
    "#puts['MSame'] = puts.quote_date.dt.month.eq(\n",
    "# puts.quote_date.dt.month.shift(1))\n",
    "puts['MSame']=(first_filter==True) & (second_filter==False)\n",
    "\n",
    "puts.head()"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 8,
    "metadata": {
    "ExecuteTime": {
    "end_time": "2018-10-06T16:29:14.148457Z",
    "start_time": "2018-10-06T16:29:13.127157Z"
    }
    },
    "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>quote_date</th>\n",
    " <th>expiration</th>\n",
    " <th>strike</th>\n",
    " <th>trade_volume</th>\n",
    " <th>futures</th>\n",
    " <th>mid_eod</th>\n",
    " <th>mid_underlying</th>\n",
    " </tr>\n",
    " </thead>\n",
    " <tbody>\n",
    " <tr>\n",
    " <th>0</th>\n",
    " <td>2006-02-27</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>10.0</td>\n",
    " <td>10.0</td>\n",
    " <td>12.5</td>\n",
    " <td>2.95</td>\n",
    " <td>11.59</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>1</th>\n",
    " <td>2006-02-27</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>12.5</td>\n",
    " <td>30.0</td>\n",
    " <td>12.5</td>\n",
    " <td>1.30</td>\n",
    " <td>11.59</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>2</th>\n",
    " <td>2006-02-27</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>12.5</td>\n",
    " <td>0.0</td>\n",
    " <td>12.5</td>\n",
    " <td>0.00</td>\n",
    " <td>11.59</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>3</th>\n",
    " <td>2006-02-27</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>15.0</td>\n",
    " <td>3001.0</td>\n",
    " <td>12.5</td>\n",
    " <td>0.65</td>\n",
    " <td>11.59</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>4</th>\n",
    " <td>2006-02-27</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>15.0</td>\n",
    " <td>0.0</td>\n",
    " <td>12.5</td>\n",
    " <td>0.00</td>\n",
    " <td>11.59</td>\n",
    " </tr>\n",
    " </tbody>\n",
    "</table>\n",
    "</div>"
    ],
    "text/plain": [
    " quote_date expiration strike trade_volume futures mid_eod \\\n",
    "0 2006-02-27 2006-04-19 10.0 10.0 12.5 2.95 \n",
    "1 2006-02-27 2006-04-19 12.5 30.0 12.5 1.30 \n",
    "2 2006-02-27 2006-04-19 12.5 0.0 12.5 0.00 \n",
    "3 2006-02-27 2006-04-19 15.0 3001.0 12.5 0.65 \n",
    "4 2006-02-27 2006-04-19 15.0 0.0 12.5 0.00 \n",
    "\n",
    " mid_underlying \n",
    "0 11.59 \n",
    "1 11.59 \n",
    "2 11.59 \n",
    "3 11.59 \n",
    "4 11.59 "
    ]
    },
    "execution_count": 8,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "calls_data = '../data/Options/vixCalls.csv'\n",
    "#calls_data='../data/Options/vxxCalls.csv'\n",
    "\n",
    "calls = pd.read_csv(\n",
    " calls_data,\n",
    " header=0,\n",
    " parse_dates=[\"quote_date\", \"expiration\"],\n",
    " usecols=[\n",
    " \"quote_date\", \"expiration\", \"strike\", 'trade_volume', \"mid_eod\",\n",
    " \"mid_underlying\",\"futures\"\n",
    " ])\n",
    "calls.head()"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 9,
    "metadata": {
    "ExecuteTime": {
    "end_time": "2018-10-06T16:29:14.158402Z",
    "start_time": "2018-10-06T16:29:14.149422Z"
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "154"
    ]
    },
    "execution_count": 9,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "len(calls.expiration.unique())"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 10,
    "metadata": {
    "ExecuteTime": {
    "end_time": "2018-10-06T16:29:14.316981Z",
    "start_time": "2018-10-06T16:29:14.159396Z"
    }
    },
    "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>quote_date</th>\n",
    " <th>expiration</th>\n",
    " <th>strike</th>\n",
    " <th>trade_volume</th>\n",
    " <th>futures</th>\n",
    " <th>mid_eod</th>\n",
    " <th>mid_underlying</th>\n",
    " <th>DSame</th>\n",
    " <th>MSame</th>\n",
    " </tr>\n",
    " </thead>\n",
    " <tbody>\n",
    " <tr>\n",
    " <th>0</th>\n",
    " <td>2006-02-27</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>10.0</td>\n",
    " <td>10.0</td>\n",
    " <td>12.5</td>\n",
    " <td>2.95</td>\n",
    " <td>11.59</td>\n",
    " <td>True</td>\n",
    " <td>False</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>1</th>\n",
    " <td>2006-02-27</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>12.5</td>\n",
    " <td>30.0</td>\n",
    " <td>12.5</td>\n",
    " <td>1.30</td>\n",
    " <td>11.59</td>\n",
    " <td>True</td>\n",
    " <td>False</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>2</th>\n",
    " <td>2006-02-27</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>12.5</td>\n",
    " <td>0.0</td>\n",
    " <td>12.5</td>\n",
    " <td>0.00</td>\n",
    " <td>11.59</td>\n",
    " <td>True</td>\n",
    " <td>False</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>3</th>\n",
    " <td>2006-02-27</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>15.0</td>\n",
    " <td>3001.0</td>\n",
    " <td>12.5</td>\n",
    " <td>0.65</td>\n",
    " <td>11.59</td>\n",
    " <td>True</td>\n",
    " <td>False</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>4</th>\n",
    " <td>2006-02-27</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>15.0</td>\n",
    " <td>0.0</td>\n",
    " <td>12.5</td>\n",
    " <td>0.00</td>\n",
    " <td>11.59</td>\n",
    " <td>True</td>\n",
    " <td>False</td>\n",
    " </tr>\n",
    " </tbody>\n",
    "</table>\n",
    "</div>"
    ],
    "text/plain": [
    " quote_date expiration strike trade_volume futures mid_eod \\\n",
    "0 2006-02-27 2006-04-19 10.0 10.0 12.5 2.95 \n",
    "1 2006-02-27 2006-04-19 12.5 30.0 12.5 1.30 \n",
    "2 2006-02-27 2006-04-19 12.5 0.0 12.5 0.00 \n",
    "3 2006-02-27 2006-04-19 15.0 3001.0 12.5 0.65 \n",
    "4 2006-02-27 2006-04-19 15.0 0.0 12.5 0.00 \n",
    "\n",
    " mid_underlying DSame MSame \n",
    "0 11.59 True False \n",
    "1 11.59 True False \n",
    "2 11.59 True False \n",
    "3 11.59 True False \n",
    "4 11.59 True False "
    ]
    },
    "execution_count": 10,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "#insert some column markers so we know when days, months change\n",
    "first_filter=calls.quote_date.isin(expiry_dates)\n",
    "second_filter=calls.quote_date.isin(expiry_dates).shift(1)\n",
    "calls['DSame'] = calls.quote_date.eq(calls.quote_date.shift(-1))\n",
    "#calls['MSame'] = calls.quote_date.dt.month.eq(\n",
    " #calls.quote_date.dt.month.shift(1))\n",
    "calls['MSame'] =(first_filter==True) & (second_filter==False)\n",
    "calls.head()"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 11,
    "metadata": {
    "ExecuteTime": {
    "end_time": "2018-10-06T17:11:40.171377Z",
    "start_time": "2018-10-06T17:11:40.167387Z"
    }
    },
    "outputs": [],
    "source": [
    "#initialise variables\n",
    "#what length of option are you looking for in days?\n",
    "put_Expiration = int(200)\n",
    "#<1=OTM, 1=ATM, >1=ITM\n",
    "put_moneyness=1.00"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 12,
    "metadata": {
    "ExecuteTime": {
    "end_time": "2018-10-06T17:11:54.603705Z",
    "start_time": "2018-10-06T17:11:40.897416Z"
    },
    "code_folding": [],
    "pixiedust": {
    "displayParams": {}
    }
    },
    "outputs": [],
    "source": [
    "#%%pixie_debugger\n",
    "#initialise variables\n",
    "\n",
    "temp_puts = {}\n",
    "a = 0\n",
    "for i, row in enumerate(puts.itertuples(), 0):\n",
    "\n",
    " if i == 0:\n",
    " start = False\n",
    " #break\n",
    " if (row.MSame == True):\n",
    " #reset target expiration, target strike 1st day of each month\n",
    " start=True\n",
    " newMonth = row.quote_date\n",
    " targetExpiration = row.quote_date + put_Expiration * Day()\n",
    " targetExpirationDifference = abs(row.expiration - targetExpiration)\n",
    " #if row.mid_underlying <20: put_moneyness= 1.00\n",
    " #if row.mid_underlying >20 and row.mid_underlying <30: put_moneyness= 1.00\n",
    " #if row.mid_underlying >30: put_moneyness= 0.80\n",
    " strikeTarget = row.mid_underlying * put_moneyness\n",
    " myStrikeDiff = abs(row.strike - strikeTarget)\n",
    " tempExpiration = row.expiration\n",
    " strikeLocation = (i)\n",
    " if start == True:\n",
    "\n",
    " if row.quote_date == newMonth and row.MSame == False:\n",
    " #iterate through the many different expirations and strikes for the first day of the new month\n",
    " #find the closest match to (a) targetExpiration and then (b) targetStrike\n",
    "\n",
    " if abs(targetExpiration -\n",
    " row.expiration) < targetExpirationDifference:\n",
    "\n",
    " #error correction routine - when diff between target expiration and expiration continues to decline,\n",
    " #algo chooses the closer expirataion and then moves onto choose closest strike\n",
    " targetExpirationDifference = abs(targetExpiration -\n",
    " row.expiration)\n",
    " myStrikeDiff = abs(row.strike - strikeTarget)\n",
    " tempExpiration = row.expiration\n",
    " strikeLocation = (i)\n",
    "\n",
    " if tempExpiration == row.expiration:\n",
    " if abs(strikeTarget - row.strike) <= myStrikeDiff:\n",
    " myStrikeDiff = abs(strikeTarget - row.strike)\n",
    " strikeLocation = (i)\n",
    "\n",
    " #closest to target expiration has been chosen. Using error correction algo now chooses\n",
    " #strike nearest to target strike\n",
    "\n",
    " if row.quote_date == newMonth and row.DSame == False:\n",
    " temp_puts[puts.quote_date[i]] = [\n",
    " i,\n",
    " puts.quote_date[i],\n",
    " puts.expiration[strikeLocation],\n",
    " puts.strike[strikeLocation],\n",
    " puts.trade_volume[strikeLocation],\n",
    " puts.mid_eod[strikeLocation], #today's price \n",
    " newMonth,\n",
    " targetExpiration,\n",
    " targetExpirationDifference,\n",
    " puts.mid_underlying[strikeLocation],\n",
    " puts.futures[strikeLocation],\n",
    " strikeTarget,\n",
    " strikeLocation,\n",
    " myStrikeDiff\n",
    " ]\n",
    "\n",
    " if row.quote_date != newMonth and row.MSame == False:\n",
    " if row.expiration == puts.expiration[strikeLocation] and row.strike == puts.strike[strikeLocation]:\n",
    " temp_puts[puts.quote_date[i]] = [\n",
    " i,\n",
    " puts.quote_date[i],\n",
    " puts.expiration[strikeLocation],\n",
    " puts.strike[strikeLocation],\n",
    " puts.trade_volume[i],\n",
    " puts.mid_eod[i], #today's price \n",
    " newMonth,\n",
    " targetExpiration,\n",
    " targetExpirationDifference,\n",
    " puts.mid_underlying[i],\n",
    " puts.futures[i],\n",
    " strikeTarget,\n",
    " strikeLocation,\n",
    " myStrikeDiff\n",
    " ]"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 13,
    "metadata": {
    "ExecuteTime": {
    "end_time": "2018-10-06T17:11:54.750309Z",
    "start_time": "2018-10-06T17:11:54.604700Z"
    },
    "code_folding": [],
    "scrolled": false
    },
    "outputs": [],
    "source": [
    "rolling_puts = pd.DataFrame(temp_puts).T.fillna(method='ffill')\n",
    "rolling_puts.index.name = 'Date'\n",
    "rolling_puts.columns = [\n",
    " 'i', 'quote_date', 'expiration', 'strike', 'trade_volume', 'price',\n",
    " 'newMonth', 'targetExpiration', 'ExpDiff', 'mid_underlying','futures',\n",
    " 'strikeTarget', 'strikeLocation', 'StrikeDiff'\n",
    "]\n",
    "first_filter=rolling_puts.quote_date.isin(expiry_dates)\n",
    "second_filter=rolling_puts.quote_date.isin(expiry_dates).shift(1)\n",
    "rolling_puts['entry'] =(first_filter==True) & (second_filter==False)\n",
    "rolling_puts['exit'] =rolling_puts.entry.shift(-1)\n",
    "#rolling_puts['exit'] =(first_filter==True) & (second_filter==False)\n"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 14,
    "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>i</th>\n",
    " <th>quote_date</th>\n",
    " <th>expiration</th>\n",
    " <th>strike</th>\n",
    " <th>trade_volume</th>\n",
    " <th>price</th>\n",
    " <th>newMonth</th>\n",
    " <th>targetExpiration</th>\n",
    " <th>ExpDiff</th>\n",
    " <th>mid_underlying</th>\n",
    " <th>futures</th>\n",
    " <th>strikeTarget</th>\n",
    " <th>strikeLocation</th>\n",
    " <th>StrikeDiff</th>\n",
    " <th>entry</th>\n",
    " <th>exit</th>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>Date</th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " </tr>\n",
    " </thead>\n",
    " <tbody>\n",
    " <tr>\n",
    " <th>2006-04-19</th>\n",
    " <td>714</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>2006-05-17</td>\n",
    " <td>22.5</td>\n",
    " <td>0.0</td>\n",
    " <td>9.90</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>2006-11-05</td>\n",
    " <td>172 days</td>\n",
    " <td>11.32</td>\n",
    " <td>22.5</td>\n",
    " <td>11.32</td>\n",
    " <td>714</td>\n",
    " <td>11.18</td>\n",
    " <td>False</td>\n",
    " <td>False</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>2006-04-20</th>\n",
    " <td>721</td>\n",
    " <td>2006-04-20</td>\n",
    " <td>2006-05-17</td>\n",
    " <td>22.5</td>\n",
    " <td>0.0</td>\n",
    " <td>12.55</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>2006-11-05</td>\n",
    " <td>172 days</td>\n",
    " <td>11.64</td>\n",
    " <td>12.5</td>\n",
    " <td>11.32</td>\n",
    " <td>714</td>\n",
    " <td>11.18</td>\n",
    " <td>False</td>\n",
    " <td>False</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>2006-04-21</th>\n",
    " <td>729</td>\n",
    " <td>2006-04-21</td>\n",
    " <td>2006-05-17</td>\n",
    " <td>22.5</td>\n",
    " <td>0.0</td>\n",
    " <td>12.35</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>2006-11-05</td>\n",
    " <td>172 days</td>\n",
    " <td>11.59</td>\n",
    " <td>12.5</td>\n",
    " <td>11.32</td>\n",
    " <td>714</td>\n",
    " <td>11.18</td>\n",
    " <td>False</td>\n",
    " <td>False</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>2006-04-24</th>\n",
    " <td>768</td>\n",
    " <td>2006-04-24</td>\n",
    " <td>2006-05-17</td>\n",
    " <td>22.5</td>\n",
    " <td>20.0</td>\n",
    " <td>12.45</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>2006-11-05</td>\n",
    " <td>172 days</td>\n",
    " <td>11.75</td>\n",
    " <td>12.5</td>\n",
    " <td>11.32</td>\n",
    " <td>714</td>\n",
    " <td>11.18</td>\n",
    " <td>False</td>\n",
    " <td>False</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>2006-04-25</th>\n",
    " <td>807</td>\n",
    " <td>2006-04-25</td>\n",
    " <td>2006-05-17</td>\n",
    " <td>22.5</td>\n",
    " <td>0.0</td>\n",
    " <td>9.90</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>2006-11-05</td>\n",
    " <td>172 days</td>\n",
    " <td>11.76</td>\n",
    " <td>12.5</td>\n",
    " <td>11.32</td>\n",
    " <td>714</td>\n",
    " <td>11.18</td>\n",
    " <td>False</td>\n",
    " <td>False</td>\n",
    " </tr>\n",
    " </tbody>\n",
    "</table>\n",
    "</div>"
    ],
    "text/plain": [
    " i quote_date expiration strike trade_volume price newMonth \\\n",
    "Date \n",
    "2006-04-19 714 2006-04-19 2006-05-17 22.5 0.0 9.90 2006-04-19 \n",
    "2006-04-20 721 2006-04-20 2006-05-17 22.5 0.0 12.55 2006-04-19 \n",
    "2006-04-21 729 2006-04-21 2006-05-17 22.5 0.0 12.35 2006-04-19 \n",
    "2006-04-24 768 2006-04-24 2006-05-17 22.5 20.0 12.45 2006-04-19 \n",
    "2006-04-25 807 2006-04-25 2006-05-17 22.5 0.0 9.90 2006-04-19 \n",
    "\n",
    " targetExpiration ExpDiff mid_underlying futures strikeTarget \\\n",
    "Date \n",
    "2006-04-19 2006-11-05 172 days 11.32 22.5 11.32 \n",
    "2006-04-20 2006-11-05 172 days 11.64 12.5 11.32 \n",
    "2006-04-21 2006-11-05 172 days 11.59 12.5 11.32 \n",
    "2006-04-24 2006-11-05 172 days 11.75 12.5 11.32 \n",
    "2006-04-25 2006-11-05 172 days 11.76 12.5 11.32 \n",
    "\n",
    " strikeLocation StrikeDiff entry exit \n",
    "Date \n",
    "2006-04-19 714 11.18 False False \n",
    "2006-04-20 714 11.18 False False \n",
    "2006-04-21 714 11.18 False False \n",
    "2006-04-24 714 11.18 False False \n",
    "2006-04-25 714 11.18 False False "
    ]
    },
    "execution_count": 14,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "rolling_puts.head()"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 15,
    "metadata": {
    "ExecuteTime": {
    "end_time": "2018-10-06T17:11:54.882955Z",
    "start_time": "2018-10-06T17:11:54.751322Z"
    }
    },
    "outputs": [],
    "source": [
    "#puts_file='../data/Options/vxxRolling_puts.csv'\n",
    "puts_file='../data/Options/vix_rolling_puts.csv'\n",
    "rolling_puts.to_csv(puts_file)"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 16,
    "metadata": {
    "ExecuteTime": {
    "end_time": "2018-10-06T17:13:17.875042Z",
    "start_time": "2018-10-06T17:13:17.871053Z"
    }
    },
    "outputs": [],
    "source": [
    "#initialise variables\n",
    "#what length of option are you looking for in days?\n",
    "call_Expiration = int(200)\n",
    "#<1=ITM, 1=ATM, >1=OTM\n",
    "call_moneyness = 2.00"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 17,
    "metadata": {
    "ExecuteTime": {
    "end_time": "2018-10-06T17:13:32.295572Z",
    "start_time": "2018-10-06T17:13:18.632102Z"
    }
    },
    "outputs": [],
    "source": [
    "#%%pixie_debugger\n",
    "#initialise variables\n",
    "\n",
    "temp_calls = {}\n",
    "a = 0\n",
    "for i, row in enumerate(calls.itertuples(), 0):\n",
    "\n",
    " if i == 0:\n",
    " start = False\n",
    " #break\n",
    " if (row.MSame == True):\n",
    " #reset target expiration, target strike 1st day of each month\n",
    " start=True\n",
    " newMonth = row.quote_date\n",
    " targetExpiration = row.quote_date + call_Expiration * Day()\n",
    " targetExpirationDifference = abs(row.expiration - targetExpiration)\n",
    " strikeTarget = row.mid_underlying * call_moneyness\n",
    " myStrikeDiff = abs(row.strike - strikeTarget)\n",
    " tempExpiration = row.expiration\n",
    " strikeLocation = (i)\n",
    " if start == True:\n",
    "\n",
    " if row.quote_date == newMonth and row.MSame == False:\n",
    " #iterate through the many different expirations and strikes for the first day of the new month\n",
    " #find the closest match to (a) targetExpiration and then (b) targetStrike\n",
    "\n",
    " if abs(targetExpiration -\n",
    " row.expiration) < targetExpirationDifference:\n",
    "\n",
    " #error correction routine - when diff between target expiration and expiration continues to decline,\n",
    " #algo chooses the closer expirataion and then moves onto choose closest strike\n",
    " targetExpirationDifference = abs(targetExpiration -\n",
    " row.expiration)\n",
    " myStrikeDiff = abs(row.strike - strikeTarget)\n",
    " tempExpiration = row.expiration\n",
    " strikeLocation = (i)\n",
    "\n",
    " if tempExpiration == row.expiration:\n",
    " if abs(strikeTarget - row.strike) <= myStrikeDiff:\n",
    " myStrikeDiff = abs(strikeTarget - row.strike)\n",
    " strikeLocation = (i)\n",
    "\n",
    "# #closest to target expiration has been chosen. Using error correction algo now chooses\n",
    "#strike nearest to target strike\n",
    "\n",
    " if row.quote_date == newMonth and row.DSame == False:\n",
    "\n",
    " temp_calls[calls.quote_date[i]] = [\n",
    " i,\n",
    " calls.quote_date[i],\n",
    " calls.expiration[strikeLocation],\n",
    " calls.strike[strikeLocation],\n",
    " calls.trade_volume[strikeLocation],\n",
    " calls.mid_eod[strikeLocation], #today's price \n",
    " newMonth,\n",
    " targetExpiration,\n",
    " targetExpirationDifference,\n",
    " calls.mid_underlying[strikeLocation],\n",
    " calls.futures[strikeLocation],\n",
    " strikeTarget,\n",
    " strikeLocation,\n",
    " myStrikeDiff\n",
    " ]\n",
    "\n",
    " if row.quote_date != newMonth and row.MSame == False:\n",
    " if row.expiration == calls.expiration[strikeLocation] and row.strike == calls.strike[strikeLocation]:\n",
    " temp_calls[calls.quote_date[i]] = [\n",
    " i,\n",
    " calls.quote_date[i],\n",
    " calls.expiration[strikeLocation],\n",
    " calls.strike[strikeLocation],\n",
    " calls.trade_volume[i],\n",
    " calls.mid_eod[i], #today's price \n",
    " newMonth,\n",
    " targetExpiration,\n",
    " targetExpirationDifference,\n",
    " calls.mid_underlying[i],\n",
    " calls.futures[i],\n",
    " strikeTarget,\n",
    " strikeLocation,\n",
    " myStrikeDiff\n",
    " ]"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 18,
    "metadata": {
    "ExecuteTime": {
    "end_time": "2018-10-06T17:13:32.452118Z",
    "start_time": "2018-10-06T17:13:32.297567Z"
    }
    },
    "outputs": [],
    "source": [
    "rolling_calls = pd.DataFrame(temp_calls).T.fillna(method='ffill')\n",
    "rolling_calls.index.name = 'Date'\n",
    "rolling_calls.columns = [\n",
    " 'i', 'quote_date','expiration', 'strike','trade_volume','price', 'newMonth',\n",
    " 'targetExpiration', 'ExpDiff', 'mid_underlying', 'futures','strikeTarget',\n",
    " 'strikeLocation', 'StrikeDiff'\n",
    "]\n",
    "first_filter=rolling_calls.quote_date.isin(expiry_dates)\n",
    "second_filter=rolling_calls.quote_date.isin(expiry_dates).shift(1)\n",
    "rolling_calls['entry'] =(first_filter==True) & (second_filter==False)\n",
    "rolling_calls['exit'] =rolling_calls.entry.shift(-1)\n"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 19,
    "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>i</th>\n",
    " <th>quote_date</th>\n",
    " <th>expiration</th>\n",
    " <th>strike</th>\n",
    " <th>trade_volume</th>\n",
    " <th>price</th>\n",
    " <th>newMonth</th>\n",
    " <th>targetExpiration</th>\n",
    " <th>ExpDiff</th>\n",
    " <th>mid_underlying</th>\n",
    " <th>futures</th>\n",
    " <th>strikeTarget</th>\n",
    " <th>strikeLocation</th>\n",
    " <th>StrikeDiff</th>\n",
    " <th>entry</th>\n",
    " <th>exit</th>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>Date</th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " <th></th>\n",
    " </tr>\n",
    " </thead>\n",
    " <tbody>\n",
    " <tr>\n",
    " <th>2006-04-19</th>\n",
    " <td>714</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>2006-05-17</td>\n",
    " <td>22.5</td>\n",
    " <td>0.0</td>\n",
    " <td>0.075</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>2006-11-05</td>\n",
    " <td>172 days</td>\n",
    " <td>11.32</td>\n",
    " <td>22.5</td>\n",
    " <td>22.64</td>\n",
    " <td>714</td>\n",
    " <td>0.14</td>\n",
    " <td>False</td>\n",
    " <td>False</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>2006-04-20</th>\n",
    " <td>721</td>\n",
    " <td>2006-04-20</td>\n",
    " <td>2006-05-17</td>\n",
    " <td>22.5</td>\n",
    " <td>0.0</td>\n",
    " <td>0.075</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>2006-11-05</td>\n",
    " <td>172 days</td>\n",
    " <td>11.64</td>\n",
    " <td>12.5</td>\n",
    " <td>22.64</td>\n",
    " <td>714</td>\n",
    " <td>0.14</td>\n",
    " <td>False</td>\n",
    " <td>False</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>2006-04-21</th>\n",
    " <td>729</td>\n",
    " <td>2006-04-21</td>\n",
    " <td>2006-05-17</td>\n",
    " <td>22.5</td>\n",
    " <td>0.0</td>\n",
    " <td>0.075</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>2006-11-05</td>\n",
    " <td>172 days</td>\n",
    " <td>11.59</td>\n",
    " <td>12.5</td>\n",
    " <td>22.64</td>\n",
    " <td>714</td>\n",
    " <td>0.14</td>\n",
    " <td>False</td>\n",
    " <td>False</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>2006-04-24</th>\n",
    " <td>768</td>\n",
    " <td>2006-04-24</td>\n",
    " <td>2006-05-17</td>\n",
    " <td>22.5</td>\n",
    " <td>0.0</td>\n",
    " <td>0.075</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>2006-11-05</td>\n",
    " <td>172 days</td>\n",
    " <td>11.75</td>\n",
    " <td>12.5</td>\n",
    " <td>22.64</td>\n",
    " <td>714</td>\n",
    " <td>0.14</td>\n",
    " <td>False</td>\n",
    " <td>False</td>\n",
    " </tr>\n",
    " <tr>\n",
    " <th>2006-04-25</th>\n",
    " <td>807</td>\n",
    " <td>2006-04-25</td>\n",
    " <td>2006-05-17</td>\n",
    " <td>22.5</td>\n",
    " <td>0.0</td>\n",
    " <td>0.050</td>\n",
    " <td>2006-04-19</td>\n",
    " <td>2006-11-05</td>\n",
    " <td>172 days</td>\n",
    " <td>11.76</td>\n",
    " <td>12.5</td>\n",
    " <td>22.64</td>\n",
    " <td>714</td>\n",
    " <td>0.14</td>\n",
    " <td>False</td>\n",
    " <td>False</td>\n",
    " </tr>\n",
    " </tbody>\n",
    "</table>\n",
    "</div>"
    ],
    "text/plain": [
    " i quote_date expiration strike trade_volume price newMonth \\\n",
    "Date \n",
    "2006-04-19 714 2006-04-19 2006-05-17 22.5 0.0 0.075 2006-04-19 \n",
    "2006-04-20 721 2006-04-20 2006-05-17 22.5 0.0 0.075 2006-04-19 \n",
    "2006-04-21 729 2006-04-21 2006-05-17 22.5 0.0 0.075 2006-04-19 \n",
    "2006-04-24 768 2006-04-24 2006-05-17 22.5 0.0 0.075 2006-04-19 \n",
    "2006-04-25 807 2006-04-25 2006-05-17 22.5 0.0 0.050 2006-04-19 \n",
    "\n",
    " targetExpiration ExpDiff mid_underlying futures strikeTarget \\\n",
    "Date \n",
    "2006-04-19 2006-11-05 172 days 11.32 22.5 22.64 \n",
    "2006-04-20 2006-11-05 172 days 11.64 12.5 22.64 \n",
    "2006-04-21 2006-11-05 172 days 11.59 12.5 22.64 \n",
    "2006-04-24 2006-11-05 172 days 11.75 12.5 22.64 \n",
    "2006-04-25 2006-11-05 172 days 11.76 12.5 22.64 \n",
    "\n",
    " strikeLocation StrikeDiff entry exit \n",
    "Date \n",
    "2006-04-19 714 0.14 False False \n",
    "2006-04-20 714 0.14 False False \n",
    "2006-04-21 714 0.14 False False \n",
    "2006-04-24 714 0.14 False False \n",
    "2006-04-25 714 0.14 False False "
    ]
    },
    "execution_count": 19,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "rolling_calls.head()"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 20,
    "metadata": {
    "ExecuteTime": {
    "end_time": "2018-10-06T17:13:32.585947Z",
    "start_time": "2018-10-06T17:13:32.453132Z"
    }
    },
    "outputs": [],
    "source": [
    "#calls_file='../data/Options/vxxRolling_calls.csv'\n",
    "calls_file = '../data/Options/vix_rolling_calls.csv'\n",
    "rolling_calls.to_csv(calls_file)"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 21,
    "metadata": {
    "ExecuteTime": {
    "end_time": "2018-10-06T16:29:43.638088Z",
    "start_time": "2018-10-06T16:29:43.634061Z"
    }
    },
    "outputs": [],
    "source": [
    "calls_file='../data/Options/vix_rolling_callsL.csv'\n",
    "#rolling_calls.to_csv(calls_file)"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 22,
    "metadata": {
    "ExecuteTime": {
    "end_time": "2018-10-06T16:29:43.648046Z",
    "start_time": "2018-10-06T16:29:43.639050Z"
    }
    },
    "outputs": [],
    "source": [
    "calls_file='../data/Options/vix_rolling_callsS.csv'\n",
    "#rolling_calls.to_csv(calls_file)"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": null,
    "metadata": {},
    "outputs": [],
    "source": []
    }
    ],
    "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.6.5"
    },
    "varInspector": {
    "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
    },
    "kernels_config": {
    "python": {
    "delete_cmd_postfix": "",
    "delete_cmd_prefix": "del ",
    "library": "var_list.py",
    "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
    "delete_cmd_postfix": ") ",
    "delete_cmd_prefix": "rm(",
    "library": "var_list.r",
    "varRefreshCmd": "cat(var_dic_list()) "
    }
    },
    "oldHeight": 579.181818,
    "position": {
    "height": "601px",
    "left": "1117.44px",
    "right": "20px",
    "top": "112px",
    "width": "358px"
    },
    "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
    ],
    "varInspector_section_display": "block",
    "window_display": false
    }
    },
    "nbformat": 4,
    "nbformat_minor": 2
    }