Skip to content

Short Borrow Rate Carry

// source · daily_carry · freshness · limits

When a paper trader opens a short position, the position carries a daily borrow cost the same way a live short position does. Tapeboard models the carry rather than letting paper shorts hold for free.

How Tapeboard charges paper shorts for borrowing shares

When a paper trader opens a short position, the position carries a daily borrow cost the same way a live short position does. Tapeboard models this carry rather than letting paper shorts hold for free — paper traders who never feel the borrow cost build habits that fail on hard-to-borrow names live.

Source: IBKR via iborrowdesk

Borrow rates come from the Interactive Brokers stock-loan inventory, exposed publicly through iborrowdesk.com. The same feed powers Tapeboard's short-squeeze score borrow-fee component (documented at /methodology/short-squeeze-score).

The feed is ingested nightly by a Cloudflare Worker cron that writes the latest annualized fee rate per symbol into the squeeze_scores D1 table. The simulator's daily-mark routine reads the same table when calculating carry.

Daily carry math

The daily carry charged against an open short position is:

dailyCarry = positionValue * annualizedFeeRate / 365

Where positionValue is the current mark-to-market value of the short position (share count × current mark price), and annualizedFeeRate is the IBKR-published annualized rate expressed as a decimal (so 47.5% = 0.475). The charge is applied at the end of each trading day to every still-open short position.

Example: a 1,000-share short of a symbol marked at $4.20 with an annualized borrow fee of 47.5% accrues 1,000 * 4.20 * 0.475 / 365 = $5.47 per day. Hold that position for 14 calendar days and you have paid $76.55 in carry — independent of whether the trade was profitable.

Rate freshness and default fallback

Borrow rates refresh once nightly, after US market close. There is no intraday refresh — a name that tightens hard on a squeeze day will not see its rate update in Tapeboard until the next overnight ingest.

Default fallback. If iborrowdesk does not publish a rate for a symbol (typically for very small caps that don't appear in IBKR's lendable inventory), the engine falls back to a 5% default annualized rate. Zero would give paper traders a free ride that doesn't exist live; 5% is the rough median for easy-to-borrow names and is conservative for hard-to-borrow situations.

What this model doesn't do

No intraday tightening. A name that goes from 8% to 200% annualized fee intraday will not reflect the new rate in Tapeboard until the next nightly ingest. Live shorts on that day would feel the recall pressure and the rate spike; paper shorts will not.

No prime-broker rates. The feed is IBKR-only. Goldman, JPM, and Morgan Stanley prime rates are not in the dataset and can diverge from IBKR for the same symbol. We disclose the source rather than synthesize a market-wide rate we cannot observe.

No weekend carry. Today the engine applies carry on trading days only — Friday close to Monday open does not yet charge the 3-day Saturday+Sunday+Monday weekend carry that a live short would owe. This is on the roadmap.

HTB names may understate cost. Genuine hard-to-borrow situations sometimes pay more in real life than the displayed annualized rate, particularly during forced-recall events. Tapeboard models the published rate; the recall risk is not in the model.

Source: iborrowdesk feed → squeeze-cron.ts → sim engine carry routine. See also: /methodology (full methodology index), /methodology/short-squeeze-score (squeeze score), and /paper-trading-simulator (feature page). Last reviewed 2026-05-11.