QuantRocket Blog

Borrow fees reflect how likely short sellers think a stock is to decline. Can this information be incorporated into trading strategies as an alpha factor? This article uses Alphalens to explore the relationship between borrow fees and forward returns and uses Moonshot and Zipline to demonstrate ways to incorporate borrow fees into long or short strategies.

Summary

  • High borrow fees are an indication that many short sellers think a stock will decline.
  • Short sellers are right: stocks with high borrow fees tend to decline.
  • High borrow fees largely offset the profits from shorting high borrow fee stocks, limiting the alpha potential of short strategies.
  • Long investors can improve returns by avoiding stocks with high borrow fees.

What are Borrow Fees?

Borrow fees, also known as stock loan fees, are the fees short sellers pay to stock owners to borrow shares they wish to sell short. The payment is typically split between the stock owner whose shares are loaned out and the broker who facilitates the loan.

The amount that short sellers pay is a variable percentage of the dollar value of the loaned shares. Borrow fees are quoted as annualized interest rates but are assessed daily. For example, a short seller who borrows $100,000 worth of shares at an annualized interest rate of 1% will be assessed a daily fee of 1/360th of 1 percent of $100,000, or $2.78 per day.

Fees can range widely, from as low as 0.25% (25 basis points) per year for easy-to-borrow stocks up to 100% or more for hard-to-borrow stocks. The fees are determined by supply and demand: the more traders want to short a stock, the higher the fee. Consequently, borrow fees are a useful indicator of the collective sentiment of short sellers about any particular stock.

QuantRocket maintains an archive of historical borrow fees for US and global stocks dating back to 2018. The data are sourced from Interactive Brokers and are updated daily.

Alphalens Analysis

Short sellers are typically considered to be informed market participants, aka smart money. If high borrow fees mean that short sellers think that a stock is overvalued or a company is in trouble, can we use that information as a source of alpha?

To find out, I first turn to Pipeline and Alphalens to analyze the relationship between borrow fees and forward returns for US stocks. I begin by creating a Pipeline with two columns: daily borrow fees for all common stocks, and dollar volume quantiles (as a proxy for size). I exclude microcaps, defined here as the bottom 25% by dollar volume, due to their atypical characteristics that can obscure underlying trends.

from zipline.pipeline import Pipeline, ibkr, master
from zipline.pipeline.factors import AverageDollarVolume

# limit analysis to common stocks
universe = master.SecuritiesMaster.usstock_SecurityType2.latest.eq("Common Stock")

borrow_fee = ibkr.BorrowFees.FeeRate.latest

avg_dollar_volume = AverageDollarVolume(window_length=90)

pipeline = Pipeline(
    columns={
        "borrow_fee": borrow_fee,
        "size": avg_dollar_volume.quantiles(4)
    },
    initial_universe=universe,
    screen=(
        # ignore microcaps
        avg_dollar_volume.percentile_between(26, 100)
    )
)

I pass the Pipeline to Alphalens, partitioning stocks at the 50th, 75th, and 90th percentiles by borrow fee:

import alphalens as al

al.from_pipeline(
    pipeline,
    start_date="2018-04-16", # this is the start date of the borrow fees data
    end_date="2024-04-30",
    factor="borrow_fee",
    groupby="size",
    quantiles=[0, 0.5, 0.75, 0.9, 1], # split at 50th, 75th, and 90th percentile
    relative_returns=False, # Alphalens shows relative and absolute returns by default, let's ignore relative
    segment="Y"
)

Results

Stocks with high borrow fees perform worse than stocks with low borrow fees. In the bar plot, we see that while most US stocks had positive returns since 2018, the decile of stocks with the highest borrow fees (quantile 4) had negative returns. The line plot below the bar plot shows the cumulative performance of a factor-weighted portfolio that weights positions proportionally to their borrow fees. A portfolio concentrated in high borrow fee stocks would have steadily declined since 2018. It appears that short sellers are skillful at identifying stocks that are likely to underperform.

Return by Borrow Fee Quantile
Bar plot (top): Mean daily return of US stocks by borrow fee quantile. Quantile 1 = 0-50th percentile; quantile 2 = 50-75th percentile; quantile 3 = 75-90th percentile; quantile 4 = 90-100th percentile.
Line plot (bottom): Cumulative performance of borrow fee-weighted portfolio (higher borrow fees = larger positions).

The following subplots analyze the relationship between borrow fees and forward returns by company size (using dollar volume as a proxy for company size). The leftmost plot analyzes smallcaps (group 1), the middle plot analyzes midcaps (group 2), and the rightmost plot analyzes largecaps (group 3). In each plot, stocks with the highest borrow fees (borrow fee quantile 4, blue line) perform worst.

Cumulative Return by Borrow Fee Quantile by Size Group
Cumulative return of equal-weighted portfolios by borrow fee quantiles for different dollar volume subgroups. Dollar volume group 1 (left) = 25-50th percentile; dollar volume group 2 (middle) = 50-75th percentile; dollar volume group 3 (right) = 75-100th percentile.

Should We Short Stocks with High Borrow Fees?

