[CL-FIX-TREND-SNIPER] Прод-фиксы: отсутствующий rsi_divergence + balance fetch для pybit #309

Merged
andrei merged 1 commit from feature/claude-trend-sniper-fixes into master 2026-06-10 14:38:44 +00:00
Owner

Что сделано

  • Реализован rsi_divergence(closes, period, lookback) в app/strategies/indicators/momentum.py + экспорт из пакета: классический price/RSI divergence (нижний минимум цены + высший минимум RSI → bullish; зеркально → bearish; иначе None).
  • trend_sniper.py: новый _fetch_equity(adapter) с dual-path — async get_balance() ИЛИ sync pybit get_wallet_balance(accountType="UNIFIED") (зеркало паттерна ai_signal_gate._get_current_equity); вызов в analyze переведён на него.

Зачем

Прод-логи 2026-06-10 (ошибки минимум с 07.06):

  1. AttributeError: module 'app.strategies.indicators' has no attribute 'rsi_divergence' — strategy_worker скипал КАЖДЫЙ символ trend_sniper на этом пути; функция никогда не существовала ни в пакете, ни в удалённом legacy-модуле (H12 не при чём — проверено git show).
  2. 'HTTP' object has no attribute 'get_balance' — для pybit-пользователей автосайзинг по equity всегда падал в fallback position_size=25.

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

  • 10 новых тестов: divergence bullish/bearish/trend-без-дивергенции/flat/insufficient + 4 adapter-flavour для _fetch_equity — green.
  • Регрессия области: pytest -k "trend_sniper or indicator or momentum or sniper" — 232 passed.
  • ruff — clean; import-smoke всех 29 экспортов пакета — OK.
  • После деплоя: проверка pm2-daemons-out.log на исчезновение обеих ошибок.

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

  • Пороговая толерантность RSI (1.0 пункта) и схема «две половины окна» — эвристика; может давать меньше срабатываний, чем «настоящий» pivot-based detector. Безопасное направление ошибки: divergence=None → сигнал просто не получает бонус-условие.
  • _fetch_equity для async-адаптеров по-прежнему через run_async — как и старый код; event-loop-конфликтов не добавляет.
## Что сделано - Реализован `rsi_divergence(closes, period, lookback)` в `app/strategies/indicators/momentum.py` + экспорт из пакета: классический price/RSI divergence (нижний минимум цены + высший минимум RSI → bullish; зеркально → bearish; иначе None). - `trend_sniper.py`: новый `_fetch_equity(adapter)` с dual-path — async `get_balance()` ИЛИ sync pybit `get_wallet_balance(accountType="UNIFIED")` (зеркало паттерна `ai_signal_gate._get_current_equity`); вызов в `analyze` переведён на него. ## Зачем Прод-логи 2026-06-10 (ошибки минимум с 07.06): 1. `AttributeError: module 'app.strategies.indicators' has no attribute 'rsi_divergence'` — strategy_worker скипал КАЖДЫЙ символ trend_sniper на этом пути; функция никогда не существовала ни в пакете, ни в удалённом legacy-модуле (H12 не при чём — проверено git show). 2. `'HTTP' object has no attribute 'get_balance'` — для pybit-пользователей автосайзинг по equity всегда падал в fallback `position_size=25`. ## План тестирования - 10 новых тестов: divergence bullish/bearish/trend-без-дивергенции/flat/insufficient + 4 adapter-flavour для `_fetch_equity` — green. - Регрессия области: `pytest -k "trend_sniper or indicator or momentum or sniper"` — 232 passed. - `ruff` — clean; import-smoke всех 29 экспортов пакета — OK. - После деплоя: проверка pm2-daemons-out.log на исчезновение обеих ошибок. ## Где могу ошибаться - Пороговая толерантность RSI (1.0 пункта) и схема «две половины окна» — эвристика; может давать меньше срабатываний, чем «настоящий» pivot-based detector. Безопасное направление ошибки: divergence=None → сигнал просто не получает бонус-условие. - `_fetch_equity` для async-адаптеров по-прежнему через `run_async` — как и старый код; event-loop-конфликтов не добавляет.
[CL-FIX-TREND-SNIPER] rsi_divergence: отсутствующий индикатор + balance fetch для pybit-адаптеров
All checks were successful
Arnold Forgejo CI / secret-scan (pull_request) Successful in 4s
Forgejo Smoke Test / Smoke (pull_request) Successful in 2s
Arnold Forgejo CI / frontend-audit (pull_request) Successful in 11s
Arnold Forgejo CI / backend-tests (pull_request) Successful in 4m0s
4ed4a096b7
Прод-лог 2026-06-10: strategy_worker скипал каждый символ trend_sniper с
AttributeError 'app.strategies.indicators' has no attribute 'rsi_divergence'
(функция никогда не существовала ни в пакете, ни в legacy-модуле; ошибка в
логах минимум с 07.06). Реализован классический price/RSI divergence detector
в indicators/momentum.py + экспорт из пакета.

Вторая бага там же: trend_sniper.analyze звал _adapter.get_balance() напрямую,
а raw pybit HTTP session имеет только sync get_wallet_balance(accountType=...) —
автосайзинг позиции по equity всегда падал в fallback position_size=25.
Добавлен _fetch_equity() с dual-path (зеркало ai_signal_gate._get_current_equity).

Тесты: 10 новых (divergence bullish/bearish/none/flat/insufficient + 4 adapter
flavours), область 232 passed, ruff clean.
andrei merged commit 42ce582629 into master 2026-06-10 14:38:44 +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!309
No description provided.