Skip to content
All strategies

Strategies

XRP 15-Minute Polymarket Up/Down: Late-Window Favourite Underpricing, Confirmed by a Binance-Perp Fair-Probability Model (buy the DOWN token at 0.70-0.93 when the model says it is worth >=5 points more, hold to settlement)

Outcome: Backtesting

PolymarketXrp15mLateFavouriteDown

XRP 15-Minute Polymarket Up/Down: Late-Window Favourite Underpricing, Confirmed by a Binance-Perp Fair-Probability Model (buy the DOWN token at 0.70-0.93 when the model says it is worth >=5 points more, hold to…

Hypothesis

Original Research Lead hypothesis, prediction-market archetypes 2+1 combined (calibration / favourite-longshot bias, with a crypto-data fair-value check). Tradeable unit: the recurring POLYMARKET series xrp-updown-15m, outcome token DOWN (instrument family XRP-UPDOWN-15M-<ts>-DOWN.POLYMARKET, 1-MINUTE probability bars, via PolymarketSeriesStrategy + a polymarket_series spec {series: 'xrp-updown-15m', outcome: 'Down', lookback_days: 70}). Signal source: XRPUSDT.BINANCE USD-M perp 1-MINUTE bars as an extra……Show moreShow less

Original Research Lead hypothesis, prediction-market archetypes 2+1 combined (calibration / favourite-longshot bias, with a crypto-data fair-value check). Tradeable unit: the recurring POLYMARKET series xrp-updown-15m, outcome token DOWN (instrument family XRP-UPDOWN-15M-<ts>-DOWN.POLYMARKET, 1-MINUTE probability bars, via PolymarketSeriesStrategy + a polymarket_series spec {series: 'xrp-updown-15m', outcome: 'Down', lookback_days: 70}). Signal source: XRPUSDT.BINANCE USD-M perp 1-MINUTE bars as an extra instrument (never traded). Each market resolves DOWN=1 if XRP's reference price at the window close is below its price at the window open. Mechanism: in the second half of a 15-minute window, once XRP has already moved down, the remaining time is short enough that the probability of a sign reversal is computable from the move size and short-horizon realised volatility. Retail binary books are documented to under-price favourites and over-price longshots (favourite-longshot bias), and the up/down books are thin, so the favourite token often lags the arithmetic. We buy the DOWN token only when BOTH (a) its price sits in the favourite band 0.70-0.93 and (b) a frozen Gaussian model built from Binance XRP 1-minute data says its fair probability is at least edge_min (5 points) above the market price. Hold to settlement (settlement is fee-free, so only one taker fee is paid). Why XRP and the DOWN series: SOL-15m and ETH-4h fair-value-lag hypotheses already in the pipeline buy the UP token mid-window; this one tests a different element (late-window favourites only, either-price-band gated) on an unused coin and on the complement token, so the factory gets an independent read of the calibration bias. The template trades one outcome token per series spec; the UP series is the natural breadth replication if this survives. Pre-study disclosed (not used to accept or reject): on a random 250-market sample, UNCONDITIONALLY buying the first DOWN price in 0.75-0.93 during 50-75% of the window won 87.2% at an average price 0.844 (net about +1.4% per dollar after fee and 1% spread); the same rule on the UP token won 79.1% at 0.840 (about -8.2%). So the raw favourite bias is not reliable by itself; the hypothesis is that the model-confirmation filter isolates the underpriced subset. History: the catalogue holds ~7,000 resolved xrp-updown-15m markets since 2026-08-13 (~76 days); lookback_days 70 is fillable. Execution: Polymarket is a CASH long-only venue; 'betting up' would be the UP series, never a short. Orders are market (taker) orders at the decision bar's close, which on this continuous 24/7 market stands in for the next bar's open (registered substitution for next_bar_open_fill). No stop: the maximum loss of each position is its premium, which IS the risk budget (route (b): time/settlement exit with capped sizing). Basis risk is named: Polymarket resolves on the Chainlink XRP/USD data stream, our model uses the Binance XRPUSDT perp; the edge_min margin is meant to absorb that difference.

Fills the most under-used venue (POLYMARKET 0.1% of experiments) with a cross-venue (POLYMARKET + BINANCE signal leg), short-horizon, event-driven design on a coin series never traded here. Polymarket series bars now exist in bulk (~7,000 resolved xrp-updown-15m markets), and the two earlier near-expiry harvests died of data_unavailable, an infrastructure cause, not a verdict. It avoids the dead families in the lessons: no OHLCV indicator states, no funding arbitrage, no relative-value pairs, no transfer of crypto shock panels to OKX or equities. Sample size is far above the lesson-237/259 threshold of ~30 events. The fee arithmetic clears the venue's ~2% per-dollar cost with a pre-registered margin.

Implementation

Trades the Polymarket xrp-updown-15m DOWN token series (PolymarketSeriesStrategy, lookback 70 days). Binance XRPUSDT USD-M perp 1-minute bars are a signal-only leg and are never traded. For each market, open_ref is the last Binance close at or before the window open (taken from the market id's epoch). If no Binance bar falls within 2 minutes of the open, the market is skipped. On each DOWN-token 1-minute bar with elapsed fraction f in [entry_start_frac 0.50, entry_cutoff_frac 0.80] of the 15-minute window, the……Show moreShow less

Trades the Polymarket xrp-updown-15m DOWN token series (PolymarketSeriesStrategy, lookback 70 days). Binance XRPUSDT USD-M perp 1-minute bars are a signal-only leg and are never traded. For each market, open_ref is the last Binance close at or before the window open (taken from the market id's epoch). If no Binance bar falls within 2 minutes of the open, the market is skipped. On each DOWN-token 1-minute bar with elapsed fraction f in [entry_start_frac 0.50, entry_cutoff_frac 0.80] of the 15-minute window, the model computes r = ln(P_now/open_ref) from the latest Binance close at or before the bar. sigma_1m is the sample std of the last vol_lookback_min (60) 1-minute log returns, floored at 0.0002, and m = 15*(1-f), floored at 0.5. Then q = Phi(-r/(sigma_1m*sqrt(m))). The strategy buys DOWN shares with one taker market order per market when 0.70 <= price <= 0.93 and q - price >= edge_min (0.05). Size: premium = 0.5% of equity, capped at 1,000 USD notional. The position is held to the fee-free 0/1 settlement. Execution substitution (next_bar_open_fill -> use_equivalent): the market order fills at the decision bar's close, which on this continuous 24/7 market stands in for the next bar's open.

Implements the hypothesis rules one-for-one. calculate-signal equivalent market_signal returns the continuous model edge q - price every bar, and the band, timing and edge gates sit in should_enter_market. Two template adaptations follow the working SOL-15m series strategy. (1) The schedule's start_ns is the market LISTING time (~24h before), not the window open. So the window open is parsed from the instrument id epoch, and the template's listing-life cutoff is neutralised. entry_start_frac and entry_cutoff_frac……Show moreShow less

Implements the hypothesis rules one-for-one. calculate-signal equivalent market_signal returns the continuous model edge q - price every bar, and the band, timing and edge gates sit in should_enter_market. Two template adaptations follow the working SOL-15m series strategy. (1) The schedule's start_ns is the market LISTING time (~24h before), not the window open. So the window open is parsed from the instrument id epoch, and the template's listing-life cutoff is neutralised. entry_start_frac and entry_cutoff_frac are applied to the 15-minute window itself, as the hypothesis defines f. (2) The Binance leg is declared signal_only_bar_types: no USDT account, no capital split, and any order on it is refused. Point-in-time: only Binance bars stamped at or before the token bar and no older than 2 minutes are used. The rolling-vol state is O(1) per bar (deque + running sums). Risk control is route (b): settlement exit with capped sizing. The max loss per position is its premium (0.5% of equity, at most 1,000 USD), and one market is open at a time. Optimization plan parameters are used verbatim under their names. ref_max_age_min (2) is the hypothesis's 2-minute open_ref tolerance, also applied to P_now staleness. min_remaining_min (0.5) is the hypothesis's m floor. Neither is tuned.

Verification Results

Optionally skip (or divide by the elapsed minutes) any return whose bar spacing exceeds 60 s.

The rolling 1-minute log-return buffer appends one return per Binance bar arrival. It does not check that consecutive bars are 60 s apart, so a multi-minute Binance gap enters as a single '1-minute' return and inflates sigma_1m. Binance XRPUSDT 1m is near-continuous, so the impact is negligible.

Acceptable as written. A one-time assignment in on_start after super().on_start() would be cleaner.

market_signal overwrites the template's private _pm_entry_cutoff to 1.0 on every call. This neutralises the listing-life cutoff, which is correct here: start_ns is the market's activation time, about 24 h before the window, confirmed from the catalog binary_option record (activation 1793204664 vs id epoch 1793290500). But it relies on a private template attribute.

Each position risks 0.5% of equity (premium), capped at $1,000, and one market is open at a time. Total return and drawdown will therefore be small in equity terms even with many trades (lesson 211): compare per-notional economics, not headline drawdown. The disclosed pre-study (unconditional DOWN favourite +1.4%/$, UP -8.2%/$) suggests the bias is unstable. Whether the Gaussian filter isolates an underpriced subset is the open question, and it should be judged after the ~2% per-dollar taker+spread cost. Basis risk (Chainlink settlement vs Binance perp) matters most when the move since the window open is small. Check the hit rate conditional on |r|/(sigma*sqrt(m)) buckets first.

Backtest and paper results are hypothetical. Trading involves risk of loss.