quantlab.dataset.massive.short_interest#

Massive’s short interest as a daily release panel on the permaticker axis (#355).

Massive’s /stocks/v1/short-interest records (FINRA’s short interest, settled twice a month), as MassiveClient.pull keeps them in the REST raw tier (quantlab.dataset.massive.raw.read_rest_records), become three variables on SEP’s trading calendar, one column per permaticker:

  • short_interest: the shares sold short and not yet covered at the settlement date;

  • short_avg_daily_volume: the vendor’s average daily volume over the settlement period (avg_daily_volume);

  • days_to_cover: the vendor’s short_interest / avg_daily_volume.

Each settlement date is a release. FINRA publishes it about seven business days after settlement, so a release becomes visible on the 8th trading day after its settlement date (release_lag_bars) and is shown until the next release becomes visible. A security the next release does not carry shows nothing from then on: a cell shows only the release visible that day, never an older one.

Each record is placed on the permaticker the Ticker map gives its ticker on the settlement date (the day the figure is about), through quantlab.dataset.massive.placement.TickerPlacement; a record it cannot place is left out and counted in <store>.unplaced.json. A record pulled again with other values (a revision) replaces the earlier one. Only the universe’s permatickers (by default SEP’s domestic common stock) are columns.

The store is built through the last day SEP, the REST pull and the Ticker map all reach, so update() appends a day only once each of them holds it.

Examples#

Build the store and read one security’s short interest:

config = MassiveShortInterestConfig(
    zarr_file_path="/data/quantlab/market/massive/massive_short_interest_1d/massive_short_interest_1d.zarr",
    raw_data_dir_path="/data/quantlab/downloads/sharadar",
    massive_dir="/data/quantlab/downloads/massive",
    ticker_map_path="/data/quantlab/market/massive/massive_ticker_map/massive_ticker_map",
    start_date="2016-10-10",
)
panel = MassiveShortInterestDataset(config).update().panel("2024-01-02", "2024-12-31")
panel["days_to_cover"].sel(symbol=199059)

Classes

MassiveShortInterestDataset

Daily release panel of Massive's short interest, by permaticker.