SynthaTradeBeta
BetaThe full version is still being built and market data is not final yet

The quant desk for
prediction markets.

Describe a strategy in plain English and test it against every contract that already resolved. Then point the same engine at your own record and find out whether you have a real edge or a streak that has not run out yet.

No card. Free tier when we open.
synthatrade.com/app
Algorithms
Longshot bias by series
Climatology gap
Dot plot spread
Polling lag
Datasets
Sports · all series
Climate · 2023–26
Elections · all races
Culture · awards
fade_longshots.py Run
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
# Does the longshot bias hold outside sports, or is it a football story?
# Loads six product lines and scores each one the same way.

from synthatrade import load, calibration, fees, Backtest
import pandas as pd

SERIES = [
    "sports",               # NFL, NBA, tennis, soccer
    "economics",            # CPI, payrolls, GDP
    "climate",              # temperature and storm thresholds
    "companies",            # earnings and guidance
    "elections",            # races and control
    "culture",              # awards, charts, releases
]

def longshots(book, ceiling=0.20, hours=24):
    # every YES priced under the ceiling, close to resolution
    near = book[book.hours_to_close < hours]
    return near[near.price < ceiling]

rows = []
for name in SERIES:
    book = load(name, since="2023-01")
    sig  = longshots(book)
    if len(sig) < 200:
        continue          # too thin to say anything

    cal = calibration(sig, buckets=10, ci="wilson")
    net = sig.resolved_rate - sig.price - fees(sig.price)

    rows.append(dict(
        series    = name,
        n         = len(sig),
        paid      = sig.price.mean(),
        resolved = sig.resolved_rate.mean(),
        edge      = net.mean(),
        lower    = cal.lower.mean(),
    ))

out = pd.DataFrame(rows).sort_values("edge")
print(out.to_string(index=False))

# and the one that actually survives fees
best = out[out.edge > 0]
Backtest(load(best.series.iloc[-1]), longshots,
         fees="venue").run().calibration_curve()
Is the longshot bias real everywhere, or only in sports? Run it across every product line and show me the calibration.
exit 01.84s · 2 artifacts
loaded 6 series · 34,180 resolved contracts     series      n   paid  resolved    edge    culture   1204  0.118     0.121  +0.001    climate   2986  0.104     0.079  -0.011     sports   9741  0.131     0.092  -0.025 skipped 1 series · under 200 contracts
Syntha
Wrote the backtest on the left and ran it across 11,204 resolved contracts. They lose — but only under 12¢.
Calibration · all series, under 20¢
5¢25¢50¢75¢95¢
Edge after fees · price bucket × series
5–20¢20–40¢40–65¢65–95¢
SportsEconomicsClimateCompaniesElectionsCulture
Return+6.8%
Contracts1,847
Brier vs market−0.011
Holds up?Yes
Re-running culture out of sample

Now split climate by hours to close and show me where the edge dies

This is the actual workspace. Datasets shown are samples while market data partnerships are finalised.

Data partnerships in progress. Exchange agreements are being finalised

Prediction market data, built in

Included with every subscription

Every resolved contract from regulated US prediction markets — the price path, the volume, and the outcome each one settled to — will be preloaded in every workspace. No separate data vendor, no API keys, no ingestion script to babysit. Just import synthatrade and start testing.

12 Product lines Elections, politics, sports, culture, crypto, commodities, climate, economics, mentions, companies, financials, tech & science
Beta Data partnerships Agreements with regulated US exchanges are being worked out, so coverage is not final yet
Every tick Price history Top of book on every contract, from the first quote to the settlement print
0 or 100 Every outcome resolved Unlike price data, every contract ends in a known answer — the labels come free

SynthaTrade is in beta and the full version is still being built. Market data partnerships are being finalised, so datasets, coverage and figures on this page are illustrative until then. No affiliation with, or endorsement by, any exchange is implied.

How it works

Two rooms and one library.

You build in the Lab and you judge at the Desk. Everything you make is saved once and available in both, so nothing has to be rebuilt, re-uploaded or re-explained.

