Skip to content

marketEvent · Limit-Up Pools / Intraday Changes

sdk.marketEvent provides 6 limit-up stock pools, 22 intraday change types and sector-change details (source: East Money push2ex).

Methods

MethodDescription
marketEvent.ztPool(type?, date?)Limit-up themed stock pools (6 pools)
marketEvent.stockChanges(type?)Market-wide intraday changes (22 types; array multi-type / 'all' supported)
marketEvent.individualChanges(symbol, opts?)Single stock's change-event stream for one trading day (all types)
marketEvent.individualChangesHistory(symbol, opts?)Single stock's changes over the last N days (per-day aggregation + coverage + stats)
marketEvent.boardChanges()Sector-change details for the day

Exact parameters and return fields follow the final implementation; the field tables below reflect the current data contract.


marketEvent.ztPool

Fetch limit-up themed stock-pool data — 6 pools in total. Some fields are only populated for specific pools (e.g. continuousBoardCount only for the limit-up pool, sealAmount only for the limit-down pool).

ts
import { StockSDK } from 'stock-sdk';

const sdk = new StockSDK();

// Today's limit-up pool
const ztPool = await sdk.marketEvent.ztPool('zt');
console.log(`${ztPool.length} stocks hit the limit up today`);

// Filter for 3+ consecutive boards
ztPool
  .filter(s => (s.continuousBoardCount ?? 0) >= 3)
  .forEach(s => console.log(`${s.name}(${s.code}) ${s.continuousBoardCount} boards - ${s.industry}`));

// Limit-down pool for a specific date
const dtPool = await sdk.marketEvent.ztPool('dt', '20240115');

Parameters

ParamTypeDescription
typeZTPoolTypePool type, defaults to 'zt' (see below)
datestringYYYYMMDD or YYYY-MM-DD, defaults to today

Pool type ZTPoolType

ValueDescription
'zt'Limit-up pool (default)
'yesterday'Yesterday's limit-up pool
'strong'Strong pool (60-day highs / repeat limit-ups)
'sub_new'Sub-new pool (first broken one-word board within 1 year of listing)
'broken'Broken-board pool (touched limit but did not seal)
'dt'Limit-down pool

Returns

ZTPoolItem[] (uniform fields; some are null depending on the pool):

ts
interface ZTPoolItem {
  code: string;
  name: string;
  price: number | null;                  // latest price
  changePercent: number | null;          // change (percentage number)
  limitPrice: number | null;             // limit price (some pools)
  amount: number | null;                 // turnover (currency main unit)
  floatMarketValue: number | null;       // floating market value
  totalMarketValue: number | null;       // total market value
  turnoverRate: number | null;           // turnover rate (percentage number)
  continuousBoardCount: number | null;   // consecutive boards (limit-up pool only)
  firstBoardTime: string | null;         // first seal time HHMMSS (limit-up / broken pools)
  lastBoardTime: string | null;          // last seal time HHMMSS (limit-up pool)
  boardAmount: number | null;            // sealing funds (limit-up pool)
  sealAmount: number | null;             // sealing funds (limit-down pool)
  failedCount: number | null;            // number of board breaks
  industry: string;                      // industry
  ztStatistics: string;                  // limit-up stats (e.g. '3/5' = 3 limit-ups in 5 days)
  amplitude: number | null;              // amplitude (percentage number, some pools)
  speed: number | null;                  // change speed (some pools)
}

marketEvent.stockChanges

Market-wide intraday changes — 22 types in total. type accepts a single type, an array (multiple types in one request), or 'all' (all 22 types; auto-paginates when the total exceeds the 5000-per-page server limit).

ts
// Monitor large buys
const largeBuys = await sdk.marketEvent.stockChanges('large_buy');
largeBuys.slice(0, 10).forEach(c => {
  console.log(`${c.time} ${c.name}(${c.code}) ${c.changeTypeLabel} ${c.info}`);
});

// Multiple types in one request — each row's actual type comes from the response `t` code
const seals = await sdk.marketEvent.stockChanges(['limit_up_seal', 'limit_down_seal']);

// All 22 types (can exceed 10k rows on a trading day; auto-paginated)
const all = await sdk.marketEvent.stockChanges('all');

Parameters

ParamTypeDescription
typeStockChangeType | StockChangeType[] | 'all'Change type, defaults to 'large_buy'; array for multi-type, 'all' for everything

Change type StockChangeType

TypeLabelTypeLabel
rocket_launchRocket launchlarge_sellLarge sell
quick_reboundQuick reboundaccelerate_downAccelerating down
large_buyLarge buy (default)high_diveHigh dive
limit_up_sealSealed limit uplimit_down_sealSealed limit down
limit_down_openOpened limit downlimit_up_openOpened limit up
big_buy_orderBig buy orderbig_sell_orderBig sell order
auction_upAuction upauction_downAuction down
high_open_5dHigh open 5-daylow_open_5dLow open 5-day
gap_upGap upgap_downGap down
high_60d60-day highlow_60d60-day low
surge_60d60-day surgedrop_60d60-day drop

