Market & DBPI - Complete Page Guide
The Daily Hire Market Index page (/market) is shipdata.net's freight-rate engine surfaced as a live board. Every daily-hire number on it is computed from where ships actually are - vessel positions, reported draughts, observed voyage history and owner break-even costs - drawn from live AIS plus a position feed that fills coverage gaps (coastal China, India, Indonesia, West Africa). It explicitly uses no external rate feed, no broker survey: only positions and status go in, the rates are computed by shipdata. The board refreshes in your browser every 5 minutes; the underlying engines recompute every 15 minutes server-side.
Page layout at a glance
From top to bottom the page stacks the following blocks, each documented below.
- Intro paragraph - states the core principle: each region's rate is set by the share of ships arriving in ballast (empty, going to load) versus laden (carrying cargo, going to discharge). Export hubs attract ships in ballast → tight rates; import sinks see ships arrive laden → loose rates.
- Composite headline strip - three big readouts (DBPI, World LSR, Hottest band) plus a
↻ Refreshbutton. - AI market read - an admin-only commentary card, normally hidden.
- Rate history - the DBPI composite line chart plus a per-band sparkline grid, with a window selector.
- Per-band tab bar - one button per tonnage band; selecting one opens its detail view (six KPI cards + route calculator + region table).
- Bottom-up market - a second, independent engine built lane-by-lane, with its own composite line, daily history, a published named-lanes table, and expandable per-band cards.
- All bands snapshot - one summary row per band.
- Methodology & audit trail - links to the full written methodology at
/blog/market.
All numbers arrive client-side from four JSON endpoints: /api/market_index (the DBPI top-down engine), /api/market_bottomup (the lane engine), /api/market_history and /api/market_bottomup_history. While they load you see grey skeleton shimmer placeholders; the hero numbers then count up with an ease-out animation that is suppressed if your OS has reduce-motion enabled. The whole board re-fetches itself every 5 minutes via a background timer.
The composite headline - DBPI, World LSR, Hottest band
The dark strip at the top carries three readouts separated by thin vertical rules, with a ↻ Refresh button at the right that forces an immediate reload of all feeds.
shipdata DBPI (the large accent-coloured number, e.g. 1042.5). DBPI stands for Dry Bulk Pressure Index, our live market index: a position-derived read of what the fleet is earning against its running cost, on a scale anchored so that 1000 marks the break-even line. Read it against break-even. The hover tooltip and the sub-line both state the scale:
- Around 1000 means the fleet is earning about break-even (owners covering costs, no profit).
- Comfortably above that anchor is a healthy mid-cycle market.
- Well above it points to boom conditions.
Under the hood it weighs each band's earnings against its own break-even and rolls the bands up across the fleet, anchored so the break-even line sits at 1000. The sub-line reads as of … UTC · DBPI 1000 = fleet at break-even so you always have the snapshot timestamp. Why it matters: it is your fastest single read on whether dry bulk as a whole is paying owners or starving them, and because it is built from positions it can move ahead of survey-based indices that lag the physical market.
World LSR (laden at sea) (e.g. 54%, colour-coded). LSR stands for Laden Sailing Ratio: the share of tonnage at sea that is sailing laden rather than empty. It is the cleanest scarcity signal because every ship underway is unambiguously laden or ballast - no port-state confusion between loading and discharging. The element's colour flips with the reading: a high share shows tight (pink/red), a low share loose (green), and the mid-range balanced (amber). The sub-line notes the cross-band boost the engine derives from world LSR: a modest, band-neutral lift or drag that only shows up at the extremes. Why it matters: a rising LSR with a flat DBPI is early warning that tightening is underway before it shows up in rates.
Hottest band (e.g. 120-190K $21,400/day). The headline strip computes this by sorting all bands on their global multiplier (how far the earned rate sits above the cost floor) and showing the leader - the size class earning the largest premium over its cost floor right now. Its sub-line shows that band's own LSR and multiplier over break-even. Why it matters: it tells an owner or broker which segment is leading the cycle and where repositioning a flexible ship might capture the most upside.
AI market read and the Rate-history charts
AI market read is an admin-only commentary card. The page silently probes /api/admin/market_commentary; for ordinary users that endpoint returns 403 (and in production the LLM backend is off, so it reports available:false) and the card stays hidden - you will normally never see it. When present it shows a short generated narrative plus the model name appended after a dot; it is cached for 6 hours and is a convenience layer only, carrying no data you cannot read directly off the board.
Rate history card (hidden until at least one daily snapshot exists). It charts the trajectory of the DBPI top-down engine:
- Window selector (top-right dropdown): Last 30 / 60 / 90 days / Last 12 months, defaulting to 60. Changing it re-queries
/api/market_history. - DBPI composite chart - a full-width SVG line of the composite index over the window. The Y-axis min and max are printed in the bottom-left and top-left corners; a dot marks the latest point. Days with no snapshot (nulls) are skipped, not drawn as zero. If the whole window is empty the chart prints
no data yet. - Per-band sparkline grid - one small card per band, in fixed DWT order. Each card shows the band label, its latest $/day in accent colour, and a % change from the first to the last non-null point over the window (green if up, pink/red if down) above a mini line chart. The recorded snapshots are logged at the top-down (DBPI scarcity) level, which sits below the live bottom-up headline; so the sparkline agrees with the per-band $/day printed above it, the whole series is rebased by a single factor that pins its latest point to that live headline while preserving the day-to-day shape.
- Meta line - e.g.
61 daily snapshots, 2025-04-02 → 2025-06-01, telling you exactly how deep the recorded history actually is.
Why it matters: the spot numbers tell you where the market is; this card tells you direction and speed. A band sparkline turning up days before the composite is the kind of divergence a position-trader or a charterer timing cover wants to catch.
Per-band tabs and the band detail view
Below the history sits a horizontal tab bar, one button per band, in fixed DWT order: 0-5K, 5-10K, 10-17.5K, 17.5-30K, 30-47K, 47-55K, 55-68K, 68-90K, 90-120K, 120-190K, 190-250K - the 11-band taxonomy. Labels are DWT ranges (not trade names) so you can map a specific vessel to its band by deadweight alone; roughly, 30-47K is Handysize, 47-55K Handymax, 55-68K Supramax, 68-90K Panamax, 90-120K Kamsarmax, 120-190K Capesize, 190-250K VLOC. Each tab shows the band name and, beneath it in grey, the band's global rate abbreviated to one decimal of thousands (e.g. $18.5K) or - if the band has no priced regions. The active tab is accent-coloured with an underline; your last choice is saved in the browser (localStorage), and on first load with no saved choice the page opens the largest band by fleet count.
Selecting a band renders its detail card, titled e.g. 120-190K market - macro granularity. Granularity is macro for bands above 17,500 DWT (priced across ~16 broad ocean basins) and detailed for the small short-sea bands at or below 17.5K (priced at finer sub-region level). A CSV-export button is attached next to the title; it is admin-only - non-admin users cannot download.
The six KPI stat cards:
- Global daily hire - the band's headline $/day - now the bottom-up demand-pull rate, built up inductively from the band's busiest lanes' supply/demand (the same engine the globe shows), so it reflects the real inter-regional market rather than a top-down average. The DBPI supply/demand model is kept as the pressure index (the composite at the top + the per-region dispersion shown below).
- Avg break-even - the owner break-even floor (
owner BE floor) averaged across the fleet members that carry a break-even, used as the price anchor. - LSR (laden at sea) - this band's own Laden Sailing Ratio, colour-coded tight/loose/balanced, with a note that scarcity is neutral in a balanced market and firms as the band tightens. It captures the heart of the band's pricing: a scarcity effect that is neutral when the band is balanced and bites progressively harder as the laden share climbs toward full employment, applied on top of the band's break-even anchor.
- Ballast arrivals - the band-wide share of inbound tonnage arriving empty, noted as the empty share of all inflow. A higher share means more ships steaming in to load, i.e. stronger demand pull.
- Multiplier - how far the band's earned rate sits above its break-even, shown with its two contributions broken out: the band's own scarcity effect and the world-LSR boost. This number is what the hottest-band sort and the all-bands table also use.
- Active fleet - total ships tracked in the band, with a sub-note
N with BEshowing how many carry a break-even cost (and therefore feed the rate anchor).
The route calculator (trade-balance pricing)
Inside the band detail card sits a route calculator - two searchable dropdowns (Load region → Discharge region) populated with that band's regions, each option showing its current $/day in parentheses, plus a live output on the right that updates the moment you pick regions.
With only a load region chosen, the output shows that region's headline daily hire with the note one-way (no backhaul). Add a discharge region and the calculator switches to the same hybrid trade-balance model the backend lane pricing uses:
- It starts from a symmetric blend of the two regions' rates, so load-end firmness is balanced against discharge-end softness rather than just quoting the load leg.
- It then applies a bounded direction factor. When the engine has enough observed laden voyages on that exact region pair it uses the empirical asymmetry; otherwise it falls back to a volume heuristic from the two regions' ballast shares and labels it a fallback.
- The output's small sub-line is fully transparent: it prints the blended value, the computed direction reading, the resulting adjustment, and which source was used.
How to use it: pick the load region you'd fix from and the likely discharge to see a directional round-the-trip-adjusted daily hire rather than a naive one-way number. Why it matters: a headhaul (loaded into a tight import market) prices well above its backhaul return; the direction factor captures that asymmetry, so a broker quoting a specific lane gets a number that already accounts for whether the cargo is flowing with or against the dominant trade direction.
The region table (per-band supply/demand detail)
Below the calculator is the scrollable region table - the granular evidence behind the band's headline. Rows are sorted by daily hire, highest first. Ten columns:
- Region - the macro basin or detailed sub-region.
- Daily hire - that region's computed $/day (accent colour), the band's overall level scaled up or down by how that region sits relative to the band.
- Rel - the region's rate relative to the band median (e.g.
1.30×), colour-coded tight/balanced/loose. A small dim×0.NNmay appear beside it: that is the sparsity discount, shown only when a region carries materially less traffic than expected for its size, with a tooltip stating the region's traffic share and the discount applied. This stops a region with three ships and a freak ballast share from publishing a fake premium. - vs band median - a horizontal gradient bar (green→amber→pink) whose fill length encodes the relative factor, a quick visual of how far above or below median the region sits.
- Ballast % - the fraction of ships arriving here that are ballast (empty, coming to load); colour-coded, with the export-hub/import-sink logic spelled out in the header tooltip. High = export hub, ships must be attracted in = tight. A dim parenthetical raw figure appears when the smoothed and raw observed shares differ materially, with a tooltip noting the sample size and that Bayesian smoothing shrinks thin samples toward the band prior.
- Bal in - count of ships heading here empty (to load).
- Lad in - count of ships heading here laden (to discharge).
- Open - ballast ships currently idle at ports in the region (open tonnage physically present).
- Bal DWT / Lad DWT - the same inbound flows expressed as deadweight, abbreviated (e.g.
4.5M).
How to read it: a region with high Ballast %, high Bal in and low Open is a tight load market - ships are being pulled in faster than open tonnage can satisfy. The opposite (low Ballast %, high Lad in) is a discharge sink where ships pile up empty and rates soften. Why it matters: this is where a charterer sees why a basin is firm or soft in raw ship counts, and where an owner spots which regions are draining open tonnage.
Live tonnage analysis - read the market by place for your size
The heart of the Market page is now a decision-support board. It follows the size tab you select at the top of the page (pick a 7/14/30-day window here) and the table fills with every place that size trades - regions for 17,500 dwt and up (the deep-sea basins: ECSA, Far East, Australia, US Gulf…), countries for anything smaller (the coastal/regional traders) - each read straight off live vessel supply and demand:
- Daily hire $/day - the modelled live rate for that place and size.
- Strength × - export intensity: above the neutral line the place loads more than it discharges (tight, price up, shown green); below it the place is import-soft (amber).
- Export 🟢 / Import 🔵 - ships loading (at port + heading in to load) vs discharging - the raw activity behind the strength.
- S/D balance - live demand set against inbound supply: well above the neutral line the place is tightening, well below it loosening.
- Reposition - the position value of ending up there ($/day) and, for a soft place, how many empty days it would take to ballast to the nearest cargo (e.g.
ballast → Australia).
It is the same live supply/demand engine that prices the rest of the site (and the Fix This Cargo and ship pages) - built from positions, drafts and voyages, not a rate survey. Read it to see at a glance where your size is hot, where it is soft, and where a ship is best repositioned. (This replaced the older bottom-up lane board and the all-bands snapshot - the same numbers, now organised for decisions.)
Tonne-demand - cargo actually loaded (leads the rate index)
The headline rate index tells you what tonnage is worth today. Tonne-demand tells you how much cargo is actually being moved - and it moves first. Cargo gets booked before hire firms, so a rising tonne-demand curve is a leading signal for the rate index that sits above it on this page.
It is read straight off realised voyages, not modelled. Every time a tracked ship arrives light at a load port and sails heavier, the rise in her draught - multiplied by her deadweight-per-centimetre (TPC) - is the tonnage she took on. We keep only the cargo loadings (filtering out bunkers and draught noise), attribute each one to the load region and the ISO week it happened, and add them up. No survey, no market figure - just tonnes that physically went over the rail.
The card shows four numbers and a weekly bar chart:
- Tonnes loaded over the window (8 / 12 / 20 weeks), with the week-over-week change on the most recent complete week - green when loadings are accelerating, red when they are fading.
- Cargo loadings - the number of distinct load events behind the tonnage, so you can see whether a move is broad or driven by a few big stems.
- Average load factor - how full ships sail, tonnes loaded set against ship deadweight. A high factor means ships are sailing full; a persistently low one flags part-cargoes / multi-port loading, i.e. ships still holding spare capacity - hidden open tonnage that softens the market even when the headline looks tight.
- The weekly bars chart the tonne-demand trend. The last ~2 bars are drawn dashed: a load leg only closes once the ship sails from the load port, so the freshest weeks are still maturing and under-count. They are shown for shape but excluded from the week-over-week headline so the number never lies about a half-counted week.
The card follows the size tab you select at the top of the page, so it always shows the band you are reading - and the top load regions table shows where that cargo is coming from. Every week is frozen into an append-only history the moment it matures, so the index deepens on its own and its lead over the rate index can be back-tested as the runway grows.
One sizing rule, one archive (2026-07). A draught change is priced in tonnes via the ship’s TPC and read against her size: a large enough swing reads as a cargo operation, a smaller one as a bunker/stores call, and anything below that as noise. Broker-reported port stays carry a single coarse draught, so tiny changes there are treated as reporting noise, never promoted to a call. The same thresholds classify every voyage leg whichever feed it came from, and the stored weekly history has been re-derived under this one rule - past weeks are directly comparable with the live strip.
Expected weeks (2026-07). To the right of the divider the tonne-demand chart now shows expected loadings for the next few weeks - hatched, outlined bars, clearly distinct from the solid realised bars. These are projected from where empty ships are currently declared open (broker laycans, the same freight feed that arbitrates coverage): each ballaster is placed in the ISO week its declared open date falls in, sized from its deadweight and the load region’s observed load factor, then the whole forward set is level-calibrated to your realised weekly flow so a standing pool of open ships can’t overstate the near weeks. A week only draws once enough declared ships support it, so the horizon is shorter for sparse sizes. Ships already open now (or overdue) are counted separately as “open now” standing tonnage, not smeared across future weeks. It is a projection, not an observation, and never a market figure - and it refreshes off live fleet state every time you open the page.
Demand vs Supply - did cargo get abundant, or ships scarce?
What it answers. Every other reading on this page (DBPI, the region table, the reflexivity radar) is built from where the empty ships are - the SUPPLY side. The Demand vs Supply strip adds the missing axis: realised DEMAND, read off how heavily ships actually load. For each top loading region it shows a one-word verdict - demand-led, supply-led, cooling or balanced - so you can tell whether a region firmed because cargo got more abundant, or simply because ships got scarce. The whole strip is tonnage-specific - it follows the size tab you select at the top of the page, so a Capesize and a Handysize read of the same region can legitimately differ.
How the read is built. The headline signal is the region’s median load factor - cargo tonnes taken on (from each ship’s draught-rise) set against deadweight and expressed on a 0-100% scale, taken over realised cargo loads by ISO week. A rising load factor means ships are loading fuller (stronger cargo demand). That is fused with the change in inbound ballast (empty ships heading in = supply) from the reflexivity engine. Demand-led = load factor and/or realised volume rising; supply-led = inbound ballast thinning while load factor stays flat (fewer ships, not more cargo); cooling = load factor easing; balanced = the two roughly in step. A small amber ⚠ flags a region where ballast is piling in ahead of cargo (crowding - overshoot-prone).
How to read it honestly. Each chip names only what actually moved, so the words never contradict the load-factor / cargo / ballast arrows beside them; hover for the full reason, the load count, the week the load factor is current to, and the part-cargo share. It is a present-state observation, not a forecast - a region needs enough closed cargo loads per week before its load factor is shown at all (thin weeks are suppressed), and the most recent ~2 weeks under-count because loads are still closing.
Methodology & audit trail
Every figure is computed by us from observable inputs - live ship positions, reported draughts, observed voyages and the owner break-even / running-cost basis - never from a panel survey or a market assessment. The headline DBPI is now the live market index: a position-derived read of fleet earnings against running cost, anchored so 1000 marks the break-even line. Per-place daily hire comes from each band's average running cost lifted by the live export-intensity of that region/country; lane and voyage rates add the trade direction and a repositioning adjustment. The full step-by-step methodology lives in the dedicated guide.
Coverage rule (2026-07). Demand and activity series read realised legs from both feeds under one arbitration: live AIS inside its tracking eras, broker-reported calls outside them. The archive was re-derived once under this rule (a dated methodology step, like the sizing-rule step above), so past weeks are comparable with the live values.
One headline number: the live lane engine
Every per-band headline $/day on this page - and on the FFA Reports page - is now the SAME number: the live lane engine level (the volume-weighted average of that size class’s live region rates, the very rates the per-region rows and the lane pages show). Previously the headline came from the bottom-up demand-pull composite while the lanes/regions came from the live engine, so the header could read well below its own lane rows on the big classes. They are unified now, so the band headline always ties out with the lanes beneath it. The DBPI stays the separate pressure index (a ratio, not a $/day), and the bottom-up demand-pull figure remains the fallback when a class has no live region rates.
Positioning vs Fundamentals - the reflexivity radar
Near the foot of the Market page, the Positioning vs Fundamentals panel applies a reflexivity lens: in dry bulk, owners ballast ships on the EXPECTATION of where cargo will be, and that anticipatory positioning itself moves the supply/demand balance before rates print. Per macro-region × size band, the panel measures the cross-sectional gap between how fast the fleet is repositioning IN (ballast inflows) and how fast REALISED cargo demand (tonnes loaded) is changing this week.
Crowding ahead of cargo = ships piling into a region faster than realised cargo justifies (belief/momentum-led, overshoot-prone). Cargo without ships = demand present but tonnage absent (squeeze-prone). The independent supply/demand ratio and the live lane rate are shown alongside as corroboration.
This is present state only - not a forecast. The overshoot/reversal (predictive) layer is deliberately withheld: a backtest on the current short history could not yet beat a naive mean-reversion baseline, so we show where positioning has decoupled today and let the weekly history accrue before making any timing claim. Two things can mimic the signal and are NOT reflexive - seasonal pre-positioning (e.g. ahead of the Brazil or Australia majors) and port congestion (a berth queue lifts positioning while loaded tonnes fall). Read it as a risk/regime gauge, not a buy/sell signal.
It is not only on the Market page. The same present-state read now travels to the pages where you act on it, each filtered to that page’s own region and size band. On a ship page it shows the regime for that vessel’s band in the region she is heading to - “heading into a crowd” versus “a tighter spot”. On a port page it shows, for that port’s basin, which size bands are crowding or squeezing this week. On a trade-lane page it tags the load end - is this band piling into the load region ahead of cargo? Because all four views read the one radar cell for their region×band, they never disagree. Coverage spans all 14 macro basins today; finer sub-basin granularity unlocks as the weekly cargo record deepens.
Does the leading-indicator claim actually hold? We grade it in the open. Each week’s panel is logged to an append-only runway, and a self-grading backtest measures whether this-week crowding really precedes next-week rate weakness. Until enough overlapping weeks accrue (target ~12-16, around Q3-Q4 2026) it honestly reports “building” rather than dressing up an unproven edge - then it turns the verdict on by itself. Today the radar is a present-state regime gauge; the forecast layer earns its place only once the runway proves it.
How the paper market fits in
Forward outlook vs the paper market. On each lane page the Forward outlook strip (+1w / +1mo / +3mo) is our own model - a damped-trend projection off that lane’s own rate history, with a confidence band. For the size classes that have a traded paper curve (Capesize, Panamax, Supramax) we add a small paper-market read underneath: whether the forward is firmer or softer than the current spot, and whether our own read is in line with or reads firmer/softer than that curve. It is a direction check, not a quote - the actual paper levels stay internal. Size bands with no paper curve simply show our model, clearly labelled.
Baltic-anchored headline (July 2026)
From mid-July 2026 the per-class headline $/day you see on the Market page (and everywhere that quotes it, including the FFA report spot) is anchored to the Baltic Exchange time-charter assessment for that vessel class - the same benchmarks the physical and paper markets settle against. Classes without their own published index (small coasters, and the very largest ore carriers, which use a conventional premium over the Capesize index) stay on our own model.
Our live AIS positioning signal is not discarded: where the supply/demand balance we observe has genuinely shifted, the headline moves around the Baltic anchor within tight bounds - close enough to the exchange to be immediately comparable, free to disagree where the fleet's real positioning says the balance has moved. If the exchange feed is ever stale, the headline automatically falls back to our pure model, so the number is never anchored to old paper.
Coaster classes: corridor tether (July 2026)
Small coaster classes (below 30,000 dwt) have no published exchange index, so their headline now runs inside a wide corridor around a reference derived from the live Handysize/Supramax curve. Short-sea supply and demand is where our AIS coverage is sharpest, so our own model remains the primary signal - the corridor only keeps the coaster cycle coupled to the wider dry bulk market and fences out extremes.