Proxy je validan i konzervativan: 85% trejdova unutar ±0.5%, bias +0.25% ide u sigurnom smeru.
Validacija da li je crypto_symbol_snapshots.current_usdt_price (5-min sample) dovoljno dobar proxy za kline-derived MFE (max(high)) korišćen u slot_portfolio_counterfactual.py. Threshold koji smo postavili u handoff-u: ±0.5% mean abs diff za "proxy validan".
Tool: tools/analysis/snapshot_vs_kline_mfe.py (novi).
Klines cache izgrađen u database/klines_cache.db za 22 simbola (regime_cycle union qcv2), interval 4h, prozor 2026-01-01 → 2026-05-08.
| Generator | Trades | Compared | mean diff | median diff | abs_p50 | abs_p75 | abs_p95 | within ±0.5% | within ±1.0% | kline≥snap |
|---|---|---|---|---|---|---|---|---|---|---|
| growth_threshold_regime_cycle | 54 | 32 | +0.253 | +0.207 | 0.290 | 0.438 | 1.050 | 78.1% | 93.8% | 87.5% |
| growth_threshold_quality_cycle_v2 | 138 | 66 | +0.265 | +0.196 | 0.202 | 0.425 | 0.866 | 84.8% | 97.0% | 89.4% |
Diff = kline_MFE − snap_MFE u procentnim poenima MFE-a. Pozitivno znači da kline OHLC pokazuje VEĆI MFE od snapshot proxy-ja.
high ima kontinualan range.n_kline ≤ 7 (kratki hold). Naša SQL klauzula je open_time >= entry_ms, pa candle koji sadrži entry biva isključen ako entry pada usred njega. Snapshot ne pati od ovog jer sample-uje svakih 5 min. Za long hold-ove (PAXGUSDT, SUI) ovo je zanemarljivo; za short hold-ove može da unese ±1% na pojedinacnom trade-u.kline_only — entry pre 2026-02-25 kad snapshot range pocinje. Te trade-ove je counterfactual prijavio kao no_cov i ostavio nepromenjene. Sada imamo kline coverage pa bi pun kline-based counterfactual nasao dodatne lockable trade-ove.COUNTERFACTUAL_VALIDATION_2026-05-09.md su pouzdani. Ne treba ih revertovati, samo zapamti da su konzervativni.slot_portfolio_counterfactual.py da kao izvor MFE-a koristi klines (ili dodaj --source klines flag) — vec ima _max_price_in_window helpr koji se moze zameniti _query_excursion-om iz build_trade_excursions.pycd crypto_scanner
.venv39/Scripts/python.exe tools/history_cache/build_klines_cache.py \
--interval 4h \
--symbols "AAVEUSDT,ADAUSDT,APTUSDT,AVAXUSDT,BNBUSDT,DOGEUSDT,ETHUSDT,FILUSDT,LINKUSDT,LTCUSDT,NEARUSDT,SOLUSDT,SUIUSDT,TAOUSDT,WLDUSDT,XRPUSDT,ZECUSDT,ENAUSDT,PAXGUSDT,PENDLEUSDT,TRXUSDT,XLMUSDT" \
--start 2026-01-01T00:00:00 --end 2026-05-09T00:00:00
.venv39/Scripts/python.exe -m tools.analysis.snapshot_vs_kline_mfe \
--generator growth_threshold_regime_cycle --interval 4h --show-rows 10
.venv39/Scripts/python.exe -m tools.analysis.snapshot_vs_kline_mfe \
--generator growth_threshold_quality_cycle_v2 --interval 4h --show-rows 10build_klines_cache.py inserted_rows ispis koristi conn.total_changes kumulativno; broj je netačan (npr. 85M za 13K stvarnih redova) ali podaci su tačni. Niskoprioritetni cosmetic fix._query_excursion u build_trade_excursions.py koristi open_time >= entry_ms (excludes candle koji sadrzi entry). Konzervativno — za 4h trade-ove sa malo candles to mozda ispada (vidi outlier-e LTC/FIL/SUI). Ako se uvodi proper intra-candle MFE, treba load-ovati candle koji sadrzi entry i clamp-ovati pocetak. Niskoprioritetni follow-up.Izvor: crypto_scanner/reports/analysis/2026-05-09_snapshot_proxy_validation.md