In our capstone project on option volatility trading strategies, we chose a 5-day holding period for trades when the GARCH model’s predicted volatility exceeds the implied volatility. However, I’m unsure why we specifically wait 5 days before closing the position in a long straddle strategy. Is there a particular reason for this duration? Can we adjust this time frame—either extending or shortening it?
Hi,
Here, the point is to capitalise on the prediction before closing it too soon and also keeping the characteristics of volatility in mind.
You can change the time frame but make sure you backtest thoroughly as extending the period might give you more time to capitalise on large moves and lower transaction costs but increase the exposure to unexpected market moves. Hope this helps.
Thank you. I would like to extend the backtest time period since the ‘options_daily_sp500_2018_2022.csv’ has only Jan-2018 to Sep-2022. May I ask if I would like to add more time period, how can I select the C_IV , P_IV , C_Last and P_Last from the dataset downloaded from OptionDX?
Hello, can anyone answer this question?
“would like to extend the backtest time period since the ‘options_daily_sp500_2018_2022.csv’ has only Jan-2018 to Sep-2022. May I ask if I would like to add more time period, how can I select the C_IV , P_IV , C_Last and P_Last from the dataset downloaded from OptionDX?”
Hello Kevin, here are the steps involved.
Step-1. Download options data from OptionsDx. You can refer to this unit for instructions on how to download the data.
Step-2. Once the data is stored in the form of zip files, you can use the code in this
unit to extract the data from multiple zip files and store it in a single dataframe.
Step-3. The dataframe created in step-2 will have information of IV and last traded prices in the columns [C_IV], [P_IV], [C_LAST], [P_LAST]. You can rename the columns for better readability and use the dataframe for further analysis.
If you have any additional queries on this, feel free to share them in this thread.
Thank you for your response. I’d like to first clarify my question. Regarding the file options_daily_sp500_2018_2022.csv
, it contains daily records of STRIKE, C_IV, P_IV, C_LAST, and P_LAST. From the dataset downloaded via OptionDX, I noticed that there are multiple strike prices for the same day. My question is: how should I select the appropriate STRIKE, C_IV, P_IV, C_LAST, and P_LAST values for each day? I’m aiming to extend the dataset to cover the period from 2015 to 2023 for backtesting purposes. To clarify, I’m not asking about how to extract the zip files from OptionDX. Thank you.
Hey Kevin, thanks for the clarification. You’re absolutely right to observe that for each trading day, there are multiple strike prices listed in the dataset. That’s because for any given date, options are available at various strikes (in-the-money, at-the-money, out-of-the-money, etc.).
To select the appropriate STRIKE, C_IV, P_IV, C_LAST, and P_LAST values for each day, you first need to define your selection criteria based on your backtesting objective. Here are three common approaches:
1. ATM (At-the-Money) Strike Selection
Select the strike closest to the underlying’s spot price (S&P 500 index level) on that date. This is a standard approach for volatility analysis or for trading strategies like short straddles or strangles.
2. Fixed Delta Selection (e.g., 0.5, 0.25, etc.)
Depending on the use case, you can select options based on their delta (e.g., delta-50 call for ATM, delta-25 put for OTM).
This is ideal for strategies like delta-neutral hedging or constructing skew/vol surfaces.
3. Consistent Strike Offset
If you’re analysing a systematic strategy (e.g., always choosing strike = spot ± 50 points), then select those strikes daily using a rule.
However, you would have also observed that, for any strike, you see multiple contracts, since the dataset contains contracts of multiple expiries. So, before selecting the appropriate strike, it’s important to first categorise the options based on their expiry dates, because for each day, the dataset contains options with multiple expiries and multiple strike prices per expiry.
Step 1: Identify the Expiry Dates
Each row in your dataset should have an expiry date column ([ EXPIRE_DATE ]). Group the data by trade date + expiry date — this will give you all available strikes for a particular expiry on a given day.
Step 2: Categorise Each Expiry Type (This is for SPX contracts)
You can classify expiries into:
-
Daily Expiry: Short-term, non-Friday expiries
-
Weekly Expiry: Friday expiries that are not the 3rd Friday of the month
-
Monthly Expiry: The 3rd Friday of the month
-
Quarterly Expiry: 3rd Friday of Mar, Jun, Sep, Dec
-
End-of-Month Expiry: Last trading day of the month
-
LEAPS: Expiry is 1+ year from trade date
You can do this programmatically by:
Extracting the day of week and day of month
Comparing the expiry date with a calendar of 3rd Fridays and last trading day of the month
Calculating the time-to-expiry (TTE) from trade date
Step 3: Choose One Expiry Group Per Day
For most backtests, you’d choose a single expiry per day — for example:
-
Always select the nearest Monthly Expiry
-
Or select the next expiry with ≥7 days to expiry
-
Or filter to a fixed TTE range (e.g., 20–30 days)
Once you’ve filtered for expiry, then you can go on to select the strike (ATM, OTM, delta-based, etc.).
Please let me know if you have any additional queries or need further clarification on any of the above concepts.
Happy Learning.
Thank you for your response. I have a question regarding the C_IV
and P_IV
values in the options_daily_sp500_2018_2022.csv
file. Specifically, why are C_IV
and P_IV
sometimes equal in this dataset?
For example, on August 1, 2018, I filtered for options with a strike price of 2810 and an expiry date of August 31, 2018. In the spx_eod_201808
file downloaded from OptionDx, the P_IV
is 0.08179, while the C_IV
is 0.10358. However, in the options_daily_sp500_2018_2022.csv
file, the C_IV
value appears to be different.
Could you please explain why there is a discrepancy?
Hello Kevin, you are right, the C_IV and P_IV should be different. For the quote date August 1, 2018 and expiry date August 31, 2018, the C_IV should be 0.10358 and P_IV should be 0.08179. We will update the options_daily_sp500_2018_2022.csv file in the course.
Thanks. Please let me know when the data file has already been updated.
Hi Kevin, you can find the updated file in the zip file in the last section of the course and also in the capstone’s downloadables. Thank you