Crypto funding rate arbitrage screener and carry book

By General Input

Open one screen each morning to see which coins pay the widest funding spreads across exchanges, then track every carry position you put on.

Integrations

  • CoinGlass
  • Google Sheets

Type

App

Categories

  • Finance
  • Operations

Build me a funding carry desk app that I open every morning to decide where to park a delta neutral position. All market data is read live from CoinGlass. The carry book I keep is mirrored into a Google Sheet so it survives outside the app.

The main screen is a sortable screener of funding rate spreads across exchanges. Build the rows from Get Funding Rate Arbitrage, and cross check the current per venue rates with Get Funding Rate by Exchange. Each row shows the coin, the cheapest venue to short on, the richest venue to long, the spread in annualized percent, and then open interest and 24 hour volume so I can filter out illiquid pairs. Take the leg pairing from the arbitrage data rather than re deriving it, and show both legs' individual funding rates next to the spread so I can see which side is carrying the trade. Every column sorts, and the default sort is the widest annualized spread first.

Join open interest and 24 hour volume onto each row by coin from Get Futures Coins Markets. Bake in a configurable minimum liquidity filter: an open interest floor I can set in the app, defaulting to something sensible like 10 million dollars, persisted so I do not reset it every morning. Rows below the floor are hidden by default with a count of how many were filtered out, and one click reveals them. A wide spread on a pair nobody trades is noise and I do not want it at the top of my screen.

Show funding annualized by default rather than per settlement interval. This matters and it is easy to get wrong: CoinGlass returns funding per settlement interval, and the interval is venue specific, usually 8 hours but sometimes 1 or 4. The handler must apply each venue's own interval when annualizing, so annualized percent equals the rate per interval multiplied by 8760 divided by the interval hours, which is a multiplier of 1095 for an 8 hour venue and 8760 for a 1 hour venue. Do not hardcode 8 hours for everything. Give me a toggle to flip the whole table back to the raw per interval numbers, and label the unit clearly wherever a rate is displayed.

Put a staleness stamp at the top of the screen showing when the data was last refreshed, as both a timestamp and a relative age like 42 minutes ago. Funding only settles every few hours, so I need to know whether I am looking at a fresh print or something from before the last settlement. Give me a manual refresh button, and make the stamp visually go stale once the data is older than the shortest settlement interval on screen.

Clicking a row opens a detail view for that opportunity. It has three parts: a funding history chart for the pair from Get Funding Rate OHLC History, plotted for both legs so I can see the spread over time rather than one venue in isolation, defaulting to 30 days with a shorter 7 day option; the per venue breakdown from Get Futures Pairs Markets showing every exchange that lists the coin with its funding rate, open interest and volume; and open interest by exchange from Get Open Interest by Exchange. The whole purpose of this view is answering whether the spread is persistent or a one print fluke, so surface a simple read on that, such as how many of the last N settlements the spread stayed above my threshold, alongside the chart.

A second tab is my carry book. From any screener row or detail view I click Track, enter the size I am putting on, and the app saves the coin, both venues, the entry spread in annualized percent, the size, and the date. Save it in the app's own storage so the tab renders instantly without a round trip, and have the handler also append that row to a Google Sheets tab using Append Values. Let me configure the spreadsheet and tab name in the app, and write a header row on first use if the tab is empty.

Append Values returns the range it wrote to, so store that row reference on the entry. When I mark an entry closed, the handler uses Update Values against that exact stored range to write the close date, the exit spread, and the realized carry, and to flip the status to closed. The book lists open entries first, each showing days held and the entry spread next to the current spread for that same pair pulled from the live screener data, so I can immediately see which positions have decayed and are worth unwinding. Closed entries stay visible in a collapsed section below.

Keep the whole thing dense, fast and legible. This is a desk tool I scan in 60 seconds before I start trading, not a marketing dashboard, so favor tight tables and real numbers over large cards and decorative charts.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seatsBuild audience segments from product usage and push to LoopsTurn the people who engage with your posts into Pipedrive leads