Every BTC market,
priced honestly
Every Polymarket BTC market, priced off the feed it actually settles on — then judged against what the market already knows.
| Window | Side | State | P&L | |||
|---|---|---|---|---|---|---|
| 13:35:00 | UP | +2.36 | 0.71 | 0.66 | filled | +18.40 |
| 13:30:00 | — | +0.20 | 0.59 | 0.99 | skipped | — |
| 13:25:00 | UP | +4.11 | 0.88 | 0.81 | filled | +22.15 |
| 13:20:00 | DOWN | -3.04 | 0.79 | 0.72 | filled | -31.00 |
| 13:15:00 | — | -0.44 | 0.53 | 0.51 | skipped | — |
Same method. Different maths.
Each market priced off the feed it actually settles on. Asking the wrong question is how most tooling gets these wrong.
Up or down, every five minutes
Where the price finishes. Terminal-value maths on the Chainlink stream.
Will BTC reach $X by a date
Whether a level is ever touched. Barrier maths on Binance, back to 2018.
Neither has a proven edge. Windows loses to the market price. On Levels the two disagree by 2.7–8.5 points, but the sign of that gap flips with the volatility you feed it — an artefact, not a signal.
This is what we price.
Two question shapes, one settlement feed each. Everything else follows from which one you are looking at.
Will Bitcoin reach $70,000 in July?
Up or down, 13:35–13:40 UTC?
Will Bitcoin dip to $50,000 by December 31?
Illustrative prices, not a live board.
Four steps. Three of them refuse.
A tool that fires on every window is a random number generator with fees.
Read the settling feed
Chainlink BTC/USD at 1 Hz — the stream these windows resolve against, not an exchange standing in for it.
Price the window
GARCH-calibrated volatility, Student-t tails. Distance to strike, never a view on direction.
Pass the gate
Minimum edge after the tick. No first minute. Nothing inside feed-basis noise.
Place, or decline
Quarter-Kelly under your own cap, and the console names the rule that stopped it when it stops.
Your keys never reach our servers.
Polymarket credentials move funds. Holding them would make us a custodian, and a target.
Keys stay
on your box
The runner reads a mode-600 file on your machine. Never a CLI argument — ps shows those to every user.
Nothing
custodial
No key custody means no withdrawal path, no support desk that can move funds, and nothing worth breaching.
No key in
the browser
The console shows the signal and places nothing. There is no vault in it, because there is nothing for one to hold.
A token,
not an account
Unlocking the console posts your seat token once. It lives in an httpOnly cookie; the browser never keeps a copy it can read.
Auditable in
one sitting
The process that reads your key has two dependencies, both crypto, both pinned. Reading it beats trusting this paragraph.
Stated
limits
Trading is geoblocked in some regions, and the exchange says so before it looks at the order. Nothing here can change that.
What this does not protect
The console is a screen, not a trader. What it runs is paper, and it stops when the tab does — a browser cannot hold a position open overnight, and it is not the thing you would trust with a key. The runner below is.
Run it on your own box.
It asks the same API the console does, from a process you control. Keys stay in a file only you can read, and nothing stops when you close a tab.
# 1. the seat token fetches the code — no registry, no deploy keycurl -fsSL -H "Authorization: Bearer $TOKEN" \ https://api.ramalogy.xyz/v1/runner/download | tar xz --strip-components=1npm install && npm run build # 2. keys stay in a file only you can read. it refuses to start otherwisecp credentials.example.json ~/.ramalogy/credentials.jsonchmod 600 ~/.ramalogy/credentials.json # 3. paper is the default. nothing reaches the exchangenpm start -- --windows 50 # 4. live needs the flag AND the phrase, on every runnpm start -- --live --bankroll 500 --max-fraction 0.02 \ --confirm "I ACCEPT THE MEASURED EDGE IS NOT SIGNIFICANT"The process that reads your keys installs nothing to run.
Mode 600, never an argument — ps shows those to every user.
One SQLite row per window, refusals included.