Methodology

Every formula below is the one the site actually runs. Where a stage can refuse to produce a number, the condition is stated β€” a withheld figure is a result, not a failure.

The dependency chain

A forward dividend per share is the end of a chain. Every input has its own provenance and its own failure mode; if any link cannot be sourced, the chain stops there and the page says which link broke.

expected DPS
 β”‚
 β”œβ”€β”€ payout policy ────────── registry entry, else verbatim policy text
 β”‚                            located in the corpus     (else: withheld)
 β”‚
 β”œβ”€β”€ distributable cash ───── max(0, cash earnings βˆ’ debt charge)
 β”‚    β”‚
 β”‚    β”œβ”€β”€ cash earnings ───── Ξ£ per class over the quarter
 β”‚    β”‚    β”‚
 β”‚    β”‚    β”œβ”€β”€ rate ────────── booked days: the issuer's own rates
 β”‚    β”‚    β”‚                   open days: the forward for the quarter where
 β”‚    β”‚    β”‚                   one is printed, else the latest monthly
 β”‚    β”‚    β”‚                   median, Γ— the spot realization factor
 β”‚    β”‚    β”œβ”€β”€ break-even ──── issuer-disclosed $/day, else derived
 β”‚    β”‚    β”‚                   from its own cost lines (else: withheld)
 β”‚    β”‚    └── vessel-days ─── disclosed, else vessel count Γ— quarter days
 β”‚    β”‚
 β”‚    └── debt charge ─────── interest expense + mandatory amortization
 β”‚         β”‚
 β”‚         β”œβ”€β”€ interest ────── reported, else carried ≀ 3 quarters
 β”‚         └── amortization ── next-12-months scheduled principal
 β”‚                             (never total repayments)  (else: withheld)
 β”‚
 └── shares outstanding

The standardized quarter

Every company-quarter is one standardized file, so companies are comparable cell by cell:

fleet:          quarter-end vessel count per class, QoQ delta, fleet events
earnings:       rate Γ— vessel-days βˆ’ opex βˆ’ G&A βˆ’ installment capex = income
dividend:       payout multiple Γ— income = declared dividend
reconciliation: bridge income vs reported net income must match Β±5% β€” else flagged

Reconciliation failures render visibly. Missing data renders as "β€”", never as a fabricated number.

Stage 1 β€” the current rate

A vessel class is priced from a basket of trade routes, not a single route. This matters: one route can be extreme for reasons specific to it, and pricing a whole fleet from it overstates every downstream figure.

for each route in the class:
    route_median[m]  = median( prints of that route in month m )

class_rate[m]        = median( route_median[m] for all routes in the class )
current rate         = class_rate[ newest month present ]

The current rate is what the dashboards show. A forecast quarter is priced differently β€” from the quarter's own forward while it runs, from the mean of its own months once it has ended β€” see How open days are priced.

Step by step:

1. collect every weekly print for every route mapped to the class
2. bucket by calendar month  (report_date[:7])
3. median within each route-month   β†’ route_median
4. median across routes             β†’ class_rate
5. take the newest month            β†’ the published "current rate"

Median, not mean, at both levels β€” one extreme print cannot drag the class. Weighting is equal across routes; it is deliberately not weighted by print count, or a route quoted four times a month would outvote one quoted once.

A class with no routes carrying data yields nothing and renders "β€”". It is never given a neighbouring class's rate as a proxy.

Stage 1b β€” the step-change guard

A rate that jumps far above its own history is either a real market repricing or a data error, and the two look identical in isolation. The guard flags the jump and then looks for a second, independent source.

flagged      if   class_rate > 1.8 Γ— median( all prior monthly medians )

confirmed    if   βˆƒ a cross-source print p on one of the class's routes
                  where   |p βˆ’ class_rate| ≀ 0.30 Γ— max(p, class_rate)
                  and     age(p) ≀ 45 days

A flagged class still renders and is still modelled on β€” withholding a real repricing would be its own distortion. Confirmation decides what the note says, not whether the number appears:

flagged + confirmed    β†’ renders, note names the corroborating source
flagged + unconfirmed  β†’ renders, note reads "no corroborating source available"

Stage 2 β€” expected TCE

Per class, the expected rate blends the portion already fixed on charter with the portion still open to the spot market:

