How to determine if options are cheap or expensive using historical data

Check current IV - Check IV from previous day, week, month etc.

But as someone mention above high IV doesn't necessarily mean it's expensive. Could be priced in on an upcoming event. Usually, meme stocks that run up out of nowhere do tend to be very expensive thou.
 
you can look at past IV’s (called the IV rank)

Such data seems to be expensive

look at current IV against recent HV

It seems to be not enough reasonable approach

consider using an HV that’s not based on one day returns but maybe a week’s returns.

Is the procedure in the initial post correct or not? Maybe it is better to use log returns instead? How?

I can use daily returns and annualize them multiplying by 252^0,5. Or use weekly returns and annualize them multiplying by 52^0,5. Or use monthly returns and annualize them multiplying by 12^0,5. The result seem to be very much the same.
 
Say WUT???





First of all, if you are doing a directional bet, what matters more is whether your prediction of the future direction of the trend is correct. As long as that's correct, you will always be able to make money as long as you cash out before a possible "volatility crush" sets in. An option's cheapness or expensiveness would only matter if you choose to hold the option until its expiration and need to ensure that its intrinsic value upon expiration is higher than the option price at which you bought the option.

How do you find out whether an option is too expensive? You can't. There is no way or I should say no reliable way to find out whether an option is too expensive or too cheap right now because whether an option is too expensive or too cheap will depend on how much the underlying will move in the future and nobody knows the future. If we do, we will all be rich!! :) 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.

All the % historical volatility or implied volatility gives you is just an estimation or educated guess at best. The way to make money in options is if you intend to hold the option to its expiration, you have to be even more right than the people who were right.






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.

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?
 
You are off to a decent start by comparing Historical Vol to Current Implied..
Some pointed out that you should also be looking at what percentile implied vol is trading at,i.e where does current IV rank against past Implied vol...

Orats has "historical" rolling IV for different periods.30 day,60 day etc which can be used as an entry filter.

Would I recommend buying options when IV his historically high???

Not without a proper backtest....







Such data seems to be expensive



It seems to be not enough reasonable approach



Is the procedure in the initial post correct or not? Maybe it is better to use log returns instead? How?

I can use daily returns and annualize them multiplying by 252^0,5. Or use weekly returns and annualize them multiplying by 52^0,5. Or use monthly returns and annualize them multiplying by 12^0,5. The result seem to be very much the same.
 
Such data seems to be expensive



It seems to be not enough reasonable approach



Is the procedure in the initial post correct or not? Maybe it is better to use log returns instead? How?

I can use daily returns and annualize them multiplying by 252^0,5. Or use weekly returns and annualize them multiplying by 52^0,5. Or use monthly returns and annualize them multiplying by 12^0,5. The result seem to be very much the same.

log returns are stdev(ln(stock1/stock2))*sqrt(252)
on a daily scale the straight return is a decent approximation.

You give very little information on what you are trying to trade so it's hard to say what will be reasonable for you. index/commodities, single stocks without earnings, single stocks with earnings, long time frame, short time frame etc. These will all play a role in determining how you determine if an option is rich or cheap in ivol. If you don't want precision to your strategy then just use IV to recent HV. That's what the pros do.
 
You are off to a decent start by comparing Historical Vol to Current Implied..

How to do it correctly? Is the procedure in the initial post correct?

You give very little information on what you are trying to trade so it's hard to say what will be reasonable for you. index/commodities, single stocks without earnings, single stocks with earnings, long time frame, short time frame etc. These will all play a role in determining how you determine if an option is rich or cheap in ivol.

mostly ETFs, stocks with earnings and dividends and without them.
Time frame - one week to 2-3 months.
 
How to do it correctly? Is the procedure in the initial post correct?



mostly ETFs, stocks with earnings and dividends and without them.
Time frame - one week to 2-3 months.

etfs 1 week: use recent hv vs Iv
stocks without earnings 1 week: see etfs
Stocks with earning 1 week: only use your forecast
Stocks without earnings 2 months: use iv vs recent hv compared to index same
Stocks with earning 2 months: use stocks without earnings plus your earnings forecast.

Use daily returns or daily log returns.

If you are holding to expiry this information will be less valuable than if you are planning on closing before expiry.

In any case delta will be like 90percent of your pnl driver unless you are trading in fringe case vol regime.
 
Lol@ General Tao..I like it

All I said is Say Wut,and once again you have sent me on a wild goose chase:)

Im going to backtest different levels of IV rank..And FWIW,you probably arent far off...

General Tao!!! LOL Oh c'mon on, it's a new year!! Give my post some love, you know I am right. LOL
 
Lol@ General Tao..I like it

All I said is Say Wut,and once again you have sent me on a wild goose chase:)

Im going to backtest different levels of IV rank..And FWIW,you probably arent far off...

I tell you there is no reliable way to predict future volatility, not from historical or current IV. If you found a way, I would like to know about it. For once, I would love to be proven wrong. It's so dangerous to short options when the IV is low. You know how far gamma can go according to my theory. :sneaky:
 
Back
Top