Scoring formula
How your BTC predictions are scored and how to verify your result independently.
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
- Find the canonicalSourceUrl on your results page — it is the exact Binance REST URL used at scoring time.
- Open the URL in a browser to retrieve the same raw kline data.
- 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.
- Average the per-candle scores. The result should match your displayed score.
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
| Candle | Pred. High | Pred. Low | Pred. Close | Act. High | Act. Low | Act. Close |
|---|---|---|---|---|---|---|
| #1 | 70,000 | 67,000 | 68,500 | 68,000 | 66,000 | 67,500 |
| #2 | 69,500 | 66,500 | 68,000 | 69,000 | 66,800 | 67,800 |
Step-by-step calculation
| Candle | Field | Calculation | Score |
|---|---|---|---|
| #1 | High | max(0, 1 - |70000 - 68000| / 2000) | 0.0000 |
| Low | max(0, 1 - |67000 - 66000| / 2000) | 0.5000 | |
| Close | max(0, 1 - |68500 - 67500| / 2000) | 0.5000 | |
| Candle score | (0.0000 + 0.5000 + 0.5000) / 3 | 0.3333 | |
| #2 | High | max(0, 1 - |69500 - 69000| / 2200) | 0.7727 |
| Low | max(0, 1 - |66500 - 66800| / 2200) | 0.8636 | |
| Close | max(0, 1 - |68000 - 67800| / 2200) | 0.9091 | |
| Candle score | (0.7727 + 0.8636 + 0.9091) / 3 | 0.8485 | |
| Total | (0.3333 + 0.8485) / 2 | 59.09% |
Formula version v2 · All score records are stamped with the formula version used at scoring time.