Ranked on edge, not hit rate
A trading signal is an instrument, a direction (long or short), a timeframe, a close, and a conviction from 1 to 3. It is committed on Solana and the slot is its timestamp. There is no instruction to edit or delete a signal, for the signal provider or for us. Losing signals stay on the record.
The entry price is not part of the signal, so a provider cannot assert one. The program rejects a close that is too near:
| Timeframe | Earliest close after commit | Close is marked on |
|---|---|---|
| 5m | 10 minutes | 5-minute candle |
| 15m | 30 minutes | 15-minute candle |
| 1H | 2 hours | 1-hour candle |
| 4H | 8 hours | 6-hour candle |
| 1D | 1 day | 1-day candle |
| 1W | 2 days | 1-day candle |
| 1M | 7 days | 1-day candle |
Two prices, from one fixed source per asset class: Coinbase for crypto, the consolidated daily close for equities (which is why equity signals are 1D and longer for now).
- Entry is the close of the one-minute candle containing the commit.
- Close is the close of the candle containing the close time, at the size in the table above.
- Only finished candles are read. A candle still trading shows the last print so far, which nobody could reproduce later. A signal is marked once its close candle has ended, plus 60 seconds. A 1D signal closing at 14:00 UTC is marked on that day's close, just after midnight UTC.
- If a candle had no trades, the price is the last print before it, looking back at most 10 candles.
- If the source cannot price an instrument within 72 hours of the close, the signal is void and counts neither way.
The outcome is a win if the close is on the signal's side of the entry. A flat close is a loss.
edge = sign × |move| ÷ expected move × conviction weight
expected move = realized volatility × √(time from entry print to close print, in years)- Sign is +1 for a win and −1 for a loss.
- Move is the percentage change from entry to close.
- Expected move uses the time actually held, not the timeframe label, so a signal held for a month is measured against a month of volatility. Realized volatility is the standard deviation of 30 daily log returns, from daily closes that were final when the signal closed, annualized with 365 days for crypto and 252 for equities.
- Conviction weight is 0.9, 1.0, or 1.1 for conviction 1, 2, or 3. High conviction earns a little more when right and costs a little more when wrong.
Read edge as: how many normal-sized moves, for this instrument over this stretch of time, did the signal capture. A small move on a quiet instrument and a large move on a volatile one can be the same edge. Hit rate cannot tell them apart; edge can.
bet edge = mean edge of one provider's signals on one timeframe closing in the same candle
provider edge = sum of bet edges ÷ (bets + 20)Calls that close together on the same timeframe count once, at their average. Ten longs in one hour are one decision, not ten. A provider who commits one signal at a time is unaffected.
The division is the same as adding 20 bets of zero edge to every record: a small sample is shrunk toward zero. Five for five at +1.0 ranks at 0.20. At 20 scored bets a provider keeps half of their raw average, at 80 they keep 80%.
A record with fewer than 20 scored bets is provisional: the prior still dominates its score, so it cannot climb far on a short streak. Beside every edge is its standard error, and the number is coloured only once it is two errors from zero. Until then it is grey: a real measurement that cannot yet be told from nothing. The board is ordered by shrunk edge alone, and the sample size is shown beside every number.
Wallets marked house are ours: simple reference strategies and a coin flip. The coin flip uses no information, so its expected edge is zero. It is the baseline: a provider who cannot separate from it on a real sample has shown nothing, whatever their hit rate says. House wallets can lose, and when they do it stays on the board.
npm i -g @ssp1/cli
skynet verify --provider <wallet> --api-url https://skynet.marketsIt reads the wallet's signals from the chain, reprices them from Coinbase, recomputes every outcome and edge with the rules above, and compares the result with what this site reports: any signal we dropped, any we show that is not on-chain, any number that disagrees. The rules themselves are code you can read, in @ssp1/protocol. Today it verifies crypto records; equity signals are reported as unverifiable.
- It is not P&L. No position size, leverage, fee, funding, or slippage. It is a record of signals, not fills.
- It sees two prices. A signal that draws down hard and closes green is a win. There are no stops or targets.
- Volatility looks backward. When the regime shifts, the expected move lags.
- It cannot separate skill from information or luck. Shrinkage makes luck less likely to rank. It does not make it impossible.
- One wallet is one record. An operator can run several and show you the best. The provisional tier, the shrinkage and the per-signal fee make that slow and costly, not impossible.
- A display name is self-declared. The wallet signed for it; nobody checked who is behind it. The record belongs to the address.
Past performance does not predict future results. Terms.