Offset nije parametar nego šum — nijedan „najbolji pomeraj“ ne preživi permutacioni test (min p=0.41). Uz to kritičan import bug koji bi ugasio sve generatore na prvom čistom rebuild-u.
Datum: 2026-07-02/03 (računato na dev mašini; test/prod dobijaju samo rezultate) Radna kopija: E:\Work\AI\opencodeTest\crypto_scanner, master (daa1f1f → 5c34be1) Podaci: dev klines_cache.db (55.8 GB, pokrivenost do ~2026-06-11), dev crypto_scanner.db
daa1f1f): fail-hard FLASK_SECRET_KEY, timing-safe poređenja tokena, Postgres kredencijali kroz .env, SESSION_COOKIE_SECURE flag. 412 testova prolazi.68d7be7): svi generatori i analitički alati importovali su module sa putanja koje ne postoje od reorganizacije 2026-06-17. Deployovani kontejneri rade samo zato što drže stare flat fajlove — prvi čist rebuild image-a bi ugasio sve generatore.bollinger_band_pullback_long na 4h je preko 1200d negativan (−21% fixed N=1); njegov dobar majski rezultat bio je artefakt kraćeg prozora. Na 1d TF-u je pozitivan.daa1f1f)| # | Nalaz | Fix |
|---|---|---|
| 1 | FLASK_SECRET_KEY default 'change-me' → falsifikovanje superadmin session cookie-ja | create_app() odbija start bez pravog ključa (u debug-u efemerni ključ + warning); testovi dobijaju ključ u tests/conftest.py |
| 2 | Postgres scanner_user:scanner_pass hardkodovan u docker-compose.yml | ${POSTGRES_USER:-...} / ${POSTGRES_PASSWORD:-...} iz .env; defaulti zadržani zbog kompatibilnosti — rotacija lozinke na serverima je i dalje TODO (traži ALTER USER u živom PG-u, env sam ne menja postojeći volume) |
| 3 | Session cookie bez Secure flaga iza HTTPS-a | SESSION_COOKIE_SECURE env flag (True na .207 iza nginx-a; False na .88 koji je čist HTTP) |
| 4 | Tokeni poređeni sa == (timing napad) | hmac.compare_digest kroz constant_time_equals() na sva 3 mesta |
⚠ PRE SLEDEĆEG DEPLOY-A: u server .env (.88 i .207) mora postojati jak FLASK_SECRET_KEY, inače web kontejner neće startovati. Dev ključ deluje slabo („Lol1…") — rotirati na sve tri mašine. Generisanje: python -c "import secrets; print(secrets.token_hex(32))".
Već postojalo i potvrđeno: gunicorn, CSRFProtect, rate-limit na login/ingest, bcrypt-hešovani API ključevi sa scope-ovima, security headeri, .env van git-a.
68d7be7)26 × signal_generators/*/generator.py + ~35 skripti u tools/** importovali su src.generator_lib, src.generator_profiles, src.feature_store, src.analyzer, src.database… — flat moduli koji od reorganizacije u pakete (2026-06-17) ne postoje. Na čistom checkout-u nijedan generator nije mogao da se učita (ModuleNotFoundError), a svi benchmark driveri su padali na importu. Testovi to nisu uhvatili jer importuju nove putanje direktno i mock-uju loader.
Posledica za servere: kontejneri trenutno rade na zaostalim flat fajlovima iz starih image-a / docker cp zakrpa. Fix je sada u master-u — sledeći deploy je bezbedan.
--reset-state)18/24 finished. Timeout (3h/gen): multi_timeframe_bias, dual_growth_liquidity, dual_growth_liquidity_cancel_test, donchian_volume_breakout, bollinger_volume_expansion, template_python — svi 1h TF (68 simbola × 9 godina × 1h je preskupo za 3h limit) ili šabloni. Njihove brojke tretirati kao nepotpune.
Событija po generatoru (izbor): growth_threshold_cycle 92,190; blacklist_cycle 21,338; dual_growth_trailing_stop 15,557; bollinger_band_pullback_long 11,416; ema_trend_pullback 8,910; quality_cycle 7,602; supertrend_long 6,677; v3 2,034; regime_cycle 1,696. high_conviction_combo, external_trend_confirmed_cycle, combinator_template = 0 (zahtevaju live kombinaciju / eksterne signale — očekivano).
Pun JSON: reports/full_history_benchmark_20260702.json.
Detaljne tabele: slot_portfolio_fixed_20260702.md / slot_portfolio_compound_20260702.md (+ JSON-ovi u reports/). Vrh:
COMPOUND, N=1:
| Generator | TF | Return | MaxDD | Sharpe | Parova |
|---|---|---|---|---|---|
| best_symbols_cycle_v3 | 4h | +1197% | 52.3% | 1.20 | 634 |
| quality_cycle | 4h | +922% | 44.4% | 0.92 | 2106 |
| best_symbols_cycle | 4h | +402% | 54.2% | 0.90 | 1152 |
| ema_cross_10_100 | 4h | +295% | 54.0% | 0.82 | 1612 |
| supertrend_long | 4h | +263% | 56.4% | 0.77 | 1781 |
FIXED, N=1: quality_cycle +351% (dd 39.6%); v3 +329% (dd 61.6%, Sharpe 0.91); ema_cross_10_100_pure +256%; best_symbols +251%; ema_trend_pullback +246%.
Risk-adjusted zvezda: bb_adx_combo_long N=1 fixed +82.4% uz MaxDD 23.6% (Sharpe 1.02) — ubedljivo najmirnija kriva; kandidat za auto-trading sa realnim novcem gde drawdown boli.
Supertrend na N=2: compound +559% (dd 75.8%) — njegov sweet spot je 2 slota; i dalje važi da mu TF sweep favorizuje 1d–1w za per-trade kvalitet.
Revizije / crvene zastavice:
bollinger_band_pullback_long 4h: −21% (fixed N=1), −48% (compound N=1) preko 1200d. Prethodna preporuka (maj: N=1 +37%, dd 5.8%) ne generalizuje — bila je kratak prozor. Na 1d TF-u: +28.6% fixed N=1. Ako ostaje enabled, razmotriti prebacivanje na 1d ili gate po režimu.dual_growth_trailing_stop u slot simulaciji −99.5% — u kontradikciji sa per-trade statistikom (offset sweep: ~+3.0% avg/trade, 25k trejdova). Uzrok je najverovatnije pairing/sizing artefakt (malo sell eventova → kapital zaglavljen u pozicijama koje simulacija tretira kao propale). Ne donositi odluke po ovom broju dok se pairing ne verifikuje.dual_growth_liquidity_cancel_test (1h) top na N=6/8 (fixed +165%, dd 42.7%, Sharpe 1.28) — ali backfill mu je presечен timeout-om → brojka na nepotpunim podacima.Pitanje: ako 4h sveće ne počinju na 00:00 UTC nego pomereno za X = n×5min (0–235 min), menja li se profitabilnost/kvalitet signala? Postoji li „najefikasniji pomeraj"?
Metod: 8 generatora × 48 ofseta × 12 simbola, 2023-01-01 → 2026-06-01, resample sa 5m baze (epoch-anchored, candle_resampler), in-memory backtest, FIFO pairing, fee 0.1%/strani. Runtime state izolovan po ofsetu (bez toga stale state guši ulaske — potvrđen efekat). Svi ofseti, uključujući 0, idu kroz identičan resample+recompute put (nema cache-vs-compute biasa). Statistika: max-statistic permutacioni test (obračunava best-of-48 selekciju), range test, Kruskal-Wallis (permutacioni p), split-half rank stabilnost, cross-generator slaganje. 2000 permutacija, seed 20260702.
Rezultati po generatoru (avg %/trade posle fee):
| Generator | Best ofset | Best avg | Ofset 0 | Raspon | p(best) | p(KW) | Split-half ρ (p) |
|---|---|---|---|---|---|---|---|
| best_symbols_v3 | +165m | 0.499 | 0.020 | 0.509 | 0.89 | 0.95 | 0.03 (0.42) |
| best_symbols_v2 | +165m | 0.318 | −0.063 | 0.562 | 0.80 | 0.21 | 0.23 (0.06) |
| best_symbols | +165m | 0.420 | −0.052 | 0.674 | 0.41 | 0.09 | 0.20 (0.08) |
| bollinger_pullback | +225m | 0.302 | 0.082 | 0.409 | 0.97 | 0.56 | 0.45 (0.002) |
| bb_adx_combo | +170m | 0.702 | 0.133 | 0.660 | 0.95 | 0.28 | 0.47 (0.001) |
| supertrend | +5m | 0.599 | 0.499 | 0.662 | 1.00 | 1.00 | −0.14 (0.82) |
| ema_trend_pullback | +80m | 0.565 | 0.236 | 0.535 | 0.91 | 1.00 | −0.07 (0.68) |
| dual_growth_trailing | +15m | 3.312 | 3.035 | 0.829 | 0.93 | 0.98 | −0.02 (0.57) |
(25k–58k trejdova po generatoru ukupno; ~500–1200 po ofsetu.)
Zaključci:
bollinger_pullback, bb_adx) ima statistički stabilan oblik profila kroz vreme (split-half ρ≈0.45–0.47, p≈0.001) — neki fazni potpis BB mehanike verovatno postoji, ali mu je magnituda premala da preživi selekcioni test, tj. nije upotrebljiv za profit.Podaci: reports/offset_sweep_osw{1..4}.json (sirovi trejdovi), analiza: offset_sweep_analysis.json.
trades šema nema pnl_percent kolonu koju train_meta_score.py očekuje (dev trades istorija ionako nije reprezentativna — prava je na prod PG). Važeća referenca ostaje meta-score v2 iz maja (regime_cycle AUC 0.557). Retrain raditi na prod snapshot-u.TypeError) odn. na mapiranju imena signala — alat je pisan za .88/PG okruženje. Slot analiza je svejedno pokrivena kroz slot_portfolio_compare (N=1..8).--timeout 21600+) ili kraći prozor.Profitabilni generator (pitanje iz zadatka):
growth_threshold_quality_best_symbols_cycle_v3 — compound N=1 +1197% / N=2 +281%, Sharpe 1.0–1.2, najviši Sharpe na skoro svakom N. Preporuka: enable sa slot count 1–2, compound sizing. (Trenutno disabled!)bb_adx_combo_long — za najmirniju krivu: +82% uz dd 23.6% (N=1 fixed). Najbolji kandidat za 3Commas webhook sa pravim parama.growth_threshold_quality_cycle — „radni konj": +351% fixed N=1 uz dd 39.6%, 2106 parova (velika statistička podrška).supertrend_long — drži N=2 (compound +559%); dugoročno razmisliti o 1d TF varijanti.bollinger_band_pullback_long na 4h (negативан na 1200d); ako ostaje, prebaciti na 1d. dual_growth_trailing_stop ne dirati dok se slot-pairing artefakt ne razjasni.Operativno:
FLASK_SECRET_KEY u server .env; rotirati Postgres lozinku (ALTER USER).blacklist_cycle (istorijski −0.23%/trade) — preusmeriti na v3/bb_adx u skladu sa gornjim (produkt odluka).Reprodukcija: tools/analysis/run_offset_sweep.py, analyze_offset_sweep.py, run_full_history_benchmark.py, build_monthly_generator_report.py, slot_portfolio_compare.py — sve pokretano .venv39 Python-om; logovi u database/*.log.
Izvor: crypto_scanner/reports/analysis/2026-07-02/FULL_REPORT_2026-07-02.md