{"success":true,"methodology":{"version":2,"instrument_scope":"Instruments in the analysis universe on the day the call was made. Coverage follows what users watch, so the universe changes over time and the sample is not a fixed basket.","what_is_scored":{"unit":"One directional call per instrument per trading day.","call_taken_from":"The final snapshot before the close — the last read published while the outcome was still unknown.","recorded_when":"Before the outcome is known. The call is written at prediction time and scored the following day by a separate job; nothing is scored by the process that made the call."},"how_direction_is_decided":{"rule":"Compare the session open to the session close. A move of less than 0.05% in either direction is treated as FLAT; otherwise the direction is the sign of the move.","flat_threshold_pct":0.05,"prices_from":"Financial Modeling Prep daily bar (open and close) for the session date, fetched under the same instrument mapping the chart uses (GOLD → GCUSD, S&P 500 → ^GSPC, OIL → CLUSD).","when_scored":"Instruments whose session ends at the US close (equity, fixed_income, global_equities, index, international_equity) are scored the same evening. Forex, crypto and commodities trade on past it, so their day is scored on the next run once the daily bar has rolled. A day whose bar is unavailable is retried for 10 days, then left unscored — never filled from a later quote."},"how_correctness_is_decided":{"rule":"A call is correct when the resolved direction matches it.","flat_days":"On a flat day the stored record is marked correct — a call cannot be wrong on a day the market did not move. THOSE ROWS ARE THEN EXCLUDED from every published rate, so the headline figure is computed only over days that actually resolved.","consequence_for_third_parties":"Recomputing a hit rate from the raw ledger WITHOUT excluding flat rows produces a HIGHER number than we publish. The published figure is the stricter of the two."},"how_the_rate_is_computed":{"formula":"correct calls ÷ resolved calls, over a rolling window.","excluded":["Flat days (no resolved direction).","Days with no open or close price available.","Instruments with no call that day."],"default_window_days":30,"min_reportable_sample":30,"sample_always_shown":true},"baselines":{"computed_over":"The same resolved rows as the published rate.","definitions":{"always_up_accuracy":"Share of resolved days that closed up. What a constant 'bullish' call would have scored over the same rows.","majority_accuracy":"The better of always-up and always-down over the same rows — the best constant call in hindsight.","excess_accuracy_pp":"Published accuracy minus majority accuracy, in percentage points. Negative means the calls did worse than a constant.","persistence_accuracy":"Share of resolved days whose direction matched the previous resolved day for the same instrument — the cheapest model.","brier":"Mean squared error of the served bullish probability against the outcome (1 = up, 0 = down). 0 is perfect, 0.25 is a coin.","brier_skill_score":"1 − Brier ÷ Brier of the base-rate forecast (a constant probability equal to the up rate). Above 0 beats the base rate; flagged unreportable below 30 probability-bearing rows.","by_call":"Sample and hit rate per predicted class, so a rate carried by one class cannot hide the other."},"min_skill_sample":30,"how_to_read":"Quote the excess over the majority class and the Brier skill score, not the raw hit rate. A positive hit rate with negative excess accuracy is a model that underperforms a constant."},"integrity":{"append_only":"Ledger rows are append-only. A database trigger refuses UPDATE and DELETE on any chained row.","hash_chained":"Each row carries the hash of the row before it, so altering a scored outcome breaks every hash after it. This does not prevent a rewrite by someone with database access — it makes one detectable.","corrections":"Corrections are appended as new rows naming the row they supersede. The original claim and the correction both remain; every published figure counts the correction and not the row it replaced.","legacy_rows":"Rows scored before September 2026 came from a quote taken at 16:15 ET under the instrument's internal name rather than the session's daily bar under the chart's mapping, and many read as flat with open equal to close. They predate the hash chain and are corrected by appended rows scored from the daily bar; the originals remain visible in the raw ledger.","provenance":"Rows record which model answered, a hash of the prompt template, and the build that produced them. Rows written before provenance recording began carry none and are labelled as predating it rather than as unknown."},"known_limitations":["Direction only. The scoring says nothing about magnitude, timing within the session, or whether a position would have been tradeable at the quoted prices.","Open-to-close. It does not model slippage, spread, financing or any execution cost, so it is not a strategy return.","Survivorship. The instrument universe changes as coverage follows demand; a symbol dropped from coverage stops contributing rather than being scored as a loss.","Single daily resolution. Intraday reversals that recovered by the close are not visible in this measure."],"not_advice":"Educational information only. Not investment advice. Past directional accuracy does not predict future results."}}