I want to buy options to place a directional bet. It makes sense only if the options are not too expensive currently. How to find out?
I demonstrate a possible way to solve the problem below, including Python code. I hope that you will point out its errors and shortcomings.
To begin with, I have OHLC historical data.
I could easily calculate the realized volatility for the last year. However, it differs significantly from year to year. It is unlikely that in the subsequent period, it will be very similar to the recent one.
It seems more reasonable to calculate the daily percentage price movements. I have annualized them by multiplying by 252^0,5 to compare with the traded options implied volatility.
I have also calculated the weekly percentage price movements and annualized them by multiplying by 52^0,5.
Result:
After that:
If I use weekly percentage price movements, the result is similar.
Let's say options are currently trading with an implied volatility of 54%. Is it correct to conclude that they are expensive because their implied volatility is higher than the 75th percentile?
Is the above approach generally correct?
I demonstrate a possible way to solve the problem below, including Python code. I hope that you will point out its errors and shortcomings.
To begin with, I have OHLC historical data.
I could easily calculate the realized volatility for the last year. However, it differs significantly from year to year. It is unlikely that in the subsequent period, it will be very similar to the recent one.
It seems more reasonable to calculate the daily percentage price movements. I have annualized them by multiplying by 252^0,5 to compare with the traded options implied volatility.
I have also calculated the weekly percentage price movements and annualized them by multiplying by 52^0,5.
Code:
data['pct_chng'] = (data['Close']-data['Close'].shift())/data['Close'].shift()
# now annualize to be able to compare with traded options implied volatility
data['pct_chng_a'] = abs(data['pct_chng']*100)*(252**0.5)
# now do the same for weekly price movements
data['pct_chng_weekly_a'] = (data['Close']-data['Close'].shift(5))/data['Close'].shift(5)
data['pct_chng_weekly_a'] = abs(data['pct_chng_weekly_a']*100)*(52**0.5)
print(data[['Close', 'pct_chng', 'pct_chng_a', 'pct_chng_weekly_a']].tail())
Result:
Code:
Close pct_chng pct_chng_a pct_chng_weekly_a
Date
2023-01-12 00:00:00-05:00 330.130005 0.008770 13.921579 47.569508
2023-01-13 00:00:00-05:00 332.820007 0.008148 12.935045 39.466293
2023-01-17 00:00:00-05:00 326.220001 -0.019831 31.480033 25.282416
2023-01-18 00:00:00-05:00 326.329987 0.000337 0.535210 2.663978
2023-01-19 00:00:00-05:00 315.779999 -0.032329 51.321016 25.295952
After that:
Code:
data['pct_chng_annualized'].describe()
count 5200.000000
mean 36.678109
std 43.812184
min 0.000000
25% 10.906413
50% 24.833079
75% 47.330351
max 670.277442
If I use weekly percentage price movements, the result is similar.
Code:
data['pct_chng_week_annualized'].describe()
count 5196.000000
mean 40.673958
std 43.129768
min 0.000000
25% 12.736723
50% 28.627616
75% 53.388777
max 530.388741
Let's say options are currently trading with an implied volatility of 54%. Is it correct to conclude that they are expensive because their implied volatility is higher than the 75th percentile?
Is the above approach generally correct?
The implied volatility is only the volatility or the magnitude of the price movement of the underlying that's estimated or expected right now but that can all change according to what happens in reality during the life of the option. Just because the implied volatility seems to be high doesn't mean it's really too high if the underlying becomes more volatile during the life of the option and not really cheap if the underlying becomes even less volatile in reality. Take your example, the implied volatility of 54% wouldn't be too expensive even though it's above the 75th percentile if the actual volatility ends up being even higher at let's say 75% or 87% but on the other hand if an implied volatility of even 25% which is well below the 50th percentile wouldn't necessarily be cheap if the underlying ends up moving even less.