01

Describe it in the Lab

Type a rule in plain English. Syntha writes the Python, you edit whatever you want, and Run executes it against resolved contracts.

SynthaLabRun
“fade anything under 20¢ inside 24 hours” book.filter(price < 0.20).run()
02

It saves itself to your library

Every strategy you run is kept in the rail on the left, with its code, its datasets and its results attached. Nothing is a one-off session.

Algorithms
Longshot bias by series Climatology gap Polling lag My own fills
03

Judge it at the Desk

Pick anything from the library — a strategy you wrote, or your own trading record — and the same engine grades it. Calibration, verdict, edge, Kelly, Monte Carlo.

SynthaDeskGrade B+
Calibration−3.6 pts Ruin7.2% Edge after fees+1.4¢
04

Take it with you

Export any strategy as a standalone Python file with its logic, its parameters and its entry rules intact. Run it on your own machine against the exchange you trade on, under your own API credentials, for as long as you want it live — or hand it to someone else, since it is a plain file with no lock-in.

SynthaTrade is an analytics tool. It never connects to your exchange account and never places an order. What you export is code you own and run yourself, under whatever terms you have agreed with that venue.

Exportlongshot_bias.py
$ python longshot_bias.py --live connected · 4 series · paper mode watching 61 open contracts

The engine does not care what it is pointed at. A strategy you invented and the trades you actually placed are scored the same way, which is the only honest way to compare them.

The part nobody else does

Profitable and calibrated are not the same thing.

You can be up money for eight months and have no edge at all — buying favourites prints small wins for a long time, then gives it all back. Every other tool shows you what the market is doing. SynthaDesk shows you what you are doing.

Profitable320 contracts, favourites only

The equity curve, which is the only thing most tools will show you. It climbs for months.

Equity · 320 resolved contracts aheadbehindrunning peak
$1,000$900$800$700
1320
Peak$1,023Final$691 Max drawdown33%Fees paid$82
Peaked at $1,023  then finished $691, down $309 on the year
Calibratedthe same 320 contracts

The same record scored against the prices paid. Every bucket resolves below the line it was priced at.

Calibration · same 320 contracts youperfectshortfall
100%75%50%25%
60¢50¢90¢
Avg price paid74.8¢Resolved YES71.2% Gap−3.6 ptsBuckets below line4/4
Paid 74.8¢ on average, resolved 71.2%  −3.6 points, before $82 of fees

SynthaDesk™

  • Calibration curve on your own fills — buy at 70¢, do they resolve 70% of the time?
  • Brier score measured against the price you paid
  • Closing line value with a confidence interval, not a vibe
  • Fee and spread drag, separated from edge
  • Correlation between your own strategies, so you know if you have a portfolio
  • Out-of-sample test on any filter before you add it

SynthaLab™

  • Describe a rule in plain English, get working Python
  • Runs against resolved history with nothing to upload or configure
  • Contracts settle at $1 or $0, so the backtester models it properly
  • Fees modelled per exchange, because they decide thin edges

Order flow

  • Live book depth streamed from the exchange to your browser
  • Large prints flagged with size and timing relative to resolution
  • Fresh-wallet concentration patterns worth a second look
  • Cross-exchange price gaps on the same underlying event

Honest statistics

  • Confidence intervals on every finding, never a bare number
  • Corrected for how many angles you tested
  • Minimum track record length — how many more bets until it means anything
  • Monte Carlo on the outcome distribution, not just the average
SynthaDesk

Two questions nobody else asks.

Both run entirely on trade logs you upload. No exchange connection, no market data, nothing to licence — just your own record, checked properly.

01

Portfolio correlation

Upload the logs from two or more of your strategies. It merges them by date and measures how their monthly returns actually move together — not how different they sound.

Monthly return correlation
Fade longshots+1.00+0.88+0.09
Late-window fade+0.88+1.00+0.05
Climatology gap+0.09+0.05+1.00
FLLWCG

