Skip to content

dragonTiger · Dragon-Tiger List

sdk.dragonTiger exposes A-share Dragon-Tiger (龙虎榜) data: daily listing details, per-stock aggregate stats, institutional buying/selling, brokerage branch rankings, and the seat-level breakdown of a single stock on a given day.

ts
import { StockSDK } from 'stock-sdk'

const sdk = new StockSDK()
const detail = await sdk.dragonTiger.detail({ startDate: '20240101', endDate: '20240131' })

Methods

MethodDescription
dragonTiger.detail(options)Daily Dragon-Tiger listings over a date range
dragonTiger.stockStats(period?)Per-stock aggregate stats (listing count, cumulative buy/sell amount, ...)
dragonTiger.institution(options)Institutional buy/sell stats over a date range
dragonTiger.branchRank(period?)Brokerage branch (seat) ranking
dragonTiger.seatDetail(symbol, date)Seat-level breakdown for one stock on one day (buy + sell side)

All amount fields are in CNY. Items with a date follow the unified data contract and carry date / timestamp (number | null) / tz. Exact fields follow the implementation.

Dragon-Tiger is post-close data — today's rows arrive in the evening

The exchanges compile the Dragon-Tiger list after the close and publish it in the evening. Querying today's date during trading hours (before the 15:00 close) will never return today's rows — that is the source's normal timing, not a call failure.

For example, querying { startDate: '20260730', endDate: '20260803' } intraday on Monday returns only 07-30 and 07-31; 08-03 shows up once it is published that evening.

Schedule jobs to run after the close that evening (the next day is safer still), or check the market state first with sdk.calendar.marketStatus().

dragonTiger.detail

Fetch daily Dragon-Tiger listings over a date range. Each record represents one stock's listing on one day.

Example

ts
const details = await sdk.dragonTiger.detail({
  startDate: '20240101', // YYYYMMDD
  endDate: '20240131',
})

console.log(`${details.length} listings in January`)

// Sort by net buy amount, take top 10
const topNet = [...details]
  .sort((a, b) => (b.netBuyAmount ?? 0) - (a.netBuyAmount ?? 0))
  .slice(0, 10)

for (const d of topNet) {
  console.log(`${d.date} ${d.name}(${d.code}) net buy ${d.netBuyAmount}`)
}

Returns

DragonTigerDetailItem[]. Representative fields:

FieldDescription
code / nameStock code / name
dateListing date
closeClosing price for the day (CNY, number | null)
changePercentDaily change as a percentage (e.g. 5.2)
netBuyAmountNet buy amount on the list (CNY)
buyAmount / sellAmountBuy / sell amount on the list (CNY)
dealAmountTurnover on the list (CNY)
totalAmountStock's total market turnover that day (CNY)
netBuyRatioNet buy amount as a share of total turnover (percentage)
turnoverRateTurnover rate (percentage)
reasonReason for listing
afterChange1d / afterChange2d / afterChange5d / afterChange10dChange N days after listing (percentage)

Exact fields follow the implementation.

dragonTiger.stockStats

Per-stock aggregate stats, surfacing the most active names over a period.

Example

ts
const stats = await sdk.dragonTiger.stockStats('3month')

const hot = stats
  .filter(s => (s.count ?? 0) >= 5)
  .sort((a, b) => (b.totalNetAmount ?? 0) - (a.totalNetAmount ?? 0))

console.log(`${hot.length} stocks listed 5+ times in the last 3 months`)

Parameters

period?: '1month' | '3month' | '6month' | '1year', defaults to the last month per implementation.

Returns

DragonTigerStockStatItem[]. Representative fields:

FieldDescription
code / nameStock code / name
latestDateMost recent listing date
close / changePercentLatest close (CNY) / change (percentage)
countNumber of listings in the period
totalBuyAmount / totalSellAmountCumulative buy / sell amount (CNY)
totalNetAmountCumulative net amount (CNY)
totalDealAmountCumulative turnover (CNY)
buyOrgCount / sellOrgCountCumulative buy- / sell-side institution counts

Exact fields follow the implementation.

dragonTiger.institution

Institutional seat buy/sell stats over a date range.

Example

ts
const inst = await sdk.dragonTiger.institution({
  startDate: '20240101',
  endDate: '20240131',
})

const netBuy = inst.filter(i => (i.orgNetAmount ?? 0) > 0)
console.log(`${netBuy.length} records with net institutional buying`)

Returns

DragonTigerInstitutionItem[]. Representative fields:

FieldDescription
code / nameStock code / name
dateListing date
close / changePercentClose (CNY) / change (percentage)
buyOrgCount / sellOrgCountBuy- / sell-side institution counts
orgBuyAmount / orgSellAmountInstitutional buy / sell amount (CNY)
orgNetAmountInstitutional net buy amount (CNY)

Exact fields follow the implementation.

dragonTiger.branchRank

Brokerage branch (seat) ranking, ranked by cumulative buy/sell amount over the period.

Example

ts
const branches = await sdk.dragonTiger.branchRank('1month')

const topBuy = [...branches]
  .sort((a, b) => (b.totalBuyAmount ?? 0) - (a.totalBuyAmount ?? 0))
  .slice(0, 10)

for (const b of topBuy) {
  console.log(`${b.name} cumulative buy ${b.totalBuyAmount}`)
}

Parameters

period?: '1month' | '3month' | '6month' | '1year'.

Returns

DragonTigerBranchItem[]. Representative fields:

FieldDescription
codeBranch code
nameBranch name
totalBuyAmount / totalSellAmountCumulative buy / sell amount (CNY)
buyCount / sellCountBuy / sell listing counts
totalCountTotal listing count

Exact fields follow the implementation.

dragonTiger.seatDetail

Seat-level breakdown of one stock's listing on a given day. The buy side and sell side are returned together, distinguished by side.

Example

ts
const seats = await sdk.dragonTiger.seatDetail('600519', '20240115')

const buySide = seats.filter(s => s.side === 'buy')
const sellSide = seats.filter(s => s.side === 'sell')

console.log(`${buySide.length} buy-side seats`)
buySide.forEach(s => console.log(`  ${s.branchName} bought ${s.buyAmount}`))

console.log(`${sellSide.length} sell-side seats`)
sellSide.forEach(s => console.log(`  ${s.branchName} sold ${s.sellAmount}`))

Parameters

ParameterTypeDescription
symbolstringStock symbol, e.g. '600519' / 'sh600519'
datestringListing date, e.g. '20240115'

Returns

DragonTigerSeatItem[]. Representative fields:

FieldDescription
rankSeat rank
branchNameBrokerage branch / seat name
buyAmount / buyAmountRatioBuy amount (CNY) / share (percentage)
sellAmount / sellAmountRatioSell amount (CNY) / share (percentage)
netAmountNet amount (CNY)
side'buy' (buy side) / 'sell' (sell side)

Exact fields follow the implementation.