How the research works.

Funding / basis capture

Funding is the periodic payment that keeps a perp tethered to spot. Markets are usually net-long, so longs pay shorts. Short the perp, hold spot as the hedge, collect the payment with near-zero directional exposure.

It is structural, not a pricing error: leveraged long demand has to pay someone to take the short side. It varies with sentiment and turns negative when the market flips net-short.

Charged, not assumed away

  • Trading fees

    Both legs, every open, close and rebalance.

  • Slippage

    Fills are not assumed at mid-price.

  • Funding, both directions

    The strategy pays when rates run against it.

  • Rebalancing drag

    Staying neutral has a turnover cost.

Key finding: the edge is fragile to rebalancing frequency. Daily reweighting bleeds the return to fees and slippage; weekly or biweekly survives. The data produced that, not a tuned knob.

The traps guarded against

  • Look-ahead

    Only data available at decision time.

  • Survivorship

    The liquid majors, not hindsight winners.

  • Overfitting

    Coarse parameters. A random-data smoke test reports roughly zero edge on noise.

  • Out-of-sample

    Checked on a segment the model did not see.

How the forward numbers are made

Where the numbers come from

  • Daily cron calls /api/paper-run at 00:30 UTC, pinned to fra1 (the US region cannot reach the funding endpoint).
  • One point per UTC day, idempotent — a second call is a no-op.
  • Same five majors — BTC, ETH, SOL, BNB, XRP — same parameters as the backtest.
  • Appended points merge over the committed public/paper.json; the committed file wins on collision.
  • “Generated at” is the newest point on record, never the current time.

When the data isn’t available

  • Nothing is written. No interpolation, forward-fill or estimate. The curve stops where the data stopped.
  • It fails in the status code: runner exits non-zero, endpoint answers HTTP 503 naming the symbol. 200 only when a point was appended or already existed.
  • An earlier version answered 200 with a “skipped” body; monitoring read it as success and the record sat frozen for 22 days. Silent success on an outage is the one failure a transparency page cannot afford.
  • Venue fallback. Binance first; on failure or an eight-second timeout, Bybit. Never blended — one exchange per number, recorded per symbol per day; /paper names fallback days; older points show no source. Removes one cause of a frozen record; does not prove it was the cause.
  • A point computed but not saved is also HTTP 503, and the outcome record notes whether it reached the store. With no store configured, /paper says so.

How staleness is surfaced

Age is computed at render time from the data, never hardcoded or baked in at build. Past 48 hours:

  • /paper switches to “not currently reporting” with the last date and age. An unreadable date fails safe to the warning.
  • /funding drops “live” and labels the table a committed snapshot with date and age. An unparseable timestamp fails safe to stale.
  • Both self-correct when the runner stops or resumes.

Each run also writes its outcome — appended, no-op or skipped, with reason — to a rolling 30-day record /paper reads back: a missing point cannot distinguish an honest skip from a job that never fired. Never inferred from the curve; with nothing recorded the page says it cannot tell.

What is deliberately not here

  • No live track record yet. Zero real fills; /track-record shows an explicit empty state, not a sample curve.
  • No third-party capital, no custody. The app never places an order, touches an exchange key or moves money.
  • No signals for sale. Nothing here is a buy or sell recommendation.
  • Sequencing in order: backtest, paper run, then — only then — Jukka Blomberg trading his own money, disclosed as a personal record.

How to check us

FilePageBacks
public/results.json/resultsPeriod, cost model, cost sensitivity, metrics, out-of-sample split, equity curve.
public/paper.json/paperCommitted forward record, merged with cron-appended points.
public/live-trades.json/track-recordOwn-account fills. Currently zero.
public/funding-fallback.json/fundingCommitted snapshot, labelled as one when the live feed is unreachable.

Research and simulation on historical and live market data, reported as the data produced it.

A trading product, a signal service, or a promise. Past simulated results do not indicate future results.