Two of these are the same bet. Fade longshots and late-window fade correlate at +0.88. Running both is not a portfolio — it is one position in two accounts. Climatology gap is the only genuine diversifier here, at +0.09 and +0.05.

Combined equity vs each alone all threeindividually
Worst alone27.5% Next19.5% Next18.0% Combined11.5%

Max drawdown. Combined is below every individual strategy, which is diversification working mechanically rather than in theory.

02

Forward-validity check

You notice a pattern in your history — say your trades below the 200-day moving average lose money — and want to add it as a filter. This tests whether it survives on data it was never fitted to, before you change anything.

Profit factor, with and without the filter
In-sample
no filter1.04
filtered1.47
Out-of-sample
no filter1.08
filtered0.92

The filter is hindsight, not an edge. On the data it was found in it lifts profit factor from 1.04 to 1.47 and turns +10.4u into +61.9u. On data it never saw it does the opposite: 1.08 down to 0.92, and a +14.0u period becomes -8.9u. Adding it would have cost you money.

In-sample ΔPF+0.43 Out-of-sample ΔPF-0.17 Trades removed246 VerdictReject

A filter that improves in-sample and degrades out-of-sample is the most common way a working strategy gets destroyed.

Nothing here is unique to prediction markets — but nothing else does it from uploaded logs either. Portfolio Visualizer correlates assets, not strategies. NinjaTrader and MetaTrader tools only see what happened on their own platform. If your strategies live in more than one place, they have never been compared.

The stack

Write it yourself, or ask for it.

Your code runs in your own browser — nothing is queued on our servers and nothing is metered. Syntha™ writes against the same library you would import by hand, so you can take whatever it produces and edit it line by line.

Languages
Pythonnumpy, pandas, scipy SQLquery the datasets directly
Model
Claudewrites and explains the code
Syntha · SynthaLab
>pull three seasons of NFL contracts and every CPI market since 2023
I will check coverage first, then load both into the workspace.
synthatrade · coverage(series=["NFLGAME","CPI"]) NFLGAME · resolved: 2023-09 → present · 11,204 contracts CPI · resolved: 2023-01 → present · 412 contracts
Python(load_and_join.py) nfl = load("sports:nfl", seasons=3) → 11,204 rows cpi = load("economics:cpi", since="2023-01") → 412 rows joined on resolution date → 11,616 rows in memory
Both are loaded. Ask for a calibration curve, an edge grid, or write your own Python against them — the frames are already in the workspace.

Ask in plain English for any series in the library — NFL and tennis, CPI and Fed decisions, elections, weather thresholds. Syntha resolves it to the right series, loads it, and hands you the dataframe. Nothing is downloaded and no API keys are involved.

Python is a trademark of the Python Software Foundation; DuckDB and Claude belong to their owners. Shown to describe what SynthaTrade runs on.

Why this works

The edges are documented. Most people are on the wrong side of them.

Prediction markets are one of the few places where every position ends in a recorded right answer, which is why the academic literature on them is unusually specific. Three findings do most of the work.

300k+
resolved contracts analysed
hover for the source
−60%
lost on contracts under 10¢
hover for the source
1.32 vs 1.00
calibration slope at long horizons
1.00 is perfect — the gap is the edge
hover for the source
$44bn
traded across the venues in 2025
hover for the source
Mispricing

Cheap contracts lose. Expensive ones pay a little.

Whelan and co-authors analysed more than 300,000 resolved contracts on a regulated US exchange and found prices informative and improving as markets approach close, but carrying a clear favourite–longshot bias. Contracts bought under 10¢ lost over 60% of the money put into them. Contracts above 50¢ earned a small but statistically significant positive return.

A separate study of 353 million trades across 429,000 binary contracts found the same shape widening with horizon: the calibration slope runs near 1.00 inside the first hour and reaches 1.32 beyond a month, meaning the bias is largest exactly where most people hold.

Whelan et al., Makers and Takers, University College Dublin · Decomposing Crowd Wisdom, arXiv 2602.19520
Quantitative work

