Portfolio hedging/shorting with options

Hi all,

Short question: how do we better design short/hedge ranking systems and portfolios?

Yuval recently posted a paper that uses cheap option puts as a hedging alternative to SPY puts. They found that by buying “cheap” options you can reduce drawdowns on a portfolio without significant drag (really loss of annualized return).

I figure that with a ranking system we should be able to pick cheap options for weak companies and thus maybe even make money on them normally and not just as a hedge. However, when I started looking at all of the public ranking systems almost none of them have significant negative performance in their lowest 5% bracket. And if you add in transaction costs you are looking at a losing portfolio over a ten year period.

Also when I ran a short simulation for these low ranking stocks using the Small and Micro cap focus ranking system the results were dismal and even during downturns I did not see a significant spike in performance.

Is the logic for ranking and shorting stocks a lot different that for going long? My only thought is that there are just a lot less overpriced “bad” companies than there are underpriced “good” companies. Or that fear often results in much faster crashes than greed results in price climbs and thus other signals are needed to catch the stock before it crashes…

I looked some on the forum for similar posts and did not find much. So if I missed a good over I would be happy to see that as well!

Thanks,
Jonpaul

In designing a ranking system for going short you want to reverse most factors but keep the size factors the same. (Or reverse the entire system and then reverse the size factors again.) Size factors (the smaller the better) are augmentative, making both ends of the ranking system steeper. Or simply exclude the size factors. Here’s how Core Combination has performed on the Easy-to-Trade US universe over the last ten years, rebalancing monthly:


That has truly significant negative performance in its lowest 5% bracket. And consider that this ranking system has been around for more than ten years in one form or another, so it’s almost out-of-sample.

I’ve made a ton of money buying cheap out-of-the-money puts dated about six months out; the returns have been fantastic, and it’s wonderful to be able to hedge my portfolio with them. The factors that seem to work the best for these are decelerating sales, a high ratio of net operating assets to total assets, low market cap, unstable ratio of gross plant to sales, low free cash flow margin, high price volatility, low current ratio, dividend payments that exceed net income, negative subsector momentum, negative price momentum, and a large increase in investment (gross plant and inventory) compared to total assets. I don’t use value factors nearly as much in my ranking systems for puts as I do in my long strategies.

1 Like

Yuval,

Can you elaborate at all on your execution in terms of liquidity, how far out of the money, closing the position in proximity of expiration? Thanks

This is really intriguing. Is there a past thread that has shown tests of short ranking systems with various size/liquidity factors in both directions?

Thanks,
Feldy

I only buy options if they’re really cheap. I use my own Monte Carlo calculator, but a good guideline is that the implied volatility should be significantly less than the historical volatility. How far out of the money? I usually buy at the nearest out-of-the-money strike. Liquidity–I’m pretty flexible. Really illiquid stocks don’t have any options available. Price > 4 and float > 7 and AvgVol > 10000 and MktCap > 135. I usually try to close my positions on the Monday before expiry. But if a stock’s rank on my put systems has fallen a huge amount, I’ll try to close my position earlier. Lastly, I very rarely buy options with an expiration date of less than 90 days out.

1 Like

Thanks Yuval. Also, can you post the link to the paper you had from before. I can’t seem to find it. Thanks again.

Dear all,

You can try build a 10 stocks long/short book with the Kasa Model (one of the models in P123) long >99 rating and short <1 rating based on the Russell 3000 universe.

Out of the money stock options for companies outside the Russell 3000 universe has very low turnover.

It performs well in backtest with about 20% annualized return combined on a 5 year basis. (monthly rebalancing)

Long/short funds typically has lower drawdowns and standard deviation than a long only fund. However, the performance really depends on how the fund picks long and short candidates.
(they could be wrong on both sides of the trade).

This link is useful if you don’t have a Bloomberg terminal or your broker doesn’t provide research tools for stock options.

Regards
James

Sorry I meant to post the paper when I made the post, but did not have the link. Here it is: https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4378071

Once again thank you Yuval for sharing it!

Thanks for sharing this! I was looking at ranking systems with a 1 week rebalance as that is what I am doing in my stock portfolio. Interestingly a 4 week rebalance has a lower return for 4 weeks vs 1 week. And unsurprisingly the universe makes a big different especially if you do not use size factors.

For folks reading the paper I did not see an explicit definition of what cheap meant. They did define liquidity constraints, detla, and expiration. But I think they were sorting based on volatility and picking the cheapest. Whereas I think we are interested in using a ranking system and then picking the cheapest. Also the 2% budget they used does not visually massively reduce draw downs. However, a 2% hedge seems small to me. But maybe I missed something as I am fairly new to the world of investment research papers.

I am especially excited about cheap options hedging right now as the higher interest rates feel like a looming recession. But regardless of it that happens it seems like a great tool to improve the robustness of my investments (if done carefully).

