Guide

How to read Carry

Carry crosses DEX funding rates and, for each ticker, offers the best LONG on one side and the best SHORT on the other. Read-only: no order is sent.

Home

Under the Telegram button, two centered lines. The first: “Read-only · no wallet connect · free”. The second is freshness: “18/18 DEXs online · updated …”. The dot is green when the live scan is under 35 min old, amber when Carry is still showing the last snapshot inside those 35 min, red after that.

The full-width button “Opportunities by DEX →” opens one DEX’s page (Hyperliquid at first), with four overlapping logos. It is not a new scan: the page reads the last snapshot already stored. On TxFlow and gTrade, the first twenty rows are read live.

Quick filters

Three rows, above the list. Each button has the same width.

  • All, Crypto, or RWA. RWA is the same list as entry alerts: FX, commodities, indices, ETFs, and stocks. A pair is also RWA if one side is closed on weekends, or if it is on Carbon TradFi.
  • Any OI, OI $50k+, $250k+, or $1M+. “Any OI” sets no open-interest floor.
  • Snapshot or 7d avg. That changes the big number and the sort you see. It does not change how alerts are calculated.

The big number has two readings. Snapshot: the last reading’s spread, the sum of the two PnLs (LONG −12% and SHORT +64% make +52%). 7d avg: the average of recorded spreads over the window (up to 7 days), minus one round-trip of fees on both sides. Those fees, as a percent of size, are annualized over 7 days: fees × 365 ÷ 7. If history covers fewer than 7 days, the average uses the days on record, but the fees are still annualized over 7 days. The tooltip states that formula.

The caption under the big number follows the mode. On Snapshot: “live · 7d avg, after fees: …”. On 7d avg: “7d avg, after fees · live: …”. With no 7-day average, the big number stays the live rate and the caption says “live”.

First visit: Snapshot, Any OI, minimum volume 0, minimum stability 50%, minimum spread 20% / yr, max price gap 1%, max payback 72h, capital $1,000, leverage 2×, class All. Sort is the APR on screen, highest first. It is not remembered. “Too small” pairs go after the others, whatever the rate. A later visit keeps thresholds and the figure mode, not the ticker.

Cards

Each card shows the full ticker, a Crypto or RWA chip, the big number, then “Details ▾” at the bottom right. A tap anywhere on the card opens it; the label becomes “Hide ▴”. On a wide screen (from 1,024 px), a table replaces the cards. A click on a row opens the same panel. Columns sort: Ticker, % / yr, $ / day, LONG, SHORT, Stability, Cost, Payback, Capital.

  • Spike — the last reading’s spread is more than twice the 24h average. The badge does not change rank: #1 can wear it.
  • ⚠ caution — a token on the watch list. Today: ONE (Harmony migrating to Ethereum). A tap, or a hover, shows why. The pair stays in the scanner, after tradable pairs, and before “too small” ones if it is not too small itself.
  • Crypto or RWA — the ticker’s class, the same as the filter above.
  • too small — the size ($1,000 per DEX by default) is more than 10% of one side’s open interest, or more than 5% of its 24h volume. A notional cap does not count. The tooltip says which rule applies, for example “position = 34 % of 24h volume on N1”. The pair sits at the end of the list, whatever its rate.
  • short history — only on 7d avg, when less than 72h passed between the first and the last reading. The pair stays visible, after the others.

Opened panel

In order: the stability line, the two sides, four figures, the chart when there are at least two readings, “More details ▾” (closed), then the buttons.

  • Stability — “Stable X% of the time over 24h (N readings) · avg …”, or “over Nh” until the window has 24h. Without enough readings: “History filling in”. The tooltip compares that share with the minimum spread in Thresholds.
  • Each side: logo, DEX name, annual rate (green if you receive, red if you pay), open interest and funding interval, then “Your position: … of OI”. On Carbon and Polymarket, OI is a cap (“max”).
  • “Switch ▾”, in the corner, lists other DEXs for that side. “best tradable” is the best one that still clears the thresholds. “too small” uses both rules: more than 10% of OI, or more than 5% of 24h volume. “Current” marks the DEX already chosen. “Back to the original pair” undoes the change.
  • Four figures: Entry cost (round-trip fees of both sides, in %), payback (hours for that cost to be covered if the spread holds; “never” if it does not), Gain / day (the big number applied to size, $1,000 per DEX by default), Liq. distance (isolated estimate, 5% maintenance margin, the closer side, as a percent price move).

