Непрерывная оптимизация торговых стратегий #500
Open
opened 2026-07-21 15:39:52 +00:00 by andrei
·
15 comments
No Branch/Tag specified
master
fix/grid-normal-local-stop-cap-20260805
fix/frontend-audit-20260805
fix/frontend-live-advisories-20260805
agent/devops/pix-14540-technical-bucket-cleanup-20260803
agent/devops/pix-14540-delete-stale-technical-stats
agent/devops/pix-14540-technical-only-cleanup
agent/devops/pix-14540-drop-technical-strategy-stats
agent/devops/pix-14540-owner-first-strategy-stats-20260803
fix/grid-trend-aligned-local-stop-cap-20260803
fix/grid-local-stop-observed-transition-20260803
agent/devops/pix-14540-stale-strategy-stats-20260803
agent/devops/pix-14540-grid-performance-identity
fix/grid-local-stop-directional-rearm-20260802T220147Z
agent/devops/pix-14540-bounded-local-stop
agent/devops/pix-14540-local-stop-trend-aligned
agent/devops/pix-14540-grid-weak-side-fee-floor
agent/devops/pix-14540-grid-range-override-fee-floor
fix/radar-max-z-quality
agent/devops/pix-14540-performance-guard-created-at
agent/devops/pix-14540-grid-fee-floor-calibration
agent/devops/pix-14540-repair-env-bootstrap
agent/devops/pix-15357-aggregate-fee-parity
agent/devops/pix-14540-owner-lineage-v2
agent/devops/pix-14540-owner-lineage
fix/stale-expanded-position-ghost
agent/cto/pix-15285-safe-liveness-v2
agent/devops/pix-15282-owner-attribution
agent/cto/pix-15285-rootcause-safe-liveness
agent/cto/pix-15285-grid-liveness-review
agent/cto/pix-15285-grid-liveness
pix-14540-closed-pnl-attribution-repair
pix-14540-closed-pnl-owner-lineage
fix-db-bybit-closed-pnl-lineage-parity-20260801
agent/devops/pix-14540-aggregate-fee-netting-fix
agent/devops/pix-14540-stale-disappeared-close-fix
fix/pix-14540-owner-first-history
agent/devops/pix-14540-db-bybit-closed-pnl-parity
agent/devops/pix-14540-competing-fee-parity
agent/devops/pix-14540-exact-close-fee-v2
agent/devops/pix-14540-exact-close-fee
fix/grid-rebaseline-epoch-save
fix/pix-15200-prod-parity-audit
fix/pix-15198-reverse-parity
agent/devops/pix-15057-lineage
agent/devops/pix-15057-master-lineage
fix/bybit-classification-nplus1-20260801
fix/grid-test-close-awaitable-20260801
fix/kairos-stale-pending-recovery-20260801
pix-15165-grid-drawdown-rebaseline-clean
fix/pix-15057-live-reverse-parity-classification
fix/pix-15074-bybit-pagination-fail-closed
fix/pix-15059-reverse-parity-lineage-v2
fix/pix-15059-reverse-parity-lineage
agent/devops/pix-15047-arnold-lineage
fix/grid-local-stop-safe-skip-corrected-20260725
fix/local-stop-safe-skip-mask-c1d35cb6
fix/grid-local-stop-safe-skip-pix14540
fix/grid-avax-tail-loss-pix14540
fix/grid-local-stop-safe-skip-20260725
fix/grid-expansion-cancel-reason-20260725
fix/grid-failed-budget-reallocation-20260725
fix/grid-regime-gate-continuous-trading
agent/devops/pix-14540-brace-expansion-audit
agent/devops/pix-14540-grid-fee-precision
fix/radar-definitive-reject-capacity
agent/devops/pix-14940
agent/devops/pix-14937
fix/pix-14915-radar-profit-attribution-current
fix/500-release-recorded-ghost
agent/fullstack/pix-14868-exchange-sltp-lineage
feature/pix-14675-radar-external-profit-attribution-v2
fix/fee-reconciler-match-metrics
fix/pix-14540-manual-trade-fee
fix/pix-14782-orphan-protection-remediation
agent/fullstack/pix-14773-stale-protection
feature/claude-manual-close-owner-attribution
feature/claude-radar-owner-close-metadata
pix-14626-grid-reporter-audit-metadata
feature/claude-position-reconciler-futures-race
feature/claude-grid-exit-metadata
feature/claude-grid-countertrend-churn
feature/claude-validator-pm2-home
fix/500-pytest-prod-db-isolation
feature/claude-radar-position-owner
feature/claude-502-asyncpg-lock-cast
feature/claude-502-trade-dedupe
fix/radar-owner-id-correction-pix-14519
fix/radar-owner-id-correction
fix/radar-attribution-tenant-isolation
fix/post-deploy-validate-env-pix-14506
fix/owner-first-attribution-parity-pix-14503
fix/grid-local-stop-followup
fix/grid-local-loss-control
fix/deploy-auth-smoke-window
fix/radar-signal-bootstrap
fix/radar-signal-quality
fix/radar-continuous
feature/claude-risk-pnl-truth
codex/counter-trend-attribution
codex/profit-performance-weights
fix/claude-daemon-audit-infra
feature/claude-fix-grid-fill-label-test
devops/pix-10560-data-perms-cron
codex/arnold-sentry-killswitch-dataerror
codex/dashboard-live-blocked-status
codex/strategy-env-key-toggle
audit-fix-all-20260517
fix/performance-report-max-drawdown-cap-iter102-20260510
fix/analytics-performance-max-drawdown-underwater-iter101-20260510
fix/dashboard-build-stats-zero-portfolio-value-iter100-20260510
fix/live-dashboard-daily-loss-drawdown-zero-equity-iter99-20260510
fix/dashboard-daily-loss-drawdown-zero-equity-iter98-20260510
fix/live-dashboard-pybit-timeout-followup-iter97-20260510
fix/live-dashboard-zero-equity-no-phantom-iter97-20260510
fix/analytics-strategy-stats-null-safety-iter96-20260510
fix/futures-engine-orphan-close-price-iter95-20260510
fix/futures-engine-close-price-uses-mark-iter94-20260510
fix/daily-loss-kill-same-day-zero-equity-iter93-20260510
fix/daily-loss-kill-zero-equity-no-poison-iter92-20260510
fix/format-pnl-minus-before-dollar-iter91-20260510
fix/pnl-badge-sign-coherence-iter90-20260510
fix/analytics-real-pnl-adj-zero-real-pnl-iter89-20260510
fix/analytics-adj-ratio-zero-real-pnl-iter88-20260510
fix/ai-gate-pybit-timeout-followup-20260510
fix/ai-gate-corrupt-state-bypasses-fail-closed-20260510
fix/strategy-config-preset-updates-baselines-20260510
fix/grid-qty-float-drift-bump-20260510
fix/analytics-adj-ratio-magnitude-cap-20260509
fix/spot-derived-null-ticker-20260509
fix/rebalance-sharpe-coherence-20260509
feature/iter55-per-user-real-pnl-baseline
feature/iter54-ai-gate-confidence-fraction-rescale
feature/iter53-sharpe-trades-per-day-annualization
feature/iter52-derived-position-pnl-24h
feature/iter51-batch-block-and-known-ops
feature/iter50-grid-log-state-cap
feature/iter49-position-sizer-balance-cache-cap
feature/iter48-bybit-tick-cache-cap
feature/iter47-bybit-ticker-cache-eviction
feature/iter46-dashboard-cache-hard-cap
feature/iter45-analytics-caps-enforced
feature/iter44-win-rate-monitor-caps
feature/iter43-user-states-cap
feature/iter42-paper-gates-cap
feature/iter41-funding-rate-cooldowns-cap
feature/iter40-onchain-cooldowns-cap
feature/iter39-autopilot-cache-eviction-v2
feature/iter39-autopilot-cache-eviction
feature/iter38-cache-eviction-cross-file-invariant
feature/iter37-audit-warning-cross-file-invariant
feature/iter36-futures-audit-warning-invariant
feature/iter35-futures-missing-key-warning
feature/iter34-trade-spot-preflight-warning
feature/iter33-futures-preflight-warning
feature/iter32-live-dashboard-preflight-warning
feature/iter31-oi-cache-cap
feature/iter30-dex-screener-cache-eviction
feature/iter29-grid-instrument-cache-eviction
feature/iter28-ai-signal-alert-state-warning
feature/iter27-strategy-blocked-audit-warning
feature/iter26-spot-instruments-cache-eviction
feature/iter25-share-card-cache-eviction
feature/iter24-ai-agents-cache-eviction
feature/iter23-bug-hunt
fix/pass171-notifications-blocked-signal-toctou-lock
fix/pass150-signal-copier-setnx-funding-tenant
fix/pass122-retention-clamp-twap-phantom-billing-period
fix/pass111-tg-tv-body-cap-killswitch-throttle-monotonic
archive/feature-claude-cl542-partial-close-side-fix-20260424
archive/feature-cl552-grid-ai-adjustments-20260424
v3.0
Labels
Clear labels
No items
No labels
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
europa-tech-srl/arnold-trader-app#500
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Постоянный verified цикл для всех Arnold стратегий: live PnL 24ч/7д/30д, причинная атрибуция входов/выходов, recent-vs-full cohort, исправление loss asymmetry и режимных ошибок через тесты/PR/CI/deploy. Запрещено лечить убытки дневными stop-limit, паузой, auto-paper или отключением стратегии. При недостаточной выборке — наблюдение без изменения торговли; при доказанном дефекте — кодовый фикс и production verification.
Стартовый live baseline (2026-07-21):
Первый цикл:
Автономный review запущен каждые 6 часов; каждый доказанный дефект проходит issue → tests → PR → CI → deploy → live verification.
Цикл 2026-07-21 22:03–22:39 UTC завершён.
Выбран один доказанный дефект: Radar owner identity/tenant attribution. До фикса Radar сохранял внутренний user_id там, где reconciliation сравнивал owner Telegram ID; результат — валидный Radar-вход мог стать
syncer_imported, а последующее exchange SL/TP-закрытие теряло экономического владельца. Исправление: owner identity мапится до attribution, чужие owner-записи и malformed timestamp/qty отклоняются.Доставка:
fabd1e5e, merge/release454c1941.post-deploy-validate.sh—=== ALL CHECKS PASSED ===.454c1941, три Arnold PM2-процесса online под europatech, 18/18 daemon threads alive, repo clean.Live PnL (real,
pnl IS NOT NULL, genericexchange_sl_tp_close/syncer_imported/futures_monitorисключены из strategy ranking; net = pnl-fees):Recent cohort после production logic fix
454c1941: закрытий пока 0 — PF/WR ещё не определены. Exchange truth: 3 позиции и 4 защитных/лимитных ордера; UBUSDT short остаётся в DB какsyncer_imported, exchange position защищена reduce-only ордером. Исторического Radar order/audit evidence для безопасного backfill этой уже открытой позиции нет, поэтому ownership не переписан наугад. Она продолжает корректно блокировать новые расширяющие входы как unmanaged; стратегии/бюджеты/paper/live не менялись.Условие следующего фикса: минимум 20 новых закрытий после
454c1941для Grid по активным символам либо минимум 10 новых Radar DOWN-закрытий, с owner-attributed entry/exit и market-regime metadata; затем проверка retained frequency и out-of-sample PF. До этого следующий logic tuning будет hindsight-only.Цикл 2026-07-22 10:07–10:18 UTC завершён.
Выбран один доказанный дефект: counter-trend close Grid оставлял на бирже same-side exposure-adding grid orders. Production evidence по SOLUSDT: при bullish regime short grid order исполнялся, затем reduce-only counter-trend close срабатывал через секунды; следующий оставшийся sell-limit снова открывал short. Это создавало причинно подтверждённый churn и fee/loss drag без улучшения сигнала. Исправление не вводит дневной лимит, паузу, auto-paper, нулевой budget или trade-count cap: перед market-close отменяются только grid-owned same-side expanding orders; reduce-only closers и чужие/ручные ордера сохраняются; при ошибке отмены close fail-closed и аудитируется.
Атрибуция и live PnL (real, net=pnl-fee; 9 исторических exchange_sl_tp_close связаны по symbol/side/qty/order lifecycle с grid_bidir_aggressive; 301 legacy futures_monitor оставлены отдельным unattributed_legacy bucket и не засчитаны стратегией):
Доставка и verification:
bf7a1ba5, merge/releaseef5ab92c. PR CI: backend/frontend/secret-scan/smoke success; full backend 7403 passed, 7 skipped; targeted production regression повторно 3/3 passed.ef5ab92c; canonical post-deploy validator: ALL CHECKS PASSED; repo clean.Новый recent cohort начинается с production runtime
ef5ab92c, 2026-07-22 10:15:32 UTC: закрытий пока 0. Следующее условие для logic fix: минимум 20 новых owner-attributed Grid закрытий послеef5ab92cи не менее 10 наблюдаемых counter-trend close opportunities; для каждого должно быть подтверждено отсутствие same-side grid expander после close и сохранение обычной fill frequency. Для Radar — минимум 10 новых DOWN закрытий. До выполнения порога следующий tuning AVAX/DOGE будет hindsight-only.Квалификация (триаж 2026-07-22): это standing operating-loop, а не разовая задача — живёт в Hermes CEO-heartbeat (цикл «непрерывное улучшение стратегий» активен, см. его сессии 2026-07-21/22: radar isolation, PR #509/#510/#516/#519 и далее). Issue остаётся открытым как якорь мандата; в «разгребание бэклога» не входит по определению.
Цикл оптимизации 2026-07-22 15:00 UTC — наблюдение, без нового tuning-патча
GitNexus:
arnold-trader-app, запрос по PnL attribution /exchange_sl_tp_close/syncer_imported; индекс указал наfutures_position_sync_daemon.py,position_syncer.py,futures_engine.py. Live source на production HEAD09a94b2fиспользован как источник истины.Live PnL, закрытые реальные сделки (
pnl - fee= net)Крупнейшие symbol cohorts: 7д grid — XRP
n=43, PF=0.291, net=-10.3899, DOGEn=47, PF=0.487, net=-4.2384, AVAXn=71, PF=0.620, net=-3.9759, SOLn=58, PF=3.158, net=+1.4267. 30д grid: AVAXn=284, net=-40.6955, DOGEn=184, -19.4566, XRPn=187, -18.9855, SOLn=329, -4.7765.Recent cohort после последних релевантных fixes
bf7a1ba5(2026-07-22 09:30 UTC): всего 5 закрытий — DOGEn=2, WR=100%, net=+0.0276; SOLn=3, WR=66.7%, PF=0.620, net=-0.0523. Этого недостаточно, чтобы отделить эффект отмены counter-trend expanders от шума.c94cc604(2026-07-22 02:24 UTC): 2 закрытия — BILL-3.2910, ESPORTS-3.3167; обе loss, ноn=2недостаточно для изменения фильтра/entry без hindsight.trending_up, BTC ADX 4h ≈41.6; live grid сохраняет частоту через controlled hedge recovery, XRP fresh grid корректно блокируется bullish regime gate.Атрибуция и exchange truth
43063a83нет ни одного нового закрытия безorigin_strategy; 9 unresolved записей 7д относятся к более раннему периоду.exchange_sl_tp_close/futures_monitorне использованы как самостоятельные стратегии.grid_bidir_aggressive, SOL long —grid_bidir_aggressive, ERA short —radar_live.Решение цикла
Новый код не менялся: за последние часы уже развёрнуты отдельные fixes локального stop/recovery, counter-trend cancel, Radar ownership и live trade dedup; post-fix cohort слишком мал для ещё одного причинно доказанного изменения. Следующий patch допустим при одном из условий: (1) не менее 30 post-fix закрытий Grid с минимум 5 loss exits и повторяемой symbol+side/regime концентрацией; либо (2) не менее 20 post-fix Radar DOWN закрытий с сохранённой частотой сигналов и подтверждённым ex-ante признаком, разделяющим stop cohort и winners; либо (3) раньше — повторный tail loss с тем же
manual_action/order path, воспроизводимый по коду и exchange execution timeline.Автономный цикл оптимизации — 2026-07-22 21:04 UTC
Решение цикла: торговую логику не меняю: после последних релевантных фиксов cohort пока недостаточен, а случайная подгонка сейчас опаснее сохранения текущей логики.
Live PnL (закрытые сделки, gross PnL / fees отдельно)
n=17, WR64.7%, GP+1.6394, GL-2.5527, PF0.642, avg/median win+0.1490/+0.0287, avg/median loss-0.4255/-0.5631, fees0.1000, net-1.0133. По символам: SOLn=11, PF2.041, net+0.7176; AVAXn=3, PF0.019, net-1.1978; DOGEn=3, PF0.056, net-0.5331. Radarn=4, WR0%, GL-12.4898, fees0.2282, net-12.7180(ESPORTS/BILL/MORPHO/LAB — по одному native-stop close).n=224, WR88.8%, GP+17.2412, GL-33.0429, PF0.522, avg/median win+0.0866/+0.0427, avg/median loss-1.3217/-0.2492, fees1.4146, net-17.2162. Символы: SOL PF2.772, net+2.2184; AVAX PF0.583, net-4.5414; DOGE PF0.487, net-4.2384; XRP PF0.271, net-10.6548. Radarn=18, WR11.1%, GP+37.4314, GL-59.4136, PF0.630, avg/median loss-3.7134/-3.2973, fees0.2282, net-22.2104.n=999, WR90.9%, GP+101.9102, GL-181.2898, PF0.562, fees6.6737, net-86.0533; Grid conservativen=13, WR84.6%, PF12.942, fees0.2590, net+2.7420. Старыеfutures_monitor n=293и generic closes не считаю самостоятельными стратегиями: они относятся к историческому периоду до owner-first attribution.Recent cohorts после logic fixes
bf7a1ba5(counter-trend churn, 2026-07-22 09:28 UTC):n=13, WR76.9%, GP+1.6162, GL-1.3350, PF1.211, fees0.0947, net+0.1865. Новый дефект по этому cohort не доказан.6583df1c(фильтр конфликтующих входов, 2026-07-21 14:17 UTC): 5 live terminal events, все stops; вtradesуже 4 закрытия (net -12.7180), один исторический UBUSDT stop остался только в live-журнале и отсутствует вtrades(событие было до последних owner/reconciliation fixes); его не смешиваю с post-attribution cohort. Из 5 exact(alert_ts,symbol)paper-пар только 1 уже прошла 24ч evaluation (-2%), 4 pending.n=78evaluated, WR28.2%, GP+283.789%, GL-112.000%, PF2.534, avg/median win+12.900%/+10.696%, avg/median loss-2%/-2%, net+171.789%; ещё 16 записей не evaluated. Это подтверждает fat-tail профиль и запрещает делать вывод по пяти подряд стопам. Retained live frequency сохраняется: около5 terminal/dayпосле фильтра.Атрибуция и production truth
radar_live;close_strategy=exchange_sl_tp_closeостаётся только exit metadata. Grid risk closes сохраняютorigin_strategy=grid_bidir_aggressiveиmanual_action.exchange_sl_tp_closeбез origin и 293futures_monitorне включены как стратегии в решение цикла.HEAD=e3783137,/api/healthOK/DB OK, API/daemons/Telegram PM2 online. Exchange: equity около$151.80, открыты Radar ERA short и Grid SOL long; 11 активных ордеров, торговля не остановлена. Репозиторий чист.Точное условие следующего logic fix
<1либо статистически устойчивую live/paper divergence; не применять daily stop/cooldown.bf7a1ba5и минимум 5 tail/risk exits сmanual_action, затем повторить symbol+regime attribution. Текущиеn=13, PF1.211не дают основания для нового патча.Автономный цикл оптимизации — 2026-07-23 03:13 UTC
Решение цикла: новый tuning-патч не выпускаю: post-fix cohort ещё ниже заранее установленного порога, а два новых локальных Grid stop являются ожидаемым bounded-risk поведением, а не доказанным дефектом. Стратегии, budget, paper/live и защитные ордера не менялись.
GitNexus: repo
arnold-trader-app, запросы по PnL attribution /exchange_sl_tp_close/ local stop path. Индекс совпадает с production HEADc2ad11d5; live source, PostgreSQL, PM2 и Bybit использованы как источник истины.Live PnL, закрытые реальные сделки
net = pnl - fee_usd; WR/PF рассчитаны по gross PnL. 9 историческихexchange_sl_tp_closeсвязаны ранее подтверждённым order lifecycle сgrid_bidir_aggressive; они маппятся в Grid, а не считаются стратегией. Legacyfutures_monitorисключён из ranking. После owner-first attribution fix43063a83новых generic-close строк нет (exchange_sl_tp_close=0,syncer_imported=0,futures_monitor=0).Symbol cohorts:
n=13, PF=.587, net=-1.2059; AVAXn=3, PF=.019, net=-1.1978; DOGEn=3, PF=.056, net=-.5331.-3.2910, MORPHO-3.0978, LAB-3.0125.n=45, PF=.265, net=-11.0084; AVAXn=73, PF=.453, net=-7.2420; DOGEn=51, PF=.460, net=-4.7530; SOLn=65, PF=1.209, net=+.3442.n=286, PF=.492, net=-43.9616; DOGEn=188, PF=.463, net=-19.9713; XRPn=190, PF=.502, net=-19.3391; SOLn=339, PF=.875, net=-5.8529; HYPEn=6, PF=.067, net=-1.5571; ETHn=1, net=-.7932.n=10, PF=25.512, net=+2.1113; BTCn=3, PF=5.582, net=+.6307.Recent cohorts после последних logic fixes
bf7a1ba5(counter-trend expander cancel, 2026-07-22 09:30 UTC; 17.7ч):n=15, WR66.7%, GP+1.6162, GL-3.2586, PF0.496, fees0.0947, net-1.7371. По символам: SOLn=12, PF=.588, net=-1.1991; AVAXn=1, net=-.5655; DOGEn=2, net=+.0276.-$0.577при лимите$0.544и trigger-$1.416при лимите$1.356; observed regimes bullish/neutral. Exchange closes дали-$0.689и-$1.770с учётом движения до исполнения. Код корректно применил0.5% × position notional, записалmanual_action, отменил same-side resting entries и установил re-entry latch. Это ожидаемый per-trade risk exit; двух событий недостаточно для изменения signal/sizing без hindsight.bf7a1ba5наблюдались только 3 successful counter-trend closes против требуемых 10 opportunities; нет достаточной выборки для оценки retained frequency/churn regression.6583df1c(2026-07-21 14:17 UTC; 36.9ч): в DBn=4, все native-stop loss, net-12.7179; это ниже порога 20 terminal trades и 72ч. Fat-tail paper cohort из прошлого цикла остаётся против слепого фильтра по четырём подряд stop.Production truth
HEAD=origin/master=health.version c2ad11d5, checkout clean.post-deploy-validate.sh:ALL CHECKS PASSED; API/DB/dependencies/grid stop-state healthy,is_stopped=false.europatech; daemon health ранее подтверждён 18/18 threads, в текущем хвосте ошибок нет.$150.26, available$102.06, unrealized+$14.53; 3 Radar shorts (B2/ERA/UB), DB и exchange совпадают; ровно 3 reduce-only защитных ордера, по одному на позицию. Торговля активна.Точное условие следующего logic fix
bf7a1ba5, минимум 5 local/tail exits сmanual_actionи повторяемой symbol+side+regime концентрацией; либо раньше — воспроизводимый policy breach (stop/re-entry latch не сработал, same-side expander пережил close, либо loss превысил лимит не из-за измеренной market/slippage причины).<1или устойчивой live/paper divergence.Автономный цикл оптимизации — 2026-07-23 09:08 UTC
Решение: новый tuning-патч не выпускаю. После последних logic/attribution fixes выборка остаётся ниже причинного порога; текущие данные не отделяют дефект сигнала от ожидаемой fat-tail дисперсии. Стратегии, budget, paper/live, kill-switch и native stops не менялись.
GitNexus: repo
arnold-trader-app, запрос по PnL attribution / generic closes / recent cohorts. Индекс на 1 commit позади production HEAD, поэтому использован только как навигация; source of truth — live HEAD0cece981, PostgreSQL, PM2, runtime logs и Bybit.Live PnL закрытых реальных сделок
net = gross pnl - fee_usd; WR/PF по gross PnL. Девять историческихexchange_sl_tp_closeуже подтверждены order lifecycle как Grid и маппятся вgrid_bidir_aggressive; legacyfutures_monitorи manual labels исключены из strategy ranking.syncer_importedкак отдельной стратегии не считался.Symbol cohorts:
n=12, PF=.588, net=-1.1991; AVAXn=1, net=-.5655; DOGEn=2, PF=∞, net=+.0276.-3.2910, ERA-10.4401, LAB-3.0125, MORPHO-3.0978, UB-3.1828.n=73, PF=.453, net=-7.2420; DOGEn=50, PF=1.763, net=+1.4859; SOLn=58, PF=1.295, net=+.5503; XRPn=44, PF=.784, net=-1.3125.n=286, PF=.492, net=-43.9616; DOGEn=188, PF=.463, net=-19.9713; XRPn=190, PF=.502, net=-19.3391; SOLn=339, PF=.875, net=-5.8529; HYPEn=6, PF=.067, net=-1.5571; ETHn=1, net=-.7932.n=10, PF=25.512, net=+2.1113; BTCn=3, PF=5.582, net=+.6307.+30.2452and AVAAI cohort+3.7269do not compensate recent stops. Это fat-tail профиль, поэтому ограничивать количество сделок/вводить дневную паузу нельзя.Recent/post-fix evidence
bf7a1ba5(2026-07-22 09:30 UTC):n=15, PF.496, net-1.7370; только 2 local-stop выхода и 3 counter-trend opportunities — ниже условий50 closes / 5 tail exits / 10 opportunities. Re-entry latches сохранены по symbol+side+regime; SOL продолжает controlled short grid, AVAX/DOGE не переоткрываются в том же neutral regime. Это сохраняет signal-based recovery и не является time/quantity halt.6583df1c(2026-07-21 14:17 UTC):n=6, все stops, net-26.3409; прошло <72ч и нет 20 matched post-filter terminal events. Последний attribution release0cece981задеплоен в 08:19 UTC; post-release закрытий пока 0, поэтому корректность новой Radar external-profit/fee attribution ещё не имеет live close cohort.closedPnl + cumExecFeegross convention и отдельныйfee_usd; до нового post-release close менять этот путь снова без evidence нельзя.Production verification
HEAD=origin/master=health.version=0cece981, repository clean.scripts/ops/post-deploy-validate.shподeuropatech:ALL CHECKS PASSED.europatech; API/DB healthy, gridis_stopped=false.0.3→0.4) в следующем минутном цикле без SUM. Торговля активна.Точное условие следующего фикса
50closes послеbf7a1ba5, минимум5local/tail exits с повторяемой symbol+side+regime концентрацией и10counter-trend opportunities; раньше менять только при воспроизводимом breach stop/re-entry/expander policy.20post-filter terminal trades и72ч, matched live-vs-paper по(alert_ts, symbol); signal/regime fix только при PF<1одновременно с устойчивой live/paper divergence или повторяемым ex-ante признаком проигрышного cohort.0cece981external/native close обязан иметь economic owner,origin_strategy, authoritative fee и gross/net parity с Bybit; любой generic owner или zero-fee при ненулевомcumExecFee— немедленный attribution fix.Автономный цикл оптимизации — 2026-07-23 15:10 UTC
Исправлен один доказанный дефект: историческая атрибуция прибыльных Radar-exit.
Три закрытия Radar были записаны как
manual_close, хотя live-журнал однозначно связывает их с Radar поsymbol + qty + alert_tsи времени закрытия (лаг 81–220 сек):YBUSDT,B2USDT,WLFIUSDT. Кодовый контракт уже исправлен и развернут PR #539, production SHAe06f3fbe; выполнен точечный DB-backfill строк47948/48251/48265вradar_liveсorigin_strategy,close_strategy,exit_reason,radar_alert_ts. До изменения сохранена защищённая резервная копия.PnL после исправления атрибуции (gross P/L, fees отдельно):
*Radar live существует менее 7 дней, поэтому 7д/30д cohort совпадает.Recent cohorts:
fd527c56(2026-07-21 14:28 UTC):n=8, WR25.0%, PF1.958, fees0.365, net+24.655; retained frequency сохранена — 8 закрытий примерно за 48 часов.8f84147a(2026-07-21 18:59 UTC):n=56, WR39.3%, PF0.471, fees0.196, net-2.860. Следующий анализ — tail-loss по exactmetadata.manual_action, symbol+side и режиму; без stop-limit/паузы/budget=0.Атрибуция: 9 старых
exchange_sl_tp_closeза 7д остаются unresolved historical rows; последняя — 2026-07-21 11:22 UTC, то есть до owner-first fix. После исправления новых generic unresolved closes не выявлено.Production truth:
HEAD == origin/master == e06f3fbe,/api/healthok/database ok, корректный europatech PM2 online, Grid active и размещает реальные лимитные ордера; Bybit: equity180.53, открытых позиций0, открытых grid-ордеров8. Репозиторий чистый, GitNexus detect-changes: 0.Автономный цикл оптимизации — 2026-07-23 21:05 UTC
Решение: новый logic/tuning patch не выпускаю: после текущего production restart выборка закрытий слишком мала для причинного изменения, а Radar после последнего owner-attribution release ещё не имеет ни одного нового terminal close. Стратегии, budget, paper/live, kill-switch и native stops не менялись.
GitNexus: repo
arnold-trader-app, запросcontinuous strategy optimization live PnL attribution exchange_sl_tp_close syncer_imported recent cohort logic fix; индекс на 1 commit позади production HEAD, поэтому использован как навигация. Источник истины — live sourcee06f3fbe, PostgreSQL, europatech PM2, runtime logs и Bybit.Live PnL закрытых реальных сделок
net = pnl - fee_usd; genericexchange_sl_tp_close,syncer_imported, legacyfutures_monitorи manual labels не считались стратегиями без owner linkage.Крупные symbol cohorts: Grid 7д — AVAX
n=59, PF=.450, net=-5.1897, XRPn=40, PF=.750, net=-1.2796, SOLn=52, PF=1.226, net=+.6836, DOGEn=41, PF=1.944, net=+1.5470. Grid 30д — AVAX-41.2609, XRP-19.2973, DOGE-19.4566, SOL-5.4562. Radar 7д/30д остаётся fat-tail cohort: 5 winners из 23, PF1.366, net+26.8303; ограничивать частоту по серии стопов нельзя.Recent cohort и атрибуция
e06f3fbeв 14:47 UTC: Gridn=4realized closes — SOLn=2, net=+0.1208; XRPn=2, net=-0.5478из-за одного bounded local-stop-0.5628. Это меньше порога и не доказывает новый signal/sizing defect.n=0terminal closes. Два прибыльных manual-close backfill (B2,WLFI) произошли до запуска и подтверждают исправленную историческую атрибуцию, но не являются post-release verification cohort.n=3, net=-3.0220; counter-trend closen=2, net=-0.2510; exchange/external reconciliationn=6, net=-1.7452. Старые unclassified exits нельзя использовать для нового regime tuning без ex-ante metadata.exchange_sl_tp_close/syncer_importedстрок нет; 9 generic closes остаются только историческими, последняя 2026-07-21 11:22 UTC.Runtime / exchange truth
Production
e06f3fbe, API/database healthy, europatech PM2 online, daemon18/18threads alive. Bybit: equity$180.30, available$156.58; managed shorts XRP46.6и SOL0.3, unrealized около-$0.22; 14 grid orders — по 4 expanding sells и 3 reduce-only buys на каждом символе. AVAX/DOGE fresh grids корректно отклоняются bearish regime gate; торговля активна.Рабочее дерево сейчас занято отдельным агентом и содержит scoped изменения risk cancel-orders;
origin/masterуже опережает production на PR #540 по stale protection cleanup. В этот цикл shared worktree, merge/deploy/restart не трогались.Точное условие следующего logic fix: минимум
30post-runtime owner-attributed Grid закрытий, включая>=5loss exits с заполненнымиmanual_action + symbol + side + regime, и повторяемая ex-ante концентрация с PF<1при сохранённой fill frequency; либо минимум20post-filter Radar terminal trades за>=72чс exact(alert_ts,symbol)live/paper matching и устойчивым PF<1/divergence. Раньше допустим только повторяемый tail-loss по одному и тому же order path с полной exchange timeline.Очередной цикл: 24ч/7д/30д cohort снят по strategy+symbol, generic labels отделены. Самый доказанный дефект — неполный fee reconciliation: за 7д zero-fee имели 41/186 Grid, 20/24 Radar и 9/9 legacy generic close; код опрашивал только BTC/ETH/SOL, а systemd timer был disabled. Создан PR #542: #542. Торговые настройки/лимиты не менялись; активная торговля сохранена.
Production verification PR #542 обнаружила второй блокер того же контура: production runner не мог импортировать
appиз-за позднего sys.path bootstrap. Создан follow-up PR #543: #543; добавлен exact regression, торговая логика/настройки не затронуты.Цикл завершён в production. PR #542 и follow-up #543 merged/deployed, live SHA
3edd0a29, CI/deploy green. Fee reconciler теперь берёт dynamic user-scoped symbol/category и запускается canonical production command без PYTHONPATH workaround. 7d backfill: 932 executions / 715 order IDs, обновлено 63 trade rows. После backfill: Grid 544 rows, fee=$4.539350, zero-fee=0; Radar 21 rows, fee=$2.987790, zero-fee=0; legacy exchange close 9 rows, fee=$0.341112, zero-fee=0. 24h: Grid 44, net после fee +$0.3375; Radar 2, net после fee -$6.6663. 7d: Grid net -$8.4875; Radar net -$41.8248. Generic labels исключены из strategy ranking.Exchange truth после deploy: 3 managed short positions, 14 open orders, equity $182.47; PM2/API/DB healthy, repo clean. Trading settings/limits не менялись.
Открытый operational gap: существующий
arnold-fee-reconciler.timerdisabled/inactive; текущий agent не имеет root policy для enable. Manual 7d reconciliation выполнен. Следующий data-quality приоритет: детерминированно связать 20/291 exchange closes без order-id match и 9 legacy generic closes с economic owner; signal/entry tuning только после owner-linked recent cohort достаточного размера.Цикл 2026-07-24 09:20 UTC завершён и проверен на production.
Cohort live PnL (owner-first attribution, paper исключён; 9 строк
exchange_sl_tp_closeза 30д связаны сgrid_bidir_aggressiveчерез positions_archive + входные fills, generic label отдельно стратегией не считался):Recent post-logic cohorts:
Выбран один доказанный дефект: linear Grid close-row записывал round-trip fee в
fee_usd, хотя opening fill уже имел собственную fee по order_id. Это ломало per-order fee parity и могло повторно учитывать entry fee в consumers, суммирующих все fills. GitNexus_linear_close_pnl: LOW, 2 direct callers (_handle_buy_fill,_handle_sell_fill), цепочка доcheck_fills_and_replace/grid run.Доставка:
7db3569f, CI: backend-tests/frontend-audit/secret-scan/smoke green; локально 24 targeted tests passed, diff-scoped secret scan clean.fc16b18488fc086380fd0463fb90829214c71bf4./api/health.version=fc16b184; PM2 API/daemons/Telegram online; daemon 18/18 threads; canonicalpost-deploy-validate.shзавершёнALL CHECKS PASSED; checkout clean.Следующая измеримая проверка этого фикса: первый post-deploy linear Grid round-trip должен дать две уникальные order_id fee-записи (entry и exit), а close-row invariant
pnl - fee_usd == realized netбез повторного entry fee. До такого fill новую tuning-гипотезу не смешивать с accounting cohort.Цикл 2026-07-24 15:45 UTC завершён в production.
Live PnL (real, закрытые outcomes; fee только закрывающей строки; 9 legacy exchange_sl_tp_close связаны с grid_bidir_aggressive по ранее проверенным exact order/position lineage, generic label отдельно стратегией не считался):
Recent post-logic cohorts:
Выбран один доказанный дефект данных/runtime: SOLUSDT short отсутствовал на Bybit, обе точные закрывающие order ID уже были записаны в trades (qty/side/time совпали с closed-PnL), но sync daemon проверял existing order ID до валидации и затем навсегда оставлял DB ghost в preserve_missing_keys. Это блокировало корректную liveness/attribution картину и могло мешать новым управляемым входам. Исправление после строгой side/time/qty проверки считает уже существующую close-row подтверждением завершения, не пишет дубликат и разрешает удалить stale DB position. Signal/budget/pause/stop-limit/trade-frequency не менялись.
Доставка: PR #548, commit
f9524c7b, merge/release65954f8d. GitNexus impact LOW (2 direct callers, 0 process flows); индекс advisory для отдельного worktree, live source и git diff использованы как truth. Локально 65 targeted tests passed, gitleaks diff clean; PR и push backend/frontend/secret/smoke CI success; deploy success.Production verification: HEAD=origin/master=health/release markers
65954f8d; PM2 API/daemons/Telegram online под europatech; 18/18 daemon threads; canonical post-deploy validator ALL CHECKS PASSED; repo clean. Bybit: equity 196.72 USDT, 4 managed short positions, 35 open orders; Grid active, is_stopped=false. Во время CI исходный SOL ghost снова стал реальной биржевой позицией через новый управляемый fill, поэтому live negative-path removal не форсировался; exact regression покрывает исходный snapshot.Новый clean cohort начинается с runtime
65954f8d(15:44 UTC), закрытий пока 0. Следующий tuning-порог: минимум 20 owner-attributed Grid закрытий после65954f8dс regime/exit_reason и проверкой PF/frequency, либо минимум 10 новых Radar DOWN закрытий. До порога новый signal/entry tuning будет hindsight-only.