booked_vessels = round( count Γ— fixed_pct )
open_vessels   = round( count βˆ’ booked_vessels )

class_tce      = ( booked_vessels Γ— booked_rate + open_vessels Γ— class_rate )
                 ─────────────────────────────────────────────────────────────
                                        count

fixed_pct is the fraction of spot days fixed at the guided rate, as disclosed by the issuer. With no coverage guidance the class is treated as fully open and the note says so.

The fleet figure is vessel-day weighted, not an average of the class rates:

fleet_tce = Ξ£( class_tce Γ— class_vessel_days )
            ────────────────────────────────────
                 Ξ£( class_vessel_days )

A class with a rate but no vessel-days on file is excluded from the mean and named in the gap note β€” never equal-weighted, never counted as zero days. If no class has vessel-days there is no fleet mean.

Stage 3 β€” revenue and cash earnings

Revenue and cash earnings are built per class and summed. Cash earnings subtract the cash break-even, which is the level below which a vessel earns nothing to distribute:

vessel_days = disclosed_net_vessel_days
              else round( count Γ— quarter_days )

revenue   = ( open_vessels Γ— class_rate + booked_vessels Γ— booked_rate )
            Γ— quarter_days

cash      =   max( class_rate  βˆ’ break_even, 0 ) Γ— open_vessels   Γ— quarter_days
            + max( booked_rate βˆ’ break_even, 0 ) Γ— booked_vessels Γ— quarter_days

The max(…, 0) floors each class at zero: a class earning below its break-even contributes nothing to distributable cash, and is not allowed to subsidise a profitable class by going negative.

Both numerator and denominator of any per-day figure cover the same vessels and the same days. A rate implied by dividing whole-fleet revenue by whole-fleet days, when only part of the fleet earned it, is not published.

The cash break-even is the issuer's own printed figure where it prints one. Otherwise it is derived from the issuer's own cost lines β€” vessel opex, G&A, interest and scheduled principal over the same quarter's vessel-days β€” and labelled derived. With neither, there is no cash-earnings figure, and the dividend walk stops here.

Stage 4 β€” the debt charge

A levered owner pays interest and repays principal before anything is distributable. Both are real cash calls, so an unknown debt charge is never treated as zero β€” that would overstate the dividend by the entire debt service.

debt_charge        = interest_expense + mandatory_amortization
distributable_cash = max( 0, cash_earnings βˆ’ debt_charge )

A forecast quarter has not been reported yet, so each input carries a basis saying where it came from:

reported         the issuer's own filing for this period
scheduled        next-12-months principal from the debt maturity schedule
carried_forward  the last reported figure, reused β€” an assumption, labelled
carried_stale    carry refused: last report older than 3 quarters β†’ withheld

Mandatory amortization is taken from the maturity schedule, which is contractual and forward-looking. It is deliberately not taken from total debt repayments, which mix scheduled principal with voluntary prepayment, refinancing and revolver movement β€” that figure would overstate the charge and understate the dividend.

The three-quarter bound on carrying forward exists because a stale figure stops being an estimate: an issuer that has not reported in two years would otherwise carry its last interest expense into a live forecast indefinitely.

Stage 5 β€” the dividend walk

Distributable cash becomes a per-share figure under the company's own stated payout policy. Each policy type has its own arithmetic:

full_adjusted_profit  distributable = cash βˆ’ floor        (floor 0 if undisclosed)
floor_excess          distributable = cash βˆ’ floor        (floor required)
liquidity_threshold   distributable = cash βˆ’ floor        (floor required)
pct_of_net            distributable = cash Γ— pct

  where a per-vessel floor is stated:
      floor = per_vessel_floor Γ— vessel_count

expected_DPS = distributable Γ— 1,000,000 Γ· shares_outstanding

If cash earnings do not clear the floor, the walk returns no dividend rather than a negative one. If the policy cannot be located as verbatim text in the corpus β€” annual report, presentation or press release β€” the walk is withheld entirely under a no verbatim payout policy located flag. Where the company quotes no percentage but has paid enough quarters, the payout share is read off what it actually paid and labelled PATTERN β€” an inference from its own history, never presented as its policy (STATED). With neither, the forward walk is withheld; declared DPS and trailing history still render.