The chart is titled “7-day spread”. It draws the spread and the price. LONG and SHORT curves exist, hidden at first: turn them on in the legend. The scale clips extremes (5th to 95th percentile, plus a 10% margin). If a point falls outside, Carry writes “extreme values clipped”. A dashed line marks the minimum spread from Thresholds. The 24h and 7d amplitude is not under the chart: it is in More details. Readings are every 30 min: wicks between two readings are not in it.

“More details ▾” adds, closed by default: LONG and SHORT prices (4 significant figures, no trailing zeros), fees on each side, min OI, volume, price gap, round-trip cost in $, capital and “… / DEX”. Capital APR appears only when it differs from the big number: it is big number × leverage ÷ 2, so at 2× they match and it stays hidden. Then amplitude, the maintenance-margin sentence, and, above 5×, the liquidation warning.

  • “Open {DEX} ↗” — the DEX interface, in a new tab. A referral link when one exists.
  • “Follow” — only if early access to positions is open. Same destination as the bell.
  • “Share” — see below.

Share

The link is the home address with ?open=TICKER~longDex~shortDex, for example ?open=STONK~n1~hyperliquid. It reopens that pair already expanded, and scrolls to it. It does not fill the ticker search.

On a screen under 768 px, if the phone can share, Carry opens the share sheet. The title is “STONK · +306% / yr”: the ticker and the big number on screen. Cancelling does nothing. Otherwise, or on a computer, the link is copied and the button says “Link copied”.

A ticker search is not remembered from one visit to the next. Only a ?q=BAND link pre-fills it, with a pill “Filter: BAND ✕”. The cross clears the filter and removes ?q= from the address. Empty screen with a ticker: “No pair for BAND with these filters.”, then “Clear filter” and “Reset filters”. Under the results, “Pairs hidden by your filters” lists each dropped pair, its spread, and the reason (“stability 32% < 50%”, “6h of history”). “Show anyway” displays them for this ticker only: the thresholds do not change. Without a ticker: “No pair passes your filters.” and “Reset filters”. If there is no overlapping token, Carry says so, with no button.

The bell

The bell is there only if early access to positions is open, and only on a collapsed card (on a computer, it stays in the Ticker column). The tooltip and the label say “Alert me on this pair”. It sends nothing by itself.

A tap opens the Positions page, form already filled: the ticker, the LONG DEX, the SHORT DEX, and the size of each position ($1,000 by default). You confirm the follow there. On an open card the bell goes away and the “Follow” button makes the same link.

Why the sign is flipped

On Hyperliquid, Variational, Lighter, and most DEXs, a funding rate of +50% means longs pay shorts. −50% means the opposite. Carry does not show that ticker. It shows what you earn or pay on the side you take.

Example

The DEX prints +80% APR (longs pay).

LONG

Hyperliquid

ticker +80%

−80.0%

SHORT

Hyperliquid

ticker +80%

+80.0%

Carry LONG −80.0% · Carry SHORT +80.0% · same market, two readings.

Green = you receive. Red = you pay. No mental flip.

Carbon and gTrade

Carbon does not use the other DEXs’ convention. On the Carbon app, the Long side shows the long’s PnL: −0.5% means the long really pays 0.5%. Carry copies that number, without flipping it. Long and short often have different rates. Carbon TradFi (stocks, FX) is a separate book, settled once a day. The two count as one DEX in the “18 DEXs”.

gTrade also publishes a funding rate per side, plus a borrow fee paid by both sides. Carry adds them into each side’s PnL: the number on screen already includes them.

  • Carbon crypto: paid every 1h, 4h, or 8h, from the next settlement hour.
  • Carbon TradFi: once a day.
  • Carbon OI is a notional cap, not a real open interest. Polymarket too.

Funding interval

Next to OI, the interval is the one the DEX publishes. APR annualizes that payment: × 8,760 for 1h, × 2,190 for 4h, × 1,095 for 8h, × 365 for 24h.

