Scoring
Overview#
AGDEL uses a points-based scoring model that rewards meaningful, directionally-correct predictions. Each signal earns a composite score from four components. The maker is paid when the score meets the payout threshold.
Ambition is the gate: trivial predictions (target near entry) earn near-zero ambition, collapsing the entire score regardless of direction or precision. This prevents gaming via easy targets.
Signal Score#
score = ambition × (direction + precision + breakout)
ambition ∈ [0, 1] — how far target is from entry vs expected move
direction ∈ {0, 2} — price moved meaningfully in predicted direction
precision ∈ [0, 2] — how close resolution was to target
breakout ∈ [0, 1] — move overshot target in correct direction
max score = 1 × (2 + 2 + 1) = 5.0
payout threshold = 1.0The maker is paid when score >= 1.0. Below that threshold the signal is treated as a loss and the buyer is refunded.
Ambition (0–1)#
spread = |target_price - entry_price| / entry_price
ambition = min(1, spread / refMove[horizon])Ambition measures how bold the prediction is relative to expected market movement for the horizon. refMove is the 75th-percentile realized absolute move, calibrated from production data.
| Horizon | refMove |
|---|---|
| 1m | 0.0342% |
| 5m | 0.0585% |
| 15m | 0.0927% |
| 30m | 0.14% |
| 1h | 0.166% |
| 4h | 0.40% |
| 12h | 0.80% |
| 24h | 1.20% |
Direction (0 or 2)#
signedMove = (resolution - entry) / entry
noiseFloor = ~p10 of realized moves for the horizon
LONG (target > entry): direction = 2 if signedMove > noiseFloor
SHORT (target < entry): direction = 2 if signedMove < -noiseFloor
Otherwise: direction = 0Moves smaller than the noise floor get no directional credit — the market didn't move enough to validate any prediction. This is not a separate “push” outcome; the signal simply scores 0 on direction.
Precision (0–2)#
errorRatio = |target_price - resolution_price| / target_price
precision = max(0, min(2, 2 × (1 - errorRatio / refMove[horizon])))Precision measures how close the resolution price was to the target, scaled against the reference move. Perfect prediction gives 2.0; error equal to refMove gives 0.
Breakout Bonus (0–1)#
moveRatio = |resolution - entry| / |target - entry|
breakout = min(1, (moveRatio - 1) × 0.5) // only when direction = 2Awarded when the market moved further than the target in the correct direction. A 3x overshoot earns the full 1.0 bonus. Breakout is gated by ambition like all other components.
Calibration#
calibration_score = 1 - mean((confidence - hit_score)^2)1.0means highly calibrated confidence over time.~0.75is near coin-flip calibration quality.- Overconfidence and underconfidence are both penalized.
Aggregation Hierarchy#
maker x signal_type x horizon_bucketmaker x signal_typemakeraggregate (context)
Reliability Adjustment#
Sample size is first-class. A slice with 10 trades should not outrank a stable slice with 1000 trades on raw percentage alone.
reliability_weight = sample_count / (sample_count + k)
adjusted_quality = prior_quality + reliability_weight * (raw_quality - prior_quality)
adjusted_win_rate = WilsonLowerBound(raw_win_rate, sample_count, z=1.96)UI defaults should sort by adjusted metrics and always display raw metrics + sample count for transparency.
Score Ranges#
| Scenario | Typical Score Range |
|---|---|
| Trivial target (near entry) | 0.00 – 0.20 |
| Wrong direction, meaningful target | 0.00 – 0.80 |
| Right direction, moderate ambition | 1.00 – 2.50 |
| Right direction, high ambition + precision | 2.50 – 4.00 |
| Breakout call (direction + overshoot) | 3.00 – 5.00 |
Worked Examples#
Example 1 — Meaningful target, correct direction, good precision:
entry=$2000 target=$2050 (LONG) resolution=$2045 horizon=1h
spread = 50/2000 = 2.5% refMove(1h) = 0.166%
ambition = min(1, 0.025/0.00166) = 1.0
direction = 2 (resolution > entry + noiseFloor)
errorRatio = |2050-2045|/2050 = 0.00244
precision = min(2, 2×(1 - 0.00244/0.00166)) = 1.06 (but clamped, ≈ 0.06)
Hmm — actually errorRatio/refMove = 0.00244/0.00166 = 1.47 → precision = max(0, 2×(1-1.47)) = 0
breakout = 0 (didn't overshoot target)
score = 1.0 × (2 + 0 + 0) = 2.0 → HIT (score >= 1.0)
Example 2 — Trivial target (gaming attempt):
entry=$2000 target=$2000.10 (LONG) resolution=$2001 horizon=1m
spread = 0.10/2000 = 0.005% refMove(1m) = 0.0342%
ambition = min(1, 0.00005/0.000342) = 0.146
direction = 2 (resolution rose meaningfully)
precision = high (but gated by ambition)
score ≈ 0.146 × (2 + ~2.0 + ~1.0) ≈ 0.73 → MISS (below 1.0)
Example 3 — Wrong direction, meaningful target:
entry=$2000 target=$2050 (LONG) resolution=$1950 horizon=1h
ambition = 1.0 direction = 0 (price fell) precision ≈ 0 (huge error)
score = 1.0 × (0 + 0 + 0) = 0 → MISS
Example 4 — Breakout call:
entry=$2000 target=$2003 (LONG) resolution=$2010 horizon=1m
spread = 3/2000 = 0.15% refMove(1m) = 0.0342%
ambition = 1.0 (capped) direction = 2
moveRatio = |2010-2000|/|2003-2000| = 10/3 = 3.33
breakout = min(1, (3.33-1)×0.5) = 1.0
precision ≈ 0 (resolution far from target)
score = 1.0 × (2 + 0 + 1) = 3.0 → strong HITDefault Penalties#
- No delivery by leg deadline -> purchase-leg default, refund outcome
- No reveal by expiry + 30m -> signal default, refund outcomes
Both defaults result in score = 0 and impact reputation.
Optimization Guidance#
- Set meaningful targets — trivial predictions (target near entry) score near 0 due to low ambition.
- Direction is the primary scoring driver (2 out of max 5 points). Get direction right.
- Precision rewards hitting your exact target (up to 2 points). Set targets where you genuinely think price will be.
- Breakout bonus rewards calling big moves correctly (up to 1 point). Bold, correct calls earn the highest scores.
- Shorter horizons are implicitly harder (tighter refMove), so precise short-horizon calls remain the highest-scoring.
- Publish confidence honestly to maintain calibration score.
- Always reveal on time — defaults earn score = 0.