Coverage is reported only when it is testable:

coverage_ratio   = cash_earnings Γ· payout
payout_multiple  = payout Γ· cash_earnings

Coverage is shown only under a STATED policy. Under a PATTERN payout the share is derived from the declared dividend, so coverage would be identically 1.0Γ— and would read as a trust signal while testing nothing β€” it is withheld.

The payer model, and where it refuses

For companies with enough printed history, a linear payer model relates the dividend to the fleet rate directly, fitted by ordinary least squares over printed (quarter, TCE, DPS) triples:

DPS = Ξ± Γ— TCE + Ξ²

     Ξ± = Ξ£(xα΅’ βˆ’ xΜ„)(yα΅’ βˆ’ Θ³) Γ· Ξ£(xα΅’ βˆ’ xΜ„)Β²
     Ξ² = Θ³ βˆ’ Ξ± xΜ„

     minimum 4 observations, else no fit
     implied dividend floor = βˆ’Ξ² Γ· Ξ±     ("what does the dividend die at")

The per-company vessel-days and share count fold into Ξ±, so no vessel-count assumption is needed.

A fitted line is only valid across the range it was fitted on. The model records that range and refuses outside it:

predict(TCE) = Ξ± Γ— TCE + Ξ²      if   tce_min ≀ TCE ≀ tce_max
             = withheld          otherwise

Out of range it does not clamp to the nearest fitted value. A clamped number is a fabricated number wearing a plausible face β€” it looks sourced and is not. Callers fall back to the distributable-cash walk above, which is arithmetic rather than statistical and stays valid at any rate, or withhold. The At today's spot card follows the same rule: outside the range its dividend history covers, it names the range instead of a figure.

How open days are priced

Days the issuer has already booked earn the issuer's own printed rates. The rest β€” the open days β€” earn a market rate for the class, read from the routes that class trades. Each index route belongs to exactly one class: TD23 and TD6 are Suezmax routes and price nothing else. Aframax and LR2 are one hull but two markets β€” they are counted together for ships and days, while LR2 prices off the clean TC routes and Aframax off the dirty TD routes. Only when one side has no index of its own does the other stand in, and the page says so.

quarter still running  β†’ the forward for that quarter on the class's own routes
                         (Gibson's weekly FFA; Braemar's board for dry bulk),
                         labelled MODELLED (forward)
                         else the latest monthly median, held flat
quarter already ended  β†’ the mean of that quarter's own monthly medians

Spot realization

An issuer's spot ships do not earn the whole index: fixtures lag the market and ships ballast. So the open days are priced at the share of the index this issuer's own spot business has captured over its last closed quarters β€” its own history, never a peer's:

realization = median over closed quarters of   spot TCE Γ· same-quarter index

spot TCE = the issuer's printed spot TCE, per class      where it prints one
         = (fleet TCE Γ— days βˆ’ time-charter revenue)
           Γ· (days βˆ’ time-charter days)                  otherwise

It is measured on spot results because it is applied only to spot days. A fleet TCE includes the time charters, which the estimate already prices at their own rates, so dividing the fleet TCE by the index would discount a charter-heavy fleet twice. Only time-charter days the issuer has printed are removed; with fewer than two measurable quarters no factor is applied, and the page says so.

How wrong the fleet-TCE forecast has been

The forecast is scored against what the companies went on to report. Every quarter's fleet TCE is locked at the earliest week it was computable from public data alone, then compared with the reported figure once results print:

Forecast TCE: 90 scored company-quarters across 17 issuers, mean absolute error 33%.

That is the number, not a target. It is recomputed on every build from the scored benchmark rows, so it moves β€” up as well as down β€” as more quarters close. A company page with scored quarters carries its own error table under Forecast accuracy β€” fleet TCE.

Each row scores the model as it stood when that forecast was made. Errors are recorded once and never restated, so this figure is the accuracy of the forecasts actually published β€” made between 2026-09-03 and 2026-09-09, across 4 versions of the model β€” not a re-run of today's model over past quarters. The two differ whenever the model has changed, and the older rows are the ones a re-run would flatter. Restating them would let the model improve its own report card after the fact, so it does not happen.