A huge APR on a 1h or 4h payment can vanish at the next window. An 8h or 24h rate moves more slowly.

Technical details
  • 1h — Hyperliquid, Extended, Pacifica, Hibachi, gTrade, Polymarket, Arcus, N1, TxFlow.
  • Read from the API, otherwise 1h — Variational (seconds), Backpack, PopDEX.
  • 8h — Lighter, GRVT. Paradex, WOOFi, and Aster: the API interval, otherwise 8h.
  • Carbon crypto — 1h, 4h, or 8h: 00:00 / 08:00 / 16:00 UTC → 8h, any other hour that is a multiple of 4 → 4h, otherwise 1h. Default 8h. Carry keeps the shorter of the observation and its reference table.
  • Carbon TradFi — 24h.

Capital and leverage

Leverage (1 to 10, 2 by default) and capital live in Thresholds, remembered like the other thresholds. Capital is the sum deposited on the two DEXs. Size of each position = capital ÷ 2 × leverage. That size is what the math uses. The list counter repeats “2× leverage”.

  • With $1,000 of capital and 2× leverage: $500 of margin and a $1,000 position on each DEX. The spread and the return on capital match, so capital APR stays hidden.
  • Return on capital = displayed spread × leverage ÷ 2.
  • Entry cost in $ = cost % × size of each position.
  • Liquidation distance, on the card: an isolated estimate with a 5% maintenance margin. Carry shows the closer side, as a percent price move from entry.

Above 5×, More details states that move. It is an estimate: each DEX has its own maintenance margin, and nothing links the two accounts.

History and stability

Carry stores a reading every 30 min. Stability is the share of readings in the last 24h where the spread stayed at or above the minimum spread (20% / yr on a first visit). It is not “the APR is 72%”.

  • Min stability runs from 0 to 100%, in steps of 10. At 0, it removes nothing. At 50% (the start), it needs at least 12 readings over 24h.
  • Fewer than 12 readings, or an unknown hold: the pair is removed and counted on the line “N hidden (short history)”. That is not the badge of the same name.
  • Enough readings, but under the threshold: the pair disappears, and is not counted on that line.
  • The “short history” badge is only for 7d avg, and a window under 72h. The pair stays on screen, at the end of its group.

Research

The scanner crosses every DEX at once. Research lets you pick two or more: Carry keeps only tokens listed on those, and ranks them from the widest spread to the smallest.

  • Open Research from the menu.
  • Check at least two DEXs. Variational + Hyperliquid is the start; Reset returns there while the selection differs.
  • Scanner thresholds apply here too, including the minimum spread (up to 1,000% / yr). A card is still a LONG on one side and a SHORT on the other, among the DEXs you checked.
  • An excluded or failing DEX shows: a grey dot, “· excluded” after the name, and the reason under the list if it is checked.
  • It stays selectable, but the DEX counter counts only DEXs that can actually be used.

Three checked DEXs do not make a triangle. Carry always takes the best two-sided pair among the ones you kept.

Thresholds

The Thresholds button opens the sliders: minimum spread (still labeled “Min ROI”, 20% / yr at the start, up to 1,000%), min open interest, min 24h volume, max price gap, max payback, min stability, capital, and leverage. You have to Apply. Reset returns to the first-visit settings, and keeps the current ticker.

Four buttons are still there: Loose (spread 8%, OI $500k, volume $300k, price gap 2%, payback 120h), Classic (20%, $300k, $200k, 1%, 72h, stability 50%), Tight (45%, $100k, $50k, 0.8%, 48h), and Ultra (50%, $25k, $25k, 1.2%, 36h). You need “Apply preset” to use them. Ultra shows the warning for markets under $50k OI. The empty home screen no longer mentions these buttons.

An amber banner appears when a kept pair has a side under $50k OI (a cap does not count). “Raise OI filter to $50k” lines the quick filter up with OI $50k+.

Opportunities by DEX

