[CL-RADAR] radar-live: нехватка available balance при place — INFO-скип вместо Sentry error (ARNOLD-TRADER-BW) #515

Merged
andrei merged 1 commit from feature/claude-bw-balance-skip into master 2026-07-21 21:29:27 +00:00
Owner

Что сделано

  • backend/bot/radar_live.py: helper _is_balance_insufficient (по образу _is_mode_mismatch, маркеры «ab not enough» / «insufficient available balance»); в entry-цикле raise от place при нехватке баланса → INFO-лог, снятие «placing»-записи из state, скип входа.
  • Transport/unknown-failure путь не изменён: raise уходит в общий handler, «placing» остаётся для reconcile через manage_open (существующий тест это фиксирует).
  • Тест test_insufficient_balance_raise_skips_entry_cleanly: state чист, «entry failed» в логах отсутствует, INFO-скип присутствует.

Зачем

Sentry ARNOLD-TRADER-BW (n=4): Bybit отвергает ордер «ab not enough for new order» (110007) когда параллельные fills/комиссии съедают available к моменту place. Это ожидаемая гонка, не дефект: ордер отвергнут ДО принятия биржей. Раньше общий except → logger.exception слал ERROR в Sentry и оставлял зависшую «placing»-запись. Closes #514.

План тестирования

  • TDD: новый тест red → green.
  • tests/test_radar_live.py — 43 passed.
  • Полный backend-suite — 7383 passed, 7 skipped.

Где могу ошибаться

  • Матчинг по подстроке сообщения биржи: если Bybit сменит текст без «ab not enough»/«insufficient available balance», ветка вернётся к прежнему (безопасному) поведению logger.exception — деградация мягкая.
  • Клампинг qty вниз при нехватке сознательно НЕ делал (ночной минимум по issue #514 направление 1); при желании — отдельный PR.
## Что сделано - `backend/bot/radar_live.py`: helper `_is_balance_insufficient` (по образу `_is_mode_mismatch`, маркеры «ab not enough» / «insufficient available balance»); в entry-цикле raise от place при нехватке баланса → INFO-лог, снятие «placing»-записи из state, скип входа. - Transport/unknown-failure путь не изменён: raise уходит в общий handler, «placing» остаётся для reconcile через manage_open (существующий тест это фиксирует). - Тест `test_insufficient_balance_raise_skips_entry_cleanly`: state чист, «entry failed» в логах отсутствует, INFO-скип присутствует. ## Зачем Sentry ARNOLD-TRADER-BW (n=4): Bybit отвергает ордер «ab not enough for new order» (110007) когда параллельные fills/комиссии съедают available к моменту place. Это ожидаемая гонка, не дефект: ордер отвергнут ДО принятия биржей. Раньше общий `except → logger.exception` слал ERROR в Sentry и оставлял зависшую «placing»-запись. Closes #514. ## План тестирования - TDD: новый тест red → green. - `tests/test_radar_live.py` — 43 passed. - Полный backend-suite — **7383 passed, 7 skipped**. ## Где могу ошибаться - Матчинг по подстроке сообщения биржи: если Bybit сменит текст без «ab not enough»/«insufficient available balance», ветка вернётся к прежнему (безопасному) поведению logger.exception — деградация мягкая. - Клампинг qty вниз при нехватке сознательно НЕ делал (ночной минимум по issue #514 направление 1); при желании — отдельный PR.
[CL-RADAR] radar-live: нехватка available balance при place — INFO-скип, не exception (Sentry ARNOLD-TRADER-BW, #514)
All checks were successful
Arnold Forgejo CI / backend-tests (pull_request) Successful in 5m17s
Arnold Forgejo CI / frontend-audit (pull_request) Successful in 18s
Arnold Forgejo CI / secret-scan (pull_request) Successful in 3s
Forgejo Smoke Test / Smoke (pull_request) Successful in 1s
55a91d3014
Bybit «ab not enough for new order» (110007) — ожидаемая гонка (fills/комиссии
съели available к моменту place), а не дефект: ордер отвергнут ДО принятия,
reconcile нечего. Раньше raise ловился общим except с logger.exception —
Sentry error + запись placing зависала в state. Теперь _is_balance_insufficient
(по образу _is_mode_mismatch): INFO-лог, запись снимается, вход скипается.
Transport-failure путь не тронут — placing сохраняется для manage_open.
andrei merged commit 5a4ce017c9 into master 2026-07-21 21:29:27 +00:00
andrei deleted branch feature/claude-bw-balance-skip 2026-07-21 21:29:27 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
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!515
No description provided.