The maths transfers, and the ground truth is better.

Prediction markets are quieter than equities but not unquantified. The two largest venues traded close to $39bn between them in 2025, and the transaction-level data they produce has already generated a working literature on adverse selection, cross-venue price discovery, trader skill and calibration.

The structural advantage is scoring. An equity strategy is judged on returns, which mix skill with luck for years. A prediction market contract resolves to $1 or $0 against a stated probability, so calibration, Brier scores and log loss all apply directly — the same tools meteorologists have used to grade forecasts for decades. You find out whether you were right, not just whether you made money.

Bartlett & O’Hara, Adverse Selection in Prediction Markets · Reichenbach & Walther, Exploring Decentralized Prediction Markets · Arrow et al., The Promise of Prediction Markets, Science
Manipulation

Mostly transient. Increasingly structural. Always testable.

The classical finding is reassuring. Hanson and Oprea showed in a Kyle-style model that a manipulator’s order flow raises the returns to informed trading and can improve price accuracy. Laboratory work found other traders anticipate and discount biased orders, leaving accuracy intact, and documented attempts in the field produced only short-lived, mean-reverting price effects.

That is the reason the standard worry about someone buying a political market to change the headline has largely been set aside.

The newer finding is not reassuring, and it is specific to how these venues are now designed. Contracts that settle on an asset price the holder can move by trading the underlying create a direct incentive to move it. After one major venue launched a five-minute Bitcoin contract, order flow in spot at settlement time spiked and produced large price reversals afterward.

This is a measurable pattern, not a rumour — which means it is testable. Settlement windows, resolution-source disputes and volume spikes into close are all things you can screen for in a backtest before they cost you.

Hanson & Oprea, A Manipulator Can Aid Prediction Market Accuracy, Economica 76 · Hanson, Oprea & Porter, Information Aggregation and Manipulation in an Experimental Market, JEBO 60 · Rhode & Strumpf (2008) · Dai, Jia & Yu, Settlement Manipulation in Prediction Markets
Find out which side you’re on Figures are from the cited papers, not from SynthaTrade. Links are to the published work so you can check them yourself.
Catalysts

Every event that moves a contract, in one place.

Sorted by the product line each one touches, with the contract it moved beside it. Ask Syntha about any of them mid-build and the same feed comes into your workspace as a dataframe.

Live
08:30
CPI — August print, core and headline
ScheduledEconomicsBLS · Consumer Price Indexopen source ↗
CPI YoY above 3.0%
+14¢ in 40 min
06:12 ago
Senate committee advances the spending bill 14–9
PoliticsReutersopen source ↗
Shutdown before Oct 1
−9¢ since open
05:47 ago
Starting QB listed questionable, limited in practice
Chiefs to win Sunday
−6¢ in 12 min
14:00
FOMC decision, statement and dot plot
ScheduledEconomicsFederal Reserveopen source ↗
Cut of 25bp in September
+3¢ today
04:55 ago
Spot ETF posts its largest single-day inflow this quarter
CryptoBloombergopen source ↗
BTC above $120k on Dec 31
+7¢ today
03:20 ago
Hurricane centre upgrades the system to Category 2
ClimateNOAAopen source ↗
Named storm makes Florida landfall
+22¢ in 2 h
08:30
Non-farm payrolls and unemployment rate
ScheduledEconomicsBLS · Employment Situationopen source ↗
Unemployment above 4.4%
—awaiting release
02:41 ago
Earnings beat, guidance cut for the following quarter
CompaniesSEC EDGAR filingopen source ↗
Close above $180 this week
−12¢ after hours
01:15 ago
Awards shortlist published a week early
CultureVarietyopen source ↗
Best Picture winner
+5¢ today
00:38 ago
Polling average moves outside the margin in two states
PoliticsFiveThirtyEightopen source ↗
Party controls the House
+4¢ this week
00:26 ago
Tennis seed withdraws before the quarter-final
SportsATP media notesopen source ↗
Named player to win the title
+31¢ in 5 min
10:00
Retail sales, advance estimate
ScheduledEconomicsCensus Bureauopen source ↗
Retail sales above 0.4% MoM
—opens in 3 h
00:19 ago
Network upgrade activates on schedule
CryptoProtocol foundation blogopen source ↗
Upgrade live before Q4
+18¢ in 20 min
00:14 ago
Regulator opens a review of the pending merger
CompaniesAgency press releaseopen source ↗
Deal closes this year
−16¢ in 1 h
12:00
Seasonal outlook update
ScheduledClimateNOAA CPCopen source ↗
Above-normal season declared
—scheduled
00:09 ago
Cabinet nominee clears committee on a party-line vote
PoliticsC-SPANopen source ↗
Confirmed before recess
+11¢ in 9 min
00:06 ago
Manager confirms the rotation for the weekend series
SportsClub statementopen source ↗
Team to sweep the series
−4¢ in 6 min
00:03 ago
Streaming chart shows an unexpected number one
CultureOfficial Chartsopen source ↗
Album number one next week
+9¢ in 3 min
Syntha · SynthaLab
>anything scheduled this week that hits my open climate positions?
Checking the catalyst feed for the series you have open.
synthatrade · catalysts(series="HIGHTEMP", window="7d") 4 scheduled · NOAA model runs 00z and 12z daily 1 breaking · storm upgraded to Category 2, 3 h ago
Three of your five open contracts resolve on stations inside the cone. Want a rule that flattens exposure when the forecast track shifts more than 60 miles?