The Opportunities by DEX page lists every market from the last snapshot of a single DEX. The book comes from that snapshot. On TxFlow and gTrade, the first twenty visible rows are read live. The page title and the site footer use the same name.

  • Columns: Ticker, APR, 24h avg, Per interval, Interval, OI, 24h volume, Price. Default sort: OI, largest first. On mobile, the menu offers Highest APR, Lowest APR (shorts pay), 24h average APR, OI, Volume, Name.
  • On gTrade, Carbon, and Carbon TradFi, the two sides do not pay the same rate: the APR column becomes Long and Short. A side reads “earns” or “pays”, with no minus sign. APR tooltip: “Positive: longs pay shorts.”
  • Filters: a ticker, a minimum OI, and “Crypto only” (drops the same classes as entry alerts: stocks, FX, commodities, indices, ETFs).
  • Excluded or unavailable DEX: a banner gives the reason, then “Latest rates: …” or “No rate stored for this DEX yet.” “See spreads” opens the scanner on that ticker and that DEX (?q=…&dex=…). Pairs that include it move first, marked “from {DEX}”. “Open on {DEX} ↗” goes through the referral link.
  • “Other DEXs ▾” unfolds, under the row, every DEX where that ticker is listed, with the same matches as the scanner. A DEX excluded by the canary is grayed out, with its reason. Each line shows the logo, the APR and who pays, the interval, OI, 24h volume, and the age of the rate. When at least two DEXs are still in the ranking, “Best spread: LONG … → SHORT …” opens that pair expanded in the scanner. On open, that token’s TxFlow and gTrade rates are read again.

The 18 DEXs

The “18 DEXs” counter counts brands, not books. Carbon and Carbon TradFi are two ids and two books, but one brand. Nineteen ids, eighteen brands: Variational, Hyperliquid, Carbon, Carbon TradFi, Extended, Lighter, Paradex, WOOFi, Backpack, Aster, Pacifica, Hibachi, gTrade, GRVT, Polymarket, Arcus, PopDEX, N1, TxFlow.

TxFlow settles funding every hour. The rate read is already a percent per hour, and a positive rate means longs pay: APR is that percent × 24 × 365, with no extra × 100 or × 24. Fees used are 0.045% in and 0.045% out. A rate older than one hour is not served. TxFlow is verified by hand, like Hibachi, Polymarket, gTrade, and N1: the ratio canary does not exclude it.

N1 also settles every hour. The ranking uses the projection for the current hour: positive means longs pay. Under each leg, “last settled” is the previous hour’s rate, the one the N1 interface shows.

Telegram alerts

The public channel @carry_alerts is open to everyone. The private bot @Carry_funding_bot is in early access: it talks to one person, about their positions and their spreads. The channel’s entry alerts do not reuse the thresholds on the scanner: they have their own. After an entry alert, the pair is watched for 7 days, or until the exit alert.

  • Stable spread — spread ≥ 30% / yr, stable at least 70% of the time over 24h, at least 24 readings, min OI $300k, min volume $200k, max price gap 1%, max payback 72h. At most 5 pairs. The same token is not sent again for 12h.
  • High yield, high risk — live spread ≥ 150% / yr, each of the last 3 readings ≥ 100% / yr, and the spread held on at least 50% of readings in the last 24h. Same OI, volume, and price gap as the scanner’s starting settings, max payback 24h. At most 3 pairs. Not sent if the token is already a stable spread, or if a stable alert for that token is under 12h old. The same token is not sent again for 6h.
  • Exit — only a pair already alerted. Live spread negative, or the last two readings under 10% / yr. Once: the watch stops.
  • Margin — the average price of the two sides moved more than 15% since the entry alert. Once.
  • DEX unavailable — one message per DEX when the spread is unknown for 2 readings in a row. Beyond 10 pairs: the first 10, then “+N more”. When the DEX returns, a recovery message, then nothing for that DEX for 6h.

Left out of entry alerts, on every DEX: FX, stocks, commodities, and indices. Those markets stay visible in the scanner, under the RWA chip.

The Carry bot

Early access is requested on the Alerts page, or by sending /start to the bot. Without an invite, you join the waitlist and the bot says so. Once invited, /start opens the menu.

  • /start — home and menu.
  • /menu — show the menu.
  • /positions — your open positions.
  • /top — the 5 best spreads from the last reading, using your spread-alert settings.
  • /help — how it works.

The menu offers: My positions; Follow a position; Spread alerts; Top now; Pause alerts (1h, 8h, or 24h, or Resume); Settings; How it works; Open Carry. In Settings: language (that choice then overrides the Telegram account language), position-alert settings, and Delete my data.

