HOW IT WORKS
Live forecast record
Original live issues, verified direction and close-range outcomes, and a fixed paper policy after costs.
Last reviewed November 2026
What is recorded
Open Live record from the terminal header. /terminal/performance reads the authenticated /api/forecast/performance endpoint. Market, 1h/4h/24h horizon and 7/30/90/365-day filters select one model version; old models are never pooled into the active record. Lite access covers BTC and ETH, with BTC as the default. The view refreshes every minute while visible and on return to the tab, and labels its last successful update. Requests time out after 15 seconds and never overlap for one selection. Failed refreshes retain the last report and its original timestamp; heartbeat health continues aging. Refresh indicates pending work. Export shown rows downloads only the latest visible rows as CSV, including original issue times, model/policy identity, outcomes and costs; absent evidence stays empty. Authenticated report reads share a per-process 15-second cache with identical in-flight work coalesced, at most two report subprocesses active, and at most 20 valid requests per account per minute. HTTP responses stay private and no-store; caches are partitioned by model, ledger path and all filters, and plan scope is checked before report access. Unavailable data is shown as unavailable.
Before the live API publishes a newly computed joint result, engine.forecast_tracking commits its full original bundle, model/runtime fingerprint, server issue time, input cutoff, content hash, and fixed paper-policy version to a separate SQLite ledger. Duplicate model/cutoff requests return the first issue without changing its date or values. Changed forecasts with the same identity are rejected. Old snapshots and research evaluations cannot be imported: first issuance must occur within the current or previous completed five-minute input cycle.
The continuous worker issues one qualified all-market forecast each completed five-minute cycle even without browser traffic, using the existing qualification and inference code. The API can serve that original issue. It separately retries scoring after expiry, including after restarts. Run the worker on persistent storage; a web request alone cannot guarantee continuous issuance or scoring. Worker heartbeat failures, missing input cycles, pending outcomes and mature outcomes awaiting evidence are visible. No forecasts are reconstructed for downtime.
Forecast scores
Each native horizon ends at inputClosedThroughMs + horizon hours. After a five-second maturity buffer, the scorer fetches exactly the Binance USD-M one-minute trade-price candle ending at that boundary. It checks open/close timestamps and valid OHLC. There is no nearest-candle substitution or forming-bar scoring. The response, receipt time, source and hash are retained, and completed scores are immutable. Source corrections do not silently rewrite earlier scores.
Direction compares the sign of the original median move with the sign of (actual close / original anchor − 1). The headline includes all outcomes, with exact zero treated as flat. A separate count and accuracy describe forecasts whose up-probability is strictly outside 40–60%; this filter never changes the headline denominator. Close-range coverage tests p10 ≤ actual move ≤ p90 at the endpoint; the target is 80%, not 80% directional accuracy or coverage of every intrahour high and low.
Price MAE is mean absolute median-minus-actual move in basis points, shown beside the same-outcome no-change baseline. Range width is p90−p10. The 80% interval score is width + 10×max(p10−actual,0) + 10×max(actual−p90,0), in basis points, so widening a band is penalized. Brier score is mean (probabilityUp − indicator(actual move > 0))². Lower MAE, Brier and interval score are better.
Five-minute forecasts overlap, and assets are correlated. The view reports scored UTC days and unique input cycles; raw outcome count is not independent sample size. One-hour direction intervals use 2,000 fixed-seed bootstrap resamples of complete UTC-day blocks, retaining all markets within each block. At least 20 scored days are required. Longer-horizon intervals are withheld because their outcomes cross day boundaries. These are descriptive intervals, with no correction for research selection or guarantee of future skill. Four-hour and 24-hour forecasts remain exploratory.
Paper trading after costs
hourly-median-hold-v1 uses only forecasts whose input cutoff is exactly on a UTC hour. Each market takes one unlevered position in the sign of the original one-hour median, with no confidence filter. A zero median is skipped. Entry is the open of the first full minute strictly after actual issue; exit is the exact one-hour forecast endpoint close. This avoids using a pre-issue anchor as an executable fill and prevents overlapping positions within a market. It has no target or stop and is separate from the chart's changing Trade decision plan.
Fixed assumptions are five basis points of fee per side and one basis point of adverse slippage per side. Let s be +1 long or −1 short. Entry fill = entry reference × (1+s×0.0001); exit fill = exit reference × (1−s×0.0001). Gross return before costs = s×(exit reference/entry reference−1). Slipped return uses the two fill prices. Fees on entry-notional basis = 0.0005×(1+exit fill/entry fill). Signed funding cost sums s×observed rate×settlement mark price/entry fill for settlement times strictly after entry and through exit inclusive. Net return subtracts fees and funding from slipped return. Positive funding cost is a debit; negative funding cost is a credit.
Paper scoring waits two minutes after the endpoint to fetch funding history. Exact entry/exit candles and the funding response are retained separately. An empty successful funding-history response means no reported event in the interval; failed or malformed requests leave the trade awaiting evidence. Late source revisions are not retroactively incorporated. Assumptions and policy identity are frozen with each issue; changes need a new policy version.
The report shows average gross, costs and net per trade, net win rate, profit factor, and each market's compounded observed hourly-trade return and maximum drawdown. Profit factor is positive net returns / absolute negative net returns and is unavailable when there are no losses. Missing trades are excluded and counted explicitly. There is no pooled compounded portfolio return. These are simulated observations, not verified broker fills, account PnL, validated stop/target success, or evidence that leverage is safe. Spread/impact beyond assumed slippage, latency, margin and liquidation are not modeled.
Research tooling, not trading advice — see the terms and privacy policy. Questions or corrections: [email protected].