The realization anchor is scored on its own track and is deliberately not printed beside the model error: each track is locked at the earliest week it becomes computable, and those weeks differ, so the two are not measurements of the same thing.

Why a figure is withheld

Each stage can stop the chain. The page always names which one did:

no payout policy in the corpus      β†’ forward walk withheld, history still shown
no break-even, printed or derivable β†’ no cash earnings β†’ no walk
no interest or amortization        β†’ debt charge unknown β†’ no walk
last report older than 3 quarters  β†’ carry refused (carried_stale) β†’ no walk
rate outside the fitted OLS range  β†’ no extrapolation β†’ fall back or withhold
bridge vs reported net income >5%  β†’ reconciliation flag rendered on the figure
no route data for the class        β†’ rate renders "β€”"; a neighbouring market
                                      stands in only where named (Xeneta lanes
                                      for a liner, the Capesize index for a
                                      Newcastlemax): ASSUMED, and the gap says so

A dash means not known. It never means zero, and it is never a rendering fault.

The rates behind every number

Every fleet-TCE figure on this site is built from spot route assessments. This is what those routes are, and where each one stood at its most recent print β€” the reference a reader needs to know what they are looking at. Latest print only. The run of prior weeks is not published here; this is a reference, not a series.

RouteVessel classWhere it runs LatestAs ofSource
TD15 VLCC WAF→Far East $711,081/day 2026-10-16 shipbroker
TD22 VLCC USG→China $551,352/day 2026-10-16 shipbroker
TD3C VLCC AG→China $1,387,683/day 2026-10-16 shipbroker
TD27 Suezmax Guyana–UKC $530,492/day 2026-10-16 shipbroker
TD19 Aframax Med–Med $329,935/day 2026-10-16 shipbroker
TD25 Aframax USG–UKC $198,525/day 2026-10-16 shipbroker
TD26 Aframax EC Mex–USG $247,546/day 2026-10-16 shipbroker
TD7 Aframax UKC–UKC $474,585/day 2026-10-16 shipbroker
TC1 LR2 AG–Japan $284,616/day 2026-10-16 shipbroker
TC20 LR2 MEG–UKC $333,985/day 2026-10-16 shipbroker
TC5 LR1 AG–Japan $202,500/day 2026-10-16 shipbroker
TC8 LR1 MEG–UKC $243,945/day 2026-10-16 shipbroker
TC14 MR USG–UKC $52,836/day 2026-10-16 shipbroker
TC17 MR MEG–E Afr $113,357/day 2026-10-16 shipbroker
TC2 MR Cont–US AC $11,053/day 2026-10-16 shipbroker
TC21 MR USG–Caribs $47,575/day 2026-10-16 shipbroker
TC6 MR Algeria–EU Med $88,913/day 2026-10-16 shipbroker
TC7 MR Singapore–EC Australia $70,656/day 2026-10-16 shipbroker

Route codes are Baltic Exchange designations; the assessments are collected from shipbrokers' published weekly reports. Individual brokers are not named per row. TD20 is withheld: the latest print sits above the plausibility ceiling for its vessel class, and a reference page that cannot be trusted is worse than a shorter one.

What else the numbers rest on

Beyond the route assessments above, every figure on this site comes from one of four places, all of them public: the issuer's own filings and press releases; exchange disclosure feeds; equity closing prices; and shipbrokers' published weekly reports. Each value in the store carries its source, its as-of date and a quality label, and those travel with it onto the page.

Forward prices are labelled. Forward freight agreements are the market's expectation, not a realized rate. They price a quarter's open days only while that quarter is still running and only on the class's own routes (see How open days are priced), and every such figure is labelled MODELLED (forward). They never stand in for a reported TCE.

What is deliberately absent. Licensed index composites are not republished here, and vessel asset values are not collected at all. Where a series would be needed to complete a company's chain and does not exist, the figure is withheld rather than estimated β€” see Why a figure is withheld.

Index licensing

Licensed index series (Baltic Exchange, Clarksons, SSE/SCFI) are never republished verbatim. The site shows issuer-printed values with citation, own computed aggregates, or links out to the source. Sparse public prints are labeled as such. Baltic headline data policy (Nov-2025) bars public display even of headline indices; Signal Group's weekly is the one republication-permitted channel quoting Baltic assessments.