I am especially excited about cheap options hedging right now as the higher interest rates feel like a looming recession. But regardless of it that happens it seems like a great tool to improve the robustness of my investments (if done carefully).

Jonpaul,

Unless we are referring to professional long/short funds or long biased funds (that need to put at least 90 or 95% of AUM in stocks) selling covered calls to earn premiums and enhance the fund’s return. It is better to switch asset class to either GLD or short-term US treasuries (including ETF like SHY that currently pays about 5% yield) if you think a recession is looming large. This maybe a better idea than owning stocks and paying a premium (even a cheap premium) to buy puts.

Also the 2% budget they used does not visually massively reduce draw downs.

As you have also pointed out, the reduction in drawdown may not be very significant as well.

Regards
James

Agree that in the case of a recession other asset classes are “safer”, and I have a few years of living expenses in a money market earning around 5%. However, I know that the opportunity cost of not being in the market is also really high. I have not developed the skills to quantify the cost yet (Monte Carlo simulations probably could be used here), but at my age (early 30s) I don’t think I can afford to sit in a money market fund with any significant amount of my assets for an unknown amount of time. Maybe I will take a look at some of the tools for “optimal” asset allocation, like Portfolio Visualizer, until I have time to make my own tools.

I was curious about the Kasa Model you mentioned. Is it the one currently in the Old P123 ranking systems folder? When I do a perf test with it over the last 10 years it does not have a strong trend. Am I missing something here?

Jonpaul,

If you have a high conviction that a recession is looming large (due to high interest rate, high inflatioin, yield curve inversions …etc). It is probably better to be humble and move the portfolio weighting temporarily towards more conservative assets. I don’t see the reasoning of going against the market and hold a potentially high risk portfolio and hedge it with options if you are convinced that the market is going into a recession. That strategy may be more appropriate for an upward or sideway market view.

I was just testing a few P123 prebuilt ranking system and found Kasa Model seems to work welll. All other prebuilt P123 models comes up close
to zero or negatve (on the short book) with the Russell 3000 universe in which there is a liquid market for out-of-money options.

This is what I have got for the long book for the past 5 years using the Kasa Model >99 holdng 10 stocks.

and here is the short book wih the Kasa Model <1 also with 10 stocks.

Regards
James

They sort the options by price and buy the cheapest 20% for a mean price of $1.10. They spend 2% of the portfolio per month, so that totals about 14% of the portfolio since the average expiration date is 0.57 years. With their delta limits (between -0.05 and -0.15) these puts are going to be way out of the money. Also note the expiry date is always between six months and a year. To ensure you’re not paying too much of a premium, you could add an additional rule that the implied volatility should be lower than the historical volatility.

Yuval, what platform do you use for your options research?

None. I haven’t really done any options research. I use Fidelity to buy and sell options, and I’ve read a lot about them on various sites. I use Portfolio123’s DataMiner (the Rollingscreen function) to backtest ranking systems for buying puts.

Thanks all for the help! I think I have a good starting point to develop a short/put portfolio.

James thank you for the advice as well. I don’t currently have strong conviction on the market going into a recession so I am not comfortable going all cash. But I also don’t want to do nothing if that makes sense…

Anyway here is some python code that will go through a list of tickers and print out put option info for those that are interested!
Example output:
Ticker: LWLG, Strike date: 2024-03-15, strike price: 4.0, stock price: 4.34, IV/HV Ratio: 1.34, IV: 0.80, premium ratio: 10.60%

*Notes:

  • The HV does not match what I am seeing on Fidelity, but otherwise the numbers look right.
  • Premium ratio is option price over stock price * 100

Code: note that the inputs you would provide are at the bottom of the code block
*Edited to improve format and info

    
import yfinance as yf
import pandas as pd
from datetime import datetime, timedelta


def get_ratio(ticker_symbol, exp_days, diff_days, hv_days):
    # Define the target expiration date
    target_expiration_date = (datetime.today() + timedelta(days=exp_days)).strftime("%Y-%m-%d")

    # Retrieve the current stock price
    ticker = yf.Ticker(ticker_symbol)
    current_stock_price = ticker.history(period="1d")["Close"].iloc[0]

    # Get the available expiration dates for options
    expiration_dates = ticker.options

    # Define a function to find the nearest available expiration date within a reasonable range
    def find_nearest_expiration(expiration_dates, target_date, max_days_difference=diff_days):
        target_date = pd.Timestamp(target_date)
        valid_expiration_dates = [date for date in expiration_dates if
                                  pd.Timestamp(date) - target_date <= timedelta(days=max_days_difference)]

        if not valid_expiration_dates:
            print(f"No validate dates for ticker: {ticker_symbol}")
            return None

        nearest_date = min(valid_expiration_dates, key=lambda x: abs(pd.Timestamp(x) - target_date))
        return nearest_date

    # Find the nearest available expiration date to the target date (within a 30-day range)
    try:
        nearest_expiration_date = find_nearest_expiration(expiration_dates, target_expiration_date,
                                                          max_days_difference=diff_days)
    except ValueError as e:
        print(e)
        nearest_expiration_date = None

    if nearest_expiration_date:
        # Calculate the strike price that is approximately 10% out of the money
        otm_strike_price = current_stock_price * 0.9

        # Retrieve the options data for the selected expiration date
        options_data = ticker.option_chain(nearest_expiration_date)

        if not options_data.puts.empty:
            otm_put_option = options_data.puts.iloc[(options_data.puts['strike'] - otm_strike_price).abs().idxmin()]

        else:
            print(
                f"No put options available for ticker: {ticker_symbol} for expiration date: {nearest_expiration_date}")
            return None

        # Calculate Historical Volatility (HV)
        lookback_period = hv_days
        historical_volatility = ticker.history(period=f"{lookback_period}d")["Close"].pct_change().std() * (252 ** 0.5)

        # Calculate IV/HV ratio for the selected OTM put option
        current_iv = otm_put_option["impliedVolatility"]
        iv_hv_ratio = current_iv / historical_volatility
        mid_price = (otm_put_option["bid"] + otm_put_option["ask"])/2
        premium_ratio = mid_price/current_stock_price*100
        strike = otm_put_option["strike"]

        # Display the selected OTM put option and its IV/HV ratio
        # print(f"Selected OTM Put Option:\n{otm_put_option}\n")  # This can be used to see all info
        print(f"Ticker: {ticker_symbol}, Strike date: {nearest_expiration_date}, strike price: {strike}, stock price: {current_stock_price:.2f}, IV/HV Ratio: {iv_hv_ratio:.2f}, IV: {current_iv:.2f}, premium ratio: {premium_ratio:.2f}%, option price: {mid_price}")
        return [ticker_symbol, nearest_expiration_date, strike, current_stock_price, iv_hv_ratio, current_iv, premium_ratio, mid_price]


input_string = '''NMRA
HRYU
LWLG
ZJYL
KVUE'''
ticker_list = input_string.split("\n")
string_list = [s.strip() for s in ticker_list if s.strip()]

results = [0]*len(ticker_list)

for i in range(len(ticker_list)):
    # inputs: ticker list, number of days out to look for put, number of days expiration can vary by, and HV look back
    result = get_ratio(ticker_list[i], 120, 60, 30)
    results[i] = result

print("Ticker, expiration, strike, stock_price, IV/HV, IV, premium_ratio, option_cost")
for row in results:
    if row:
        print(f"{row[0]}, {row[1]}, {row[2]}, {row[3]:.2f}, {row[4]:.2f}, {row[5]:.2f}, {row[6]:.2f}, {row[7]:.2f}")
    

Livevol.com is an option screener that I had been using to screen for stocks with high implied expected earning moves. As an experiment, I put the screened stocks into a live port and then let run. The equity curve is attached. The port shows an opportunity at making money with puts.

The screen wasn’t designed to find low priced options but livevol does have both implied and historic volatility (and many other fields). For those really interested in option screening, livevol is worth the expense. I have a list of data provided data fields. Ask if you want a copy.

Dear all,

This is the best performing long/short fund in the last 5 years according to a Global Hedge Fund Report. This is a medium sized fund based in Toronto with AUM about USD 1 billion.

Here is the performance for comparing to your own long/short system. (I believe the fund short the underlying stocks without using put options since the short candiates are mostly micro/small caps).

2018 2019 2020 2021 2022 2023 YTD * 3 yr AR 5 yr AR 5 yr Sharpe
Anson Investments 19.19% 10.21% 44.62% 45.47% 7.60% 14.47% 28.11% 22.53% 1.78
Master (Toronto)
*YTD as of 9/30/2023

Regards
James


Thanks Jim. Would you be able to pull a list of LS funds and post their returns?

RTNL,

Jim (Jrinne) is a different person and a friend of mine in the forum. Pls don’t mix up.

Here are the 3 best performing Long/Short funds according to the Global Hedge Fund Report and their returns in the past 5 years.

Regards
James

2018 2019 2020 2021 2022 2023 YTD * 3 yr AR 5 yr AR
Anson Investments 19.19% 10.21% 44.62% 45.47% 7.60% 14.47% 28.11% 22.53%
Master (Toronto)
Brook Absolute 10.43% 11.09% 46.45% 5.55% 23.91% -11.20% 26.83% 20.67%
Return Focus (London)
Voss Value LP 14.46% 21.17% 23.84% 39.30% 1.11% 6.90% 20.37% 19.32%
(Houston)
*YTD as of 9/30/2023
1 Like