Scoring formula

How your BTC predictions are scored and how to verify your result independently.

Back to tournaments
How scoring works

What the score means

Your accuracy score is a number between 0 and 1 (displayed as a percentage). A score of 1.00 (100%) means every predicted high, low, and close exactly matched the actual Binance prices for each component. A score of 0 means every prediction missed by at least the full candle range.

The formula

For each price component (High, Low, Close) of each predicted candle:

range           = actualHigh - actualLow
component_score = max(0, 1 - |predicted - actual| / range)

Errors are normalized by the candle's own range (high minus low) rather than by the absolute price. A $500 miss on a $2000-range candle scores 75% accuracy, not 99% — so scores spread meaningfully across 0-100% instead of clustering near the top.

The three component scores (H, L, C) are averaged to produce a per-candle score. Per-candle scores are then averaged across all predicted candles to produce your total score.

Degenerate case:if a candle's range is 0 (a perfectly flat candle where high equals low), a component scores 1 only when the predicted value exactly equals the actual value, otherwise 0.

Null or missing predicted values (candles you left blank) count as 0 for that candle.

Formula version

This page describes formula version v2. Every score record is stamped with the formula version used to compute it. If the formula changes in the future, your historical scores remain valid under the version they were scored with.

Data source

Actual prices come from the Binance REST API endpoint GET https://api.binance.com/api/v3/klines with startTimeset to the candle's UTC open time and limit=1. The request is made 30 seconds after the candle's close time to allow Binance's data pipeline to propagate. The verbatim JSON response is stored on your score record.

Independent verification

  1. Find the canonicalSourceUrl on your results page — it is the exact Binance REST URL used at scoring time.
  2. Open the URL in a browser to retrieve the same raw kline data.
  3. Apply the formula above to each candle's High, Low, and Close fields using your predicted values — divide the absolute error by the candle's (high - low) range.
  4. Average the per-candle scores. The result should match your displayed score.
Worked example

Suppose you predicted 2 BTC/USDT candles. Here is how the score is computed.

Notice how the v2 formula spreads scores across the 0-100% range — a 2000-point High miss on a 2000-range candle scores 0%, not 99.3%.

Input values

CandlePred. HighPred. LowPred. CloseAct. HighAct. LowAct. Close
#170,00067,00068,50068,00066,00067,500
#269,50066,50068,00069,00066,80067,800

Step-by-step calculation

CandleFieldCalculationScore
#1Highmax(0, 1 - |70000 - 68000| / 2000)0.0000
Lowmax(0, 1 - |67000 - 66000| / 2000)0.5000
Closemax(0, 1 - |68500 - 67500| / 2000)0.5000
Candle score(0.0000 + 0.5000 + 0.5000) / 30.3333
#2Highmax(0, 1 - |69500 - 69000| / 2200)0.7727
Lowmax(0, 1 - |66500 - 66800| / 2200)0.8636
Closemax(0, 1 - |68000 - 67800| / 2200)0.9091
Candle score(0.7727 + 0.8636 + 0.9091) / 30.8485
Total(0.3333 + 0.8485) / 259.09%

Formula version v2 · All score records are stamped with the formula version used at scoring time.