Economic releases come from the issuing agency — BLS, BEA, Census, Treasury and the Federal Reserve — whose output is public domain. Breaking items carry a headline, a source and a link out, never article text. Prices beside them will be exchange data, shown once market data partnerships are finalised.

The Marketplace

Build on what other people already proved.

Publish an algorithm, clone someone else’s into a fresh workspace, and see the honest grade it earned before you trust it. Included with every plan.

B+
climatology_gap.py
1from synthatrade import load, noaa
2mk = load("climate", kind="temp_above")
3cl = noaa.normals(mk.station, window=30)
4# market probability minus the historical rate
5gap = mk.implied - cl.rate_above(mk.threshold)
6gap.by(mk.hours_out).summary(ci="wilson")
The gap only pays beyond 72 hours out. Inside two days the forecast has already caught up.
Official

Climatology gap on temperature contracts

Scores weather thresholds against a thirty-year NOAA baseline and flags the days the market prices further from history than the spread justifies.

Ana Reyes@areyes21438
C+
break_fade.py
1m = load("sports:tennis", level="atp")
2brk = m.events[m.events.type == "break"]
3jump = m.price.after(brk, seconds=90) - m.price.before(brk)
4sig = brk[jump.abs() > m.surface_norm * 1.4]
5Backtest(sig.fade(), fees="exchange").run().by(m.surface)
Fading works on clay and nowhere else. On grass the break usually is the match.

Break-point overreaction in tennis

Watches in-match win probability after a service break and fades the move when the price travels further than the historical swing for that surface.

Marcus Okafor@mokafor9621
A−
poll_lag.py
1book = load("elections", since="2024-01")
2poll = fred_like.polls("generic_ballot")
3lag  = book.align(poll).response_time(threshold=0.02)
4# trade only inside the unabsorbed window
5sig = book.when(lag.elapsed < lag.median * 0.25)
6sig.expectancy(net_of="fees")
Median absorption is 41 minutes. Most of the move lands in the first eight.
Official

Polling lag on election markets

Measures how long the book takes to absorb a new polling average and trades the window before the price finishes moving.

Priya Raman@praman34177
B−
dotplot_spread.py
1fomc = fred.projections("FEDTARMD")
2path = load("economics:fed").implied_path()
3spread = path.rate - fomc.median_dot
4wide  = spread[spread.abs() > 0.25]
5print(wide.groupby("meeting").agg(["mean", "count"]))
Two meetings out the market is a full cut below the median dot. That gap closed nine of the last eleven times.