/top, or “🏆 Top now”, sends the 5 best opportunities from the last reading: your DEXs, your minimum spread, your minimum stability, and your minimum OI. Same exclusions as spread alerts. A pair whose $1,000 size is more than 10% of one side’s OI is left out. If there is nothing: “No spread matches your settings right now.” Under each pair, two buttons to the DEXs: “↗ Long on {name}” and “↘ Short on {name}”. No follow and no mute on that message. It does not count toward the daily cap.

The personal recap is off by default. You can ask for it every hour, every 4h (0:00, 4:00, 8:00, 12:00, 16:00, and 20:00 in your timezone), or once a day at 9:00 in your timezone. It goes out at the next full hour, not in the hour you save the setting. Same content as /top, with the same DEX buttons. No send if the list matches the previous one (same pairs, same order, spreads within 10 points), or during a pause. It does not count toward the daily cap.

The public channel gets “📊 Top spreads now” at 07:00, 13:00, and 19:00 UTC: the 5 best pairs by the channel’s entry-alert criteria, even if they were already sent, and an “Open in Carry” button. No message if no pair passes.

A personal spread alert with a single opportunity has “➕ Track {ticker}” (opens the form already filled), “🔕 Mute {ticker} 24h”, then the two buttons to the DEXs. When there are several, each opportunity has one line only: Track and Mute. DEX names in the text stay referral links. /top and the recaps still have the DEX buttons.

Position alerts

You follow a position from the bell, from “Follow”, or from Follow a position in the bot. The form asks for the size of each position (the calculator’s size, $1,000 by default), leverage (1 to 10, 2 by default), and margin: isolated, or cross with the account balance on that DEX.

Entry prices are the market’s, filled in automatically. In Advanced, you can replace them, and paste the exact liquidation read on the DEX. Otherwise liquidation is estimated. While it is estimated, the card says so.

  • Liquidation — urgent if distance to the liquidation price drops under 2%, or if less than 25% of the distance at entry remains. A warning if less than 50% remains. Urgent re-arms above 3% of distance and 35% of remaining margin; the warning, above 60%.
  • Spread — on by default at 10% / yr, and you can change or turn it off. The alert fires if the last two readings are under your threshold. It re-arms when a reading goes more than 5 points back above the threshold.
  • Price — off until you set it. It is the move of the average of the two prices against the average of the two entries. The alert fires at the threshold you chose, and re-arms when the move falls under half that threshold.
  • Share of OI — at 5% of that side’s OI (or of 24h volume if OI is missing, or of the cap if it is a cap). Re-arms under 4%.
  • DEX unavailable — one side’s price is missing on two checks in a row. A message when the price returns.
  • Price PnL — the sum of the two sides loses more than 2% of size. Re-arms above −1%.

The recap goes out once a day, from 9:00 in your timezone, and only if it has not already been sent that day. Pause (1h, 8h, or 24h) suspends that recap and every position alert, except liquidations. Stopping the follow closes the position in Carry and stops its alerts: nothing is closed on the DEXs.

Spread alerts

Off until you turn them on. Defaults: every DEX, minimum spread 30% / yr, minimum hold 70% over 24h, minimum OI $50,000, at most 5 alerts a day (between 1 and 20). You save these settings in the Mini App. The recap is “off”.

After each reading, Carry keeps pairs whose two sides are on your DEXs, with spread and hold above your minimums, and both sides’ OI too. A cap counts if it covers your OI minimum. If OI is missing, 24h volume must reach the same minimum.

Same exclusions as the channel’s entry alerts: the watch list, FX, stocks, commodities, indices, closed markets, and DEXs dropped by the consistency check. Nothing during a pause. The same token is not sent twice within 12h. Muting a token silences it for 24h.

If there are more pairs than alerts left in the day, the highest spreads go out. The counter resets at midnight in your timezone. One message per reading. A single pair: Track, the 24h mute, and the two buttons to the DEXs. Several pairs: one Track / Mute line per pair, and no buttons to the DEXs.

Privacy

To send these alerts, Carry keeps your Telegram id and username, your language (the account’s, and the one chosen in the bot if you chose one), your timezone, your positions, the alert history, and your settings (thresholds, pause, mutes, spread alerts).

