Leveraged Prediction Market Oracle Framework
Outcome’s HIP3 oracle derives a single fair probability by aggregating live prices from multiple
venues, applying quality based weighting, and combining probabilities in log odds space.
| Oracle | Weight | Weight(%) |
|---|
| Polymarket | 6 | 60% |
| Kalshi | 3 | 30% |
| Outcome | 1 | 10% |
These values may vary by contract, and oracle sources can be added, removed, or reweighted over
time.
Price Aggregation Algorithm
The aggregation logic runs in real-time to compute the final index price. It employs a
quality-adjusted weighting mechanism that dynamically penalizes venues with wide spreads or
stale data.
For each venue v, the system calculates the raw probability (pᵥ) based on the best available
order book depth.
pv=2Best Ask+Best Bid
- Clamping: To prevent asymptotic errors in log-space, probabilities are clamped:
0.001≤pv≤0.999
- Fallback: If no order book exists, the system defaults to the
current_prices.yes value from
the market data feed.
Step 2: Quality Scoring
A quality score (Qᵥ) is computed for each venue to determine its trustworthiness for the current
tick.
Qv=Base Trustv×(ϵ+Spreadv1)×Freshnessv
Where:
- Base Trustᵥ: Configurable weight per platform (Default:
1.0).
- Spreadᵥ: Best Ask − Best Bid.
- ε:
0.001 (smoothing constant to prevent division by zero).
- Freshnessᵥ: Binary multiplier based on data age.
1.0 if age < staleness_threshold
0.0 if age ≥ staleness_threshold (venue is treated as dead)
Step 3: Dynamic Weight Normalization
Quality scores are converted into normalized weights (Wᵥ) for the final calculation.
Wv=∑QallQv
Guardrails: The system applies strict bounds to prevent any single venue from manipulating the
price, provided multiple venues are live.
- Cap: Wv≤0.75
- Floor: Wv≥0.25 (if venue is live/fresh)
- Dead Venues: If a venue is stale, Wv=0
- Single Source: If only one venue is live, Wv=1.0
Step 4: Log-Odds Aggregation
To preserve market sentiment accurately, probabilities are converted to Log-Odds space before
averaging. This prevents arithmetic mean bias when averaging raw probabilities near 0 or 1.
1. Convert to Logits
logit(p)=ln(1−pp)
2. Weighted Average & Sigmoid
Final Price=sigmoid(∑(Wv×logit(pv)))
Where:
sigmoid(x)=1+e−x1
Calculation Example
Below is a simulated tick illustrating how dynamic quality scores adjust the final weight of each
venue. Note that Outcome (in this specific example) is excluded from the calculation because the
data age exceeds the staleness threshold.
| Venue | Pv | Spread | Age | Fresh | Quality score calculation | Normalized weight (Wv) |
|---|
| Polymarket | 0.65 | 0.02 | 5s | ✓ | 1 × (1 / 0.021) ≈ 47.6 | 0.67 |
| Outcome | 0.63 | 0.04 | 10s | ✓ | 1 × (1 / 0.041) ≈ 24.3 | 0.33 |
| Kalshi | 0.60 | 0.10 | 120s | ✗ | 0 (stale) | 0.00 |
Final Computation
Final=sigmoid(0.67×logit(0.65)+0.33×logit(0.63))
Final=sigmoid(0.590)≈0.643
Configuration Parameters
| Parameter | Default | Description |
|---|
| Base Trust | 1.0 | The starting trust weight for a venue before spread adjustments. |
| Staleness Threshold | 60s | The maximum data age allowed before a venue is discarded. |
| ε (Epsilon) | 0.001 | A small constant added to the spread to prevent division by zero. |
| Max Weight | 0.75 | The maximum influence a single venue can have (when >1 live). |
| Min Weight | 0.25 | The minimum influence a live venue will retain. |