Returns

StockChangeItem[]:

ts
interface StockChangeItem {
  time: string;                             // event time HH:MM:SS
  code: string;
  name: string;
  changeType: StockChangeType | 'unknown';  // 'unknown' for new server-side codes
  typeCode: string;                         // raw type code (server `t` field)
  changeTypeLabel: string;                  // Chinese label ('' for unknown codes)
  info: string;                             // extra info (from the upstream API)
}

marketEvent.individualChanges

Change-event stream of a single A-share stock for one trading day (all types in one call, newest first; server-side codes beyond the 22 known types degrade to 'unknown' with the raw code preserved).

ts
// Today's events
const events = await sdk.marketEvent.individualChanges('603087');

// A specific date
const friday = await sdk.marketEvent.individualChanges('603087', { date: '20260703' });

Server retention window

The per-stock endpoint only retains roughly the last few weeks of data (about a month in practice, and not guaranteed to be contiguous — occasional per-date gaps exist): dates with no data and "no changes that day" both return an empty array. Use individualChangesHistory (per-day available flags) to tell them apart, and always branch on the returned available instead of assuming a fixed window.

Parameters

ParamTypeDescription
symbolstringStock code, e.g. '600519' / 'sh600519'
options.datestringTrading day YYYYMMDD or YYYY-MM-DD, defaults to today

Returns

IndividualStockChangeItem[]:

ts
interface IndividualStockChangeItem {
  time: string;                             // HH:MM:SS
  typeCode: string;                         // raw type code (may exceed the 22 types, e.g. 8219)
  changeType: StockChangeType | 'unknown';
  changeTypeLabel: string;                  // Chinese label ('' for unknown codes)
  price: number | null;                     // trigger price
  changePercent: number | null;             // change% at trigger time
  info: string;                             // raw info CSV (format varies by type)
  v: number | null;                         // undocumented upstream field, passed through as-is
}

marketEvent.individualChangesHistory

Aggregates a single A-share stock's intraday changes over the last N calendar days: trading days inside the window are enumerated via the A-share trading calendar and fetched concurrently, then merged. This covers the "changes over the past 7 / 15 / 30 days" scenario.

ts
const his = await sdk.marketEvent.individualChangesHistory('603087', { days: 15 });

console.log(his.coverage);
// { from: '2026-06-22', to: '2026-07-06', availableFrom: '2026-06-23' }
console.log(his.stats);
// keyed by raw type code (stable); Chinese label inline:
// { '4': { count: 12, label: '封涨停板' }, '16': { count: 9, label: '打开涨停板' }, ... }

Parameters

ParamTypeDescription
symbolstringStock code
options.daysnumberLast N calendar days, 1~60, defaults to 7

Failure semantics

If any trading day's request still fails after the built-in retries, the whole call throws — no partial results (fail-fast). Per-day available: false strictly means "the server has no data for that day"; it is never used to mask a failed request.

Returns

IndividualChangesHistory:

ts
interface IndividualChangesHistory {
  code: string;
  name: string;
  requestedDays: number;
  coverage: {
    from: string;                         // window start YYYY-MM-DD
    to: string;                           // window end (today, Beijing time)
    availableFrom: string | null;         // first trading day with data (gaps may follow); null if none
  };
  days: Array<{                           // ascending by date
    date: string;
    available: boolean;                   // false = server has no data for that day
    code: string;
    name: string;
    changes: IndividualStockChangeItem[];
  }>;
  stats: Record<string, { count: number; label: string }>; // keyed by raw type code; label = Chinese display name ('' for unknown codes)
}

Full 30-day view: tick-level changes are limited by the server window; for the days beyond it combine fundFlow.individual (daily main-capital history), local limit-up detection from K-lines, and dragonTiger.detail — see the guide: 30-day per-stock changes panorama.


marketEvent.boardChanges

Sector-change details for the day, including the change-type distribution and the most active stock.

ts
const boards = await sdk.marketEvent.boardChanges();
boards
  .sort((a, b) => (b.totalChangeCount ?? 0) - (a.totalChangeCount ?? 0))
  .slice(0, 5)
  .forEach(b => {
    console.log(`${b.name}: ${b.totalChangeCount} changes, top ${b.topStockName} (${b.topStockDirection})`);
  });

Returns

BoardChangeItem[]:

ts
interface BoardChangeItem {
  name: string;                              // sector name
  changePercent: number | null;             // change (percentage number)
  mainNetInflow: number | null;             // main net inflow (currency main unit)
  totalChangeCount: number | null;          // total number of changes
  topStockCode: string;                     // most active stock code
  topStockName: string;                     // most active stock name
  topStockDirection: string;                // 'large buy' | 'large sell'
  changeTypeDistribution: Record<string, number>; // change-type distribution (type code -> count)
}