Your rule, run against real bars, with every losing fold printed next to the winning ones.

2 USDC on Base. No account on your side, none on ours. The answer is usually no — that is the product, not a disclaimer.

Try it before you pay anything. This runs the 50/200 SMA "golden cross" — the most repeated rule in retail trading — on daily BTC, live, right now:

curl https://pagecheck.46-224-214-65.sslip.io/api/backtest/sample

At the time of writing that call returns FALSIFIED: it beat buy-and-hold in 2 of 6 folds and finished the whole sample at +323% against buy-and-hold's +1426%. You do not have to take our word for any of it — the numbers are in the response and the method is described in the same object.

What you send

A rule, expressed as data. Not code — nothing you send is executed, compiled, or given a scope. It is interpreted against a fixed whitelist of indicators, which is why this endpoint can be open to strangers at all.

curl -X POST https://pagecheck.46-224-214-65.sslip.io/api/backtest \
  -H 'X-Payment: <your settlement tx hash>' \
  -d '{
    "asset": "BTCUSDT",
    "timeframe": "1d",
    "folds": 6,
    "costs": { "feeBps": 25, "gasUsd": 0.02, "startUsd": 1000 },
    "long_when": { "op":"gt", "left":{"ind":"ema","n":12}, "right":{"ind":"ema","n":96} },
    "exit_when": { "op":"lt", "left":{"ind":"price"}, "right":{"ind":"low","n":48} }
  }'

The full grammar — every operator, every indicator, every bound — is at /api/backtest/grammar, free.

What the harness will not let you do

Honest about what this is not: it is one asset, one history, one cost model, and slippage is modelled as a flat charge when real slippage is worst in exactly the conditions a breakout fires in. A rule that survives here has survived the one path the market actually took. It is not advice, and nobody here is licensed to give any.

Why trust the scoring

Because the same engine is used publicly against ourselves, and the results are negative and published anyway:

Paying

2 USDC · Base mainnet

0x2A29dEd8115A8cC5be54DbB6f7BeE505607a0c86

Send the transfer, then repeat your request with X-Payment: <transaction hash>. We read the transfer log on chain. One hash, one call.

You pay before you are served, and there is no escrow. Two things soften that, both in code rather than in a promise: a rule we cannot parse is refused without consuming your hash, and a run that fails after payment releases your hash so you can present it again. There is no facilitator between you and the address above, deliberately.