quantlab.dataset.sharadar.actions#
Sharadar corporate actions (ACTIONS) as a daily panel by family, keyed by permaticker.
ACTIONS holds one row per security, action and date: a dividend, a split, a
takeover, a delisting, a ticker change. Its action column takes one of
66 names, most of them a handful of rows (30-odd acquisition* names
record the exact consideration of single deals). SharadarActionsDataset
folds them into families, one variable or a few per family, each row
placed on its effective date (date; for a takeover or a delisting the
security’s last trading day): on the first SEP trading day on or after it,
and on no other day (quantlab.dataset.sharadar.filings.FilingPanelDataset).
A day without the action is NaN for a value and False for a flag.
The families and the vendor names in each (FAMILIES), with what each
value means as Sharadar’s descriptions table (actiontypes rows,
2026-10-16) states it:
dividend(dividend): cash per share paid on the ex-date, USD. The vendor adjusts the value for every split it had applied when the file was pulled; the panel multiplies it back by the ratios of the security’s ACTIONSsplitrows dated after the ex-date and before the file’s pull day (quantlab.dataset.sharadar.tables.split_basis_change), so it is the cash per share held on the day. Several on one day are summed.split(split): shares held after the split per share held before, on its effective date. Several on one day are multiplied.spinoff(spinoff,spunofffrom): spun-off shares issued per parent share, on the parent (spinoff) and on the spun-off security (spunofffrom);spinoff_value(spinoffdividend) the USD value of those shares per parent share, restored for later splits like a dividend;spinoff_counterpartythe other side’s permaticker;spinoff_side1 parent, 2 spun off, 3 both.acquisition(acquisitionbyon the acquired company,acquisitionofon the acquirer): the acquired company’s final market cap, USD millions;acquisition_counterpartythe other side’s permaticker;acquisition_side1 acquired, 2 acquirer, 3 both;acquisition_considerationwhat the acquired company’s holders received, from every otheracquisition*row of the day: 1 cash, 2 stock, 3 mixed (several kinds), 4 other (warrants, special securities). A consideration row also follows a merger.merger(mergertoon the non-surviving company,mergerfromon the survivor): the non-surviving company’s final market cap, USD millions;merger_counterparty;merger_side1 non-surviving, 2 surviving, 3 both.delisting(delisted,regulatorydelisting,voluntarydelisting,bankruptcyliquidation): the final market cap, USD millions (empty when the security is not the company’s primary common stock);delisting_reason1 delisted, 2 regulatory, 3 voluntary, 4 bankruptcy or liquidation, the largest when several.flags, True on the action’s day:
listed,initiated(coverage start of an already listed security),ticker_change,name_change,exchange_change,sic_change(each from its...from/...topair),spac_merger,spac_unit_separation,relation,reorganization(reorganizationfrom,reorganizationto,reorganizationpostsplitcommon) andequity_cancellation.
adrratiosplit (a split of an ADR’s ratio) is read and left out: ADRs are
outside the panel’s universe and SEP’s prices do not apply it. An action
name in none of these is refused, naming it, so a new vendor action is
never dropped silently: add it to FAMILIES.
Each variable’s attributes give its description, unit, the vendor
actions it is built from and, for a coded variable, codes (code, as
a string, to meaning). A counterparty is the permaticker SEP’s TICKERS rows
give the row’s contraticker as of the raw file’s pull, like the row’s
own ticker (quantlab.dataset.sharadar.permatickers); NaN when it maps to
no SEP security (a private acquirer, a fund, N/A), and the smallest one
when a day has several. A contraticker TICKERS gives to several
permatickers is not guessed either: the counterparty is NaN and the rows are
counted in <store>.counterparties.json ({"owner", "unmapped":
[{"contraticker", "first_date", "last_date", "rows", "reason"}]}, deleted
when there are none), with a warning. ACTIONS is keyed by SEP’s tickers and also holds
funds’ rows; a row mapping to no SEP security is left out. The panel covers
the whole market’s common stock by default (SEP’s category filter).
ACTIONS is pulled whole every day; update() appends the new trading
days and never rewrites a stored one. The vendor can record an action weeks
after its effective date; a stored store keeps the days as built, and only
a rebuild shows such a late row.
Examples#
Build the store and read a quarter’s dividends:
config = SharadarActionsConfig(
zarr_file_path="/data/quantlab/market/sharadar/sharadar_actions_1d/sharadar_actions_1d.zarr",
raw_data_dir_path="/data/quantlab/downloads/sharadar",
)
SharadarActionsDataset(config).update()
panel = SharadarActionsDataset(config).panel("2024-01-02", "2024-03-28")
panel["dividend"].attrs["unit"] # 'USD/share'
Classes
Daily panel of corporate actions by family, each on its effective date. |
|
One panel variable: the vendor actions it reads and how a day's rows combine. |