Search the recorded market
A search engine across 847 Binance USDT-M crypto and TradFi perpetuals. Describe a setup in plain words, or point at a minute that already happened, and get every time it occurred in the record: how many, out of how many chances, what followed each one, and a one-click replay of the exact market. Typical scans return in seconds.
Hyperliquid history is still being backfilled; it becomes searchable and replayable once it passes the same completeness checks as the Binance record. Cross-exchange research is in the works, and results will always say which venue they came from before any Binance-to-Hyperliquid comparison is allowed.
Results describe what happened in the scanned markets and dates, and every count says how many chances it had. They are observed examples, not a guarantee. Nothing here is trading advice.
9 occurrences across 20,161 eligible symbol-buckets scanned
v2 · nrm.v1 · ft.v1 · rev 9add59ad · q#cb3c91250 BUCKETS EXCLUDED - WARMUP-ABSENT FEATURES SHRINK THE DENOMINATOR, NEVER COERCED TO 0
FOR HUMANS AND THEIR AGENTS
The same deterministic engine over a REST API and MCP. Your agent grounds itself on the closed feature registry, can run occurrence scans, prevalence reads and cohort comparisons, and gets counts, coverage and a reproducibility key it can return with every answer.
> Search from your own AI agentnpx -y @edgedepth/research-mcp Count it before you trade it
A setup you remember from three screenshots is not a sample. Research gives you the count and the denominator: how often the condition actually occurred, out of how many chances it had, and the spread of what followed. It never tells you what to do with that. It is simply cheaper to count a setup than to trade it and find out.
Answering "how often did this happen" yourself means recording every market, storing the ticks, computing features without accidentally reading the future, and keeping all of it reproducible. That is weeks of work before the first question. Here it is a sentence and a few seconds, and standing alerts watch for the next one so you do not have to.
Run it yourself, call it from code, or give it to an agent
Ask in plain words. The exact query appears as editable values you confirm before anything runs, so nothing executes on a guess. Then explore what the matches share, compare them against every other eligible minute, arm live alerts, and open any occurrence in replay.
> Open ResearchSend the same versioned documents over HTTPS. Registry, scans, cohorts, snapshots and published reports return the engine's canonical result contract, including denominators and reproducibility metadata.
> Read the API docsConnect an agent to the read-only MCP server at https://mcp.edgedepth.com/mcp, or run @edgedepth/research-mcp locally. The agent reads the registry first, then uses the same scans, cohorts, snapshots and receipts.
Same question, same answer, every time
Most market research can't be checked. A number gets posted, the data moves on, and recomputing it is impossible even for its author. EdgeDepth is different: run the same search over the same recorded history and you get exactly the same answer, on any account, any day, any number of times. Run it again next week: same answer. Send the link to a friend: same answer.
That works because every result carries an ID that pins exactly how it was produced: which question ran, which frozen code measured every value, and which state of the recorded history was scanned. Anyone with the ID re-runs the exact same search and can check the answer against us. Change any part and the ID changes with it.
What you can ask
You describe the setup in your own words; it maps onto one of 39 fixed measurements: order flow, liquidations, funding, open interest, positioning, candle shapes and more. No free-form formulas and no hand-tuned fields, so nobody can bend a measurement to flatter a result. Today you can search:
| You ask about | Registry id | Example ask |
|---|---|---|
| Toxic flow (VPIN) | feature.vpin | "vpin above 0.85 on majors" |
| VPIN regime flips | feature.vpin_regime | "the vpin regime entered high or critical" |
| One-sided book | feature.book_imbalance | "the book averaged half bid-sided for 15 minutes" |
| One-sided book, vs its own history | feature.book_imbalance_pctrank | "book imbalance above its own 95th percentile" |
| Spread blowouts | feature.spread_norm | "the spread blew out toward its cap" |
| Funding extremes, signed | feature.funding_rate | "funding negative at settlement" |
| Funding extremes, normalized | feature.funding_norm | "funding pinned at the extreme end of its range" |
| Open-interest velocity, vs its own history | feature.oi_velocity_pctrank | "OI velocity above its own 95th percentile" |
| Liquidation bursts | feature.liq_intensity_norm | "liquidation intensity above 0.5" |
| Clustered liquidations | feature.cascade_clustering_index | "liquidations arriving in cascades rather than independently" |
| Liquidated notional, trailing hour | feature.liq_notional_usd_1h | "at least $5 million liquidated in one hour" |
| Top-trader long account share | feature.top_trader_long_ratio | "top traders at least 65% long" |
| Global long account share | feature.global_long_ratio | "the crowd at least 60% long" |
| Top-trader vs crowd divergence | feature.top_global_long_skew | "top traders 15 points more long than the crowd" |
| Short-horizon returns | feature.ret_15m | "down 2% in 15 minutes" |
| Hour-scale returns | feature.ret_1h | "down 5% on the hour" |
| Hour range | feature.range_pct_1h | "a 3% high-to-low hour" |
| Realized volatility | feature.realized_vol_1h | "1-minute vol elevated across the hour" |
| Volatility, vs its own history | feature.realized_vol_pctrank | "vol above its own 90th percentile" |
| Distance from day VWAP | feature.vwap_dist | "stretched 2% above the day's VWAP" |
| One-sided tape | feature.taker_buy_ratio_15m | "two-thirds of the tape hit the ask for 15 minutes" |
| Whale-sized prints | feature.large_trade_share_15m | "whale prints carrying a third of volume" |
| Time to funding | feature.mins_to_funding | "within 30 minutes of settlement" |
| Candle body, 15-minute | feature.candle_body_15m | "a full-body 15-minute candle" |
| Candle body, hourly | feature.candle_body_1h | "an hour that closed where it opened" |
| Upper wick | feature.candle_upper_wick_15m | "a long upper wick" |
| Lower wick | feature.candle_lower_wick_15m | "a hammer: two-thirds lower wick" |
| Range compression and expansion | feature.candle_compression_15m | "the tightest candle in three hours" |
| Engulfing candles | feature.candle_engulfing_15m | "a bullish engulfing candle" |
| Engulfing candles, hourly | feature.candle_engulfing_1h | "an hourly bearish engulfing" |
| Sweep and reclaim | feature.candle_sweep_reclaim_15m | "swept three-hour lows and closed back above them" |
| Sweep and reclaim, hourly | feature.candle_sweep_reclaim_1h | "an hour that swept twelve-hour lows and reclaimed" |
| Inside and outside bars | feature.candle_containment_15m | "an inside bar after a big move" |
| Descending resistance in force | feature.desc_resistance_active | "sitting under a descending resistance line on both timeframes" |
| Support slope under that line | feature.desc_resistance_support | "rising support into descending resistance" |
| Coil tightness | feature.desc_resistance_compression | "price compressing hard between the line and its support" |
| Age of the line | feature.desc_resistance_span_days | "a descending line at least three weeks old" |
| Distance to the line, in ATR | feature.desc_resistance_dist_atr | "pressed within half an ATR of the line" |
| Touches on the line | feature.desc_resistance_touches | "a line touched at least four times" |
Candle features read the last COMPLETED 15-minute or hourly candle as of each minute, never the one still forming, and boundary rules are strict: an equal low is not a sweep, an equal body edge is not an engulfing. When the record has no candle to reference (a market gap), the answer is absent, not improvised.
Outcomes, comparison, snapshots and live follow-through
Every search summarizes what followed every match, not just the flattering ones, and lets you compare that against the market's normal behavior. No win rates, causal claims or hidden significance score.
> Why you can't filter on what happened nextPoint at a market and a minute instead of describing it: the panel reads every versioned feature as of that minute and proposes editable values, marked INFERRED until you own them. Compare up to eight moments for what they honestly share.
> From a momentTake one set of matches and ask how they differed when a second condition was also true, false, or unknown at the same moment: the split can never quietly change which matches you're looking at.
> See the rollout statusArm any verified result as a standing definition. The same frozen features and edge rules run on live data: every fire carries its observed values and a replay link.
> How live alerts workTest your setup against everything that happened.
Results describe what happened in the scanned markets and dates, not a guarantee it happens again. Nothing here is trading advice.