Skip to content

Carry Strategies (/carries)

Purpose: A screener for structured carry trades: positions where a trader deposits yield-bearing collateral on a lending protocol and borrows a cheaper asset against it, capturing the net spread. The page targets fixed-income portfolio managers and treasuries that want levered yield with a quantified risk profile.

ISR revalidation: 60 minutes.

Strategy Types

The page tracks strategies across three protocols (Fluid, Aave v3, SparkLend) using four structural types from Fluid's architecture plus the two e-mode shapes:

TypeStructureExample
T1 SingleYield-bearing collateral vs. single borrowed tokensUSDe collateral, borrow GHO
T2 Smart-Col / Single DebtLP position in a Fluid DEX pool as collateral, borrow single tokenweETH/ETH pool collateral, borrow wstETH
T3 Single Col / Smart DebtSingle collateral, borrow against a DEX-pool smart-debt positionreUSD collateral, smart debt in a USDC/USDT pool
T4 Smart-Col / Smart-DebtLP as collateral AND smart-debt LPwstETH/ETH pool on both sides
Aave v3 E-modeCorrelated-asset e-mode position on Aave v3wstETH collateral, borrow WETH
SparkLend E-modeSame shape as Aave e-mode, separate poolrETH collateral, borrow WETH

Each leg's APY is composed from on-chain index components and summed (full formulas in Metric Methodology). For T4 the carry nets two compounding pools: the smart-col earns fee APY plus weighted token appreciation, while the smart-debt pays weighted borrow cost minus fee APY (the borrower captures fees from the debt side).

Coverage: curated + auto-discovered vaults

The displayed rows are the union of two sources, deduplicated by vault address:

  1. Curated strategies — a hand-maintained registry in carries/page.tsx, each with a hand-written description.
  2. Auto-discovered Fluid vaults — every live Fluid vault whose supply-side TVL clears a $100k floor and that the app can render correctly, maintained in the fluid_vault_registry table by the ad-hoc sync-fluid-vaults.ts job (see Data Pipeline).

The sync pulls Fluid's API, computes supply USD TVL, classifies each vault into a T1–T4 config, and assigns a status:

StatusMeaningShown?
activeTVL ≥ floor and every token/pool it needs is coveredYes
below_floorTVL < $100kNo
blocked_adapterA collateral/debt token's intrinsic yield isn't modelled yetNo
blocked_poolA smart-col/debt DEX pool isn't snapshotted yetNo
blocked_reviewUnrecognised token, unsupported type, or a different-pool T4No
goneWas in the registry but no longer returned by the Fluid APINo

Blocked vaults are deliberately not shown. Displaying a carry whose collateral/debt yield the app cannot model correctly would mis-state it, and this is a credit-DD terminal. One concrete guard: a type-4 vault whose smart-collateral and smart-debt sit in different pools is blocked_review, because the current single-pool reader would read the collateral pool's (zero) debt reserves and report a wrong, often negative, debt APY. Auto-rows degrade gracefully where data is thin: risk parameters fall back to the registry's stored LTV, the capacity chip is suppressed, and the simulator's swap-cost quote degrades (rather than crashing) for tokens whose decimals aren't known.

CarriesTable

Bloomberg-style expandable table. Columns:

ColumnDescription
PlatformProtocol (Fluid, Aave v3, SparkLend); e-mode shown as a subtitle
Collateral assetTarget (yield-earning) asset
Debt assetBorrowed (funding) asset
Collateral APYTarget-leg realised trailing APY (7d / 30d toggle)
Debt APYFunding-leg realised trailing APY
CarryNet spread (collateral APY − debt APY)
Carry volSample standard deviation of carry over the window
SharpeCarry mean ÷ carry vol (same-sample; see Metric Methodology)
Max-lev carryCarry at maximum safe leverage given the vault's LLTV

Window toggle: 7D / 30D, switching every same-sample column consistently. Filters: multi-select Platform and a searchable Collateral-asset filter, plus an ETH / BTC / USD collateral-type filter. Deep-link: ?carry=STRATEGY_KEY opens a specific row on load.

Row expansion

Expanding a row reveals a two-column layout: the chart stack on the left and the trade simulator on the right, with a CHART / ORACLE toggle at the top. For pool-leg strategies (T2/T3/T4) the SmartCol/SmartDebt decomposition cards show the live token composition on each side of the pool.

CarryChart (three stacked panels)

  1. Collateral vs funding APY — target-leg APY (foreground) and funding-leg APY (amber) over time, so a reader can see whether a widening spread came from the collateral yield rising, the debt rate falling, or both.
  2. Carry differential — the net carry (cyan), filled green above zero and red below, making periods of negative carry obvious.
  3. Cumulative return (equity curve) — green curve showing the growth of $1 at the selected leverage, derived from cum = L·colCum − (L−1)·debtCum with elapsed-aware compounding.

Timeframe pills: 24h, 7d, 1m, 6m, 1y, ytd. On 6-month-or-longer windows the chart switches from per-snapshot (6h) spot rates to the 24h rolling average (and the daily rollup tables) to remove intraday noise. Carry-panel axis: a symlog transform (forward asinh(v·100), inverse sinh(t)/100) keeps zero in frame while compressing rate spikes.

Chart leverage slider

A compact, draggable control inline in the cumulative-return panel header ("ADJUST LEVERAGE"). It defaults to max-loop leverage (1/(1−maxLTV)) and, on drag, recomputes the green equity curve live anywhere between 1× and max. It is a historical backtest control and is fully independent of the simulator's own leverage slider (a forward projection that defaults to 1×). Terminal-styled: a 1px hairline rail, faint integer ticks, a thin amber I-beam handle.

Trade simulator

The right column is a forward-projection calculator, decoupled from the charts (it owns its own state).

  • Inputs: notional, holding period (days), target-APY and funding-APY assumptions (each with 7D / 30D / 90D trailing-window presets), and a leverage risk-slider (SAFE / CAUTION / DANGER zones derived from the vault LLTV).
  • Outputs: NET APY hero, period RETURN (% and $), gross APY at the chosen leverage, and the cost of entering / exiting.
  • Execution cost comes from POST /api/sim/swap-cost, which prices the round-trip swaps via the 0x Swap API; it falls back to a fixed bps estimate when a live quote isn't available. Tiered cost warnings flag round-trips that are large relative to equity or to the projected gross return.
  • Risk readouts: health factor, liquidation distance, and a risk score, with a danger banner near max leverage.
  • The math is grownLeveragedPosition (see Metric Methodology): both legs compound independently, no rebalancing, equity floored at zero.

Capacity panels

  • CapacityTightPanel — a banner at the top of the page when a strategy's borrow usage exceeds ~80% of the current dynamic cap (Fluid's expandable ceiling), with an email-capture form for a headroom alert.
  • BorrowCapacityChart — a 48-hour forward projection of the Fluid dynamic borrow cap, shown only when usage is ≥50% of the current cap AND the cap hasn't reached its hard ceiling (below that, the chart carries no actionable signal and is suppressed).

Oracle tab

Toggling to ORACLE swaps the expansion for the oracle-transparency panel, which explains how the strategy's collateral and debt are priced and what that means for liquidation risk. It is lazy-loaded (the on-chain reads fire only when the tab is opened). Full detail in Oracle Transparency.

Private documentation. creddit.xyz