Delete everything from the bot, Settings then Delete my data, or on the site, Positions page, the same button. It cannot be undone. A later /start treats you as a new person.

No wallet is connected. No order is placed.

Why didn’t I get an alert?

  • The day’s cap is reached. It resets at midnight in your timezone.
  • A pause is on. Only position liquidations still go through.
  • The token is muted for 24h, or the same token was already sent less than 12h ago.
  • The token or a DEX is excluded: watch list, non-crypto, closed market, DEX dropped by the check, or a DEX you did not pick.
  • Your thresholds are above what the market shows: spread, 24h hold, or OI.
  • You blocked the bot. Sends stop until a new connection.

Where the numbers come from

A reading is stored every 30 min. The live scan reads public APIs, is cached for 45s, and Refresh forces a new one. While waiting for that scan, Carry can show the last snapshot.

Each DEX’s rates are compared with the others on shared markets. A DEX with absurd figures drops out of the ranking, and the dot shows why.

“Updated” dot: green = live scan under 35 min; amber = last snapshot, still inside those 35 min; red = data older than 35 min. The line under Telegram uses the same three colors.

Technical details
  • BTC and ETH far from the median of the other DEXs: a warning only, the DEX stays. A note like “Market gap, not excluded”.
  • Median rate ratio, on at least 10 shared markets: immediate exclusion if it is under 0.2 or above 5. Between 0.2 and 0.67, or between 1.5 and 5, exclusion after 6 readings (3h). Otherwise the DEX stays, with the same “not excluded” note.
  • Fewer than 10 comparable markets: “Suspect unit, excluded: systematic gap that cannot be checked”, except a hand-verified DEX.
  • gTrade: a BTC or ETH gain beyond 1,000% / yr excludes the DEX (“abnormal gTrade rate, API format to check”).
  • Carbon TradFi: excluded if the median |APR| leaves 0.5–25% / yr, or if there are not enough markets to check (“Systematic gap”).

Funding-carry risks

  • Liquidation of one side. Each DEX has its own margin. Nothing automatically covers the other.
  • The spread can flip: you go from receiving funding to paying it.
  • The two DEXs do not have the same price. The gap at entry and at exit is a cost, even when funding is good.
  • Fees and slippage, especially on small markets: a partial fill, a rate that disappears.
  • Depending on the DEX, funding is paid at a fixed hour or continuously. At a fixed hour, closing just before the payment loses that payment.
  • Risk that belongs to each DEX: the contract, withdrawals, failure. Carry does not measure it.

How Carry is funded

Carry is free. No order is sent: the Open buttons are links to the DEX interface.

Some of those links are referral links. Depending on the DEX, they can also give a fee discount. They do not change the ranking: cards follow the APR on screen, highest first, then the exceptions already described (caution, too small, short history on 7d avg).

A funding rate is not a promised return. Rates, OI, and prices move. Always check on the DEX before you take exposure.

Questions

Why does #1 wear a Spike badge? Because rank follows the APR on screen, not the 24h average. Spike only means the last reading’s spread is more than twice that average. The badge does not push the card down.

Why is the 7-day average so different from the live rate? The snapshot is the last reading. The average is the readings in the window, minus one round-trip of fees on both sides annualized over 7 days (fees × 365 ÷ 7), even when history covers fewer than 7 days. A one-hour spike, or heavy fees on a thin market, pulls the two numbers apart.

What does too small mean? The size you picked ($1,000 per DEX by default) is more than 10% of the open interest on at least one side, or more than 5% of its 24h volume. A notional cap does not trigger this badge. The tooltip names the rule, for example “position = 34 % of 24h volume on N1”. The pair stays visible, at the end of the list.

Why is a pair hidden for lack of history? With minimum stability above 0 (50% at the start), Carry removes pairs that have fewer than 12 readings over 24h, or whose hold is unknown. The counter says “hidden (short history)”. That is not the “short history” badge, which only shows on 7d avg, for a window under 3 days, without hiding the pair. The Research page still says “for lack of history”.

Contact

A suggestion, a bug to report? Write to us on X or by email.

Made by @amyuki_kemana.

For a bug, attach a screenshot and the time: we can find the reading.