Dot plot against the implied path

Compares the FOMC projection with the rate path the contracts imply and logs where the two disagree by more than a full cut.

Johan Lindqvist@jlind5812

Sample library. Profile photography from Pexels by Eliezer Miranda, nappy, Pranav Digwal and ShootSaga.

Clone into a fresh workspaceCode, datasets and the saved checks come with it, ready to run and make your own.
Publish with the grade attachedAnything you share carries its Verdict score and sample size, so nobody is selling a smooth equity curve with nothing behind it.
SynthaDesk

This is what judging something looks like.

Point it at a strategy from your library or at your own trading record — the engine is the same either way. Not screenshots: every number below is computed in your browser, including a standard exchange fee formula. Move anything and the whole panel recalculates.

Longshot bias by series▾
2,000 paths
Hit target — Finished under — Breached ruin —
Monte Carlo equity paths Contract 300 / 300  ·  Median —
TargetRuin
Hover any path to follow one run, click to pin it — or click a bar below for that slice of the distribution.
Cross-section at contract 300 / 300
No bar selected.

2,000 paths from a fixed seed, fees charged on every entry. Ruin is a 50% drawdown from the starting bankroll; target is +20%. Each contract is treated as independent here — the real engine resamples your own resolved contracts in blocks, which preserves the way good and bad runs cluster.

BOverall
Click a score to see how it was computed.
Findings (0)
Your hit rate—
Market implied—What the price says it should be
Edge vs market—
Brier score—
95% Wilson interval—Where the true rate plausibly sits
0%50%100%
—
Calibration curve You Market Perfect
Price paid →
By price bucketclick a row
BucketContractsResolved YESImpliedEdge
Select a bucket for its interval and expectancy.

Wilson score interval at 95%, which stays honest on small samples and near the ends of the scale where the textbook normal interval breaks. It answers one question: could a trader with no edge have produced this record by luck?

Raw edge—
Exchange fee—
Expected value—
Breakeven probability—How often you need to be right
Kelly stake—
—
Fee and edge across the board Fee per contract Edge after fee
Contract price →
Sizing ladder
FractionStakeContractsMedian growth
If your read is off
True probabilityEV per contractVerdict

Fee uses a standard exchange formula, round up(0.07 × C × P × (1−P)), rounded to the next cent on the order. Some series carry a different multiplier.

Pricing

Priced per seat. No data vendor on top.

Every plan includes the full statistical engine. The tiers differ in how much you can run and how far back the history goes.

Free

$0forever

Enough to answer the one question that made you come here.

  • SynthaDesk on your own trade history
  • Full calibration and edge scoring
  • Up to 3 saved checks
  • No code workspace
  • No Syntha
Join the waitlist
Most people

Pro

$29/ month

$290 a year if you pay annually — two months free.

  • Everything in Free
  • SynthaLab code workspace, Python and SQL
  • Syntha writes and explains your code
  • Full resolved contract history
  • Unlimited saved checks and exports
  • Catalyst alerts on the series you have open
Join the waitlist

Desk

$99/ month

For people running this as a book, not a hobby.

  • Everything in Pro
  • Live depth of book, archived to your account from the day you join
  • Priority compute for long backtests
  • Direct line to us
Join the waitlist

Prices are per seat in US dollars and exclude tax. Nothing is charged today — SynthaTrade™ is pre-launch and the waitlist takes no card. SynthaTrade is in beta and market data partnerships are still being finalised, so coverage and the depth available on the Desk plan may vary by market when we open. Cancel any time; annual plans are refundable pro rata within 30 days.

Find out whether your edge is real.

We're opening seats gradually so the first users get proper attention. Leave your email and we'll come to you.

No card. We email you when a seat opens.

Open this on a desktop

SynthaTrade is a workspace built for a wide screen. The mobile layout is on the way — for now, visit synthatrade.com from a laptop or desktop.

Email us to join the waitlist