Given that stocks with high borrow fees tend to decline, can we make money by shorting a portfolio of high borrow fee stocks? We will benefit from the stocks' declines but will have to pay high fees to borrow them. Which effect will dominate?

To find out, I use Moonshot to backtest a strategy that shorts stocks in the highest borrow fee decile, and I use Moonshot's built-in IBKRBorrowFees class to debit borrowing costs. Highlights of the Moonshot strategy are shown below:

from quantrocket.fundamental import get_ibkr_borrow_fees_reindexed_like
from quantrocket.master import get_securities_reindexed_like

class HighBorrowShort(Moonshot):

    ...

    SLIPPAGE_CLASSES = IBKRBorrowFees

    def prices_to_signals(self, prices: pd.DataFrame):

        ...

        # rank by borrow fee and short the 10% with the highest fees
        borrow_fees = get_ibkr_borrow_fees_reindexed_like(closes)
        borrow_fee_ranks = borrow_fees.rank(axis=1, ascending=False, pct=True)
        short_signals = borrow_fee_ranks <= 0.10

        return -short_signals.astype(int)

The cumulative return plot reveals that the strategy is profitable on a gross basis (green line), but the high borrow fees (red line) eat up the profits and result in a roughly flat net performance (blue line). It seems that while short sellers can accurately predict which stocks will decline, they have difficulty profiting from their knowledge due to competition from other short sellers who drive up borrow costs. This is a good example of the limits to arbitrage.

Moonshot Cumulative Returns
Cumulative return of Moonshot strategy that shorts the top decile by borrow fee. Red line ("slippage") represents cumulative borrow fees.

Using Borrow Fees as a Filter in Long Strategies

Although borrowing costs make it difficult for short sellers to turn their insights into profits, long investors have it easier. Since they don't incur borrowing costs, they can benefit from the insights of short sellers by avoiding owning stocks with high borrow fees. In this way, short sellers function as research analysts for long portfolio managers, advising them of stocks to exclude from their portfolios.

Using Zipline, I create a simple long-only strategy that buys an equal-weighted portfolio of midcap stocks (defined here as stocks in the 50th-75th percentile by dollar volume) excluding stocks with borrow fees above 0.3%:

MAX_BORROW_FEE = 0.3

def make_pipeline():

    ...
    screen = AverageDollarVolume(window_length=90).percentile_between(50, 75)

    if MAX_BORROW_FEE:
        screen &= (ibkr.BorrowFees.FeeRate.latest <= MAX_BORROW_FEE)

    ...

I run a parameter scan to test the strategy with and without the borrow fee filter. The portfolio that excludes high borrow fee stocks (green line) outperforms the portfolio that does not exclude them (blue line).

Zipline Cumulative Returns
Cumulative performance of a Zipline strategy that holds an equal-weighted portfolio of stocks in the 50-75th percentile by dollar volume, with (green line) and without (blue line) a filter that excludes stocks with borrow fees above 0.3%.

Conclusion

Short sellers are skilled at identifying stocks that are likely to decline, as evidenced by the negative relationship between borrow fees and forward returns. However, when short sellers attempt to profit from their predictions by shorting these stocks, they drive up borrow fees, which eats up their profit. Long portfolio managers are best positioned to benefit from the insights of short sellers by avoiding stocks with high borrow fees.

Explore this research on your own

This research was created with QuantRocket. Clone the borrow-fees-alpha repository to get the code and perform your own analysis.

quantrocket codeload clone 'borrow-fees-alpha'

About QuantRocket

QuantRocket is a Python-based platform for researching, backtesting, and trading quantitative strategies. It provides a JupyterLab environment, offers a suite of data integrations, and supports multiple backtesters: Zipline, the open-source backtester that originally powered Quantopian; Alphalens, an alpha factor analysis library; Moonshot, a vectorized backtester based on pandas; and MoonshotML, a walk-forward machine learning backtester. Built on Docker, QuantRocket can be deployed locally or to the cloud and has an open architecture that is flexible and extensible.

Learn more or install QuantRocket now to get started.

QuantRocket LLC is not a financial advisor and nothing on this website or in any materials created by QuantRocket LLC should be construed as investment advice. All results are hypothetical unless otherwise noted. Past performance is not indicative of future results.

The material on this website and any other materials created by QuantRocket LLC is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantRocket LLC.

In addition, the material offers no opinion with respect to the suitability of any security or specific investment. No information contained herein should be regarded as a suggestion to engage in or refrain from any investment-related course of action. Neither QuantRocket LLC nor any of its affiliates is undertaking to provide investment advice, act as an adviser to any plan or entity subject to the Employee Retirement Income Security Act of 1974, as amended, individual retirement account or individual retirement annuity, or give advice in a fiduciary capacity with respect to the materials presented herein. If you are an individual retirement or other investor, contact your financial advisor or other fiduciary unrelated to QuantRocket LLC about whether any given investment idea, strategy, product or service described herein may be appropriate for your circumstances. All investments involve risk, including loss of principal. QuantRocket LLC makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. Past performance is not indicative of future results.