# 🔴 КРИТИЧЕСКИЕ ПРОБЛЕМЫ ИЗ ЛОГОВ - АНАЛИЗ И РЕШЕНИЯ
**Дата анализа:** 2025-11-22
**Источник:** Логи выполнения `autonomous_agent.main`
---
## 📊 КРИТИЧЕСКИЕ ПРОБЛЕМЫ
### 1. ⚠️ RuntimeWarning: Mean of empty slice (КРИТИЧНО)
**Проблема:**
```
/opt/anaconda3/lib/python3.12/site-packages/numpy/core/fromnumeric.py:3504: RuntimeWarning: Mean of empty slice.
/opt/anaconda3/lib/python3.12/site-packages/numpy/core/_methods.py:129: RuntimeWarning: invalid value encountered in scalar divide
```
**Частота:** Повторяется **десятки раз** в каждом анализе
**Локация проблемы:**
- `mcp_server/technical_analysis.py:136` - `df['volume'].tail(20).mean()`
- `mcp_server/technical_analysis.py:233` - `df['volume'].rolling(20).mean().iloc[-1]`
- `mcp_server/technical_analysis.py:235` - `df['volume'].iloc[-1] / df['volume'].rolling(20).mean().iloc[-1]`
- `mcp_server/technical_analysis.py:697` - `np.mean([abs(c['close'] - c['open']) for c in candles[i-5:i]])`
- `mcp_server/technical_analysis.py:836` - `np.mean([c['volume'] for c in prev_candles])`
**Причина:**
- Недостаточно данных для расчета (менее 20 свечей для rolling mean)
- Пустые срезы при расчете среднего для паттернов
- Отсутствие проверки на пустые массивы перед `np.mean()`
**Влияние:**
- Засоряет логи предупреждениями
- Может приводить к `NaN` значениям в индикаторах
- Потенциально некорректные расчеты
**Решение:**
```python
# БЫЛО:
volume_avg = float(df['volume'].tail(20).mean())
# ДОЛЖНО БЫТЬ:
volume_tail = df['volume'].tail(20)
volume_avg = float(volume_tail.mean()) if len(volume_tail) > 0 else float(df['volume'].mean()) if len(df) > 0 else 0.0
```
---
### 2. 🔴 OpenRouter API Error 401: "User not found" (КРИТИЧНО)
**Проблема:**
```
2025-11-22 13:51:38.310 | ERROR | autonomous_agent.qwen_client:generate:132 - OpenRouter API error 401: {"error":{"message":"User not found.","code":401}}
```
**Локация:** `autonomous_agent/qwen_client.py:132`
**Причина:**
- Неверный или истекший API ключ OpenRouter
- Проблема с аутентификацией
- Возможно, ключ не установлен в переменных окружения
**Влияние:**
- **Qwen AI анализ полностью отключен** (Step 5 пропускается)
- Система работает без AI-улучшений
- Потеря важного компонента анализа
**Решение:**
1. Проверить `OPENROUTER_API_KEY` в `.env`
2. Добавить graceful fallback без AI анализа
3. Логировать предупреждение, но не прерывать работу
---
### 3. 🔴 Best LONG/SHORT Score = 0.00 (КРИТИЧНО)
**Проблема:**
```
• Best LONG score: 0.00
• Best SHORT score: 0.00
```
**НО в отчете показаны сигналы:**
- USDT/TRY: Score 5.00
- ETH/USDT: Score 3.00
- и т.д.
**Локация проблемы:**
- `autonomous_agent/detailed_formatter.py:69-70` использует `confluence_score`
- `publish_market_analysis.py:110-111` использует `score`
**Причина:**
- **Несоответствие полей данных!**
- В `detailed_formatter.py` ищется `confluence_score`, но в данных может быть `score` или `final_score`
- Пустые списки `all_longs`/`all_shorts` при расчете
**Влияние:**
- Неправильная оценка качества сигналов
- Пользователь видит 0.00, хотя есть сигналы с score > 0
- Некорректная оценка риска
**Решение:**
```python
# БЫЛО:
best_long_score = max([opp.get("confluence_score", 0) for opp in all_longs], default=0)
# ДОЛЖНО БЫТЬ:
best_long_score = max([
opp.get("confluence_score", 0) or
opp.get("final_score", 0) or
opp.get("score", 0)
for opp in all_longs
], default=0)
```
---
### 4. ⚠️ Cache Disabled (СРЕДНЯЯ ВАЖНОСТЬ)
**Проблема:**
```
2025-11-22 13:53:27.996 | INFO | CacheManager initialized with CACHING DISABLED (real-time data only)
Cache enabled: False
```
**НО в логах видны:**
```
Cache hit for get_ohlcv: UNI/USDT 1h
```
**Причина:**
- `CacheManager` отключен (по умолчанию `enabled=False`)
- Но `bybit_client` использует свой внутренний кэш
- Два разных механизма кэширования
**Влияние:**
- Больше API запросов к Bybit
- Медленнее выполнение анализа
- Потенциальные rate limits
**Решение:**
- Включить `ENABLE_CACHE=true` в `.env`
- Или унифицировать кэширование
---
### 5. ⚠️ Validation Failed - Hard Stops (СРЕДНЯЯ ВАЖНОСТЬ)
**Проблема:**
```
WARNING | Validation failed for USDT/BRL long: Entry BLOCKED by hard stops. Volume too low for scalping on 5m: 0.00; BB Squeeze on 1m without volume confirmation (vol_ratio: 0.00)
WARNING | Validation failed for FLUID/USDT long: Entry BLOCKED by hard stops. MACD bearish on 3 short timeframes
```
**Локация:** `autonomous_agent/autonomous_analyzer.py:_validate_opportunities`
**Причина:**
- Слишком строгие hard stops в валидации
- Volume = 0.00 (проблема с данными или расчетом)
- Противоречивые сигналы на разных таймфреймах
**Влияние:**
- Много сигналов отфильтровывается
- Только 1 LONG из 4 прошел валидацию
- 0 SHORT прошли валидацию
**Решение:**
- Проверить расчет volume (может быть связано с проблемой #1)
- Пересмотреть критерии hard stops
- Добавить более детальное логирование причин блокировки
---
### 6. ⚠️ Low Experience Scores (НИЗКАЯ ВАЖНОСТЬ)
**Проблема:**
```
Experience data logged for UNI/USDT: pattern=unknown, score=2.2
Experience data logged for ETH/USDT: pattern=unknown, score=2.8
Experience data logged for BTC/USDC: pattern=unknown, score=2.2
```
**Причина:**
- Низкие confluence scores
- `pattern=unknown` - паттерны не распознаются
- Возможно, проблема в расчете score
**Влияние:**
- Накопление опыта с низкими score
- Может влиять на будущие рекомендации
---
## 🎯 ПРИОРИТЕТЫ ИСПРАВЛЕНИЯ
### КРИТИЧНО (сделать немедленно):
1. **Исправить RuntimeWarning: Mean of empty slice**
- Добавить проверки на пустые массивы
- Использовать безопасные значения по умолчанию
- Файлы: `mcp_server/technical_analysis.py`
2. **Исправить Best LONG/SHORT Score = 0.00**
- Унифицировать названия полей (`confluence_score` vs `score` vs `final_score`)
- Добавить fallback для разных вариантов названий
- Файлы: `autonomous_agent/detailed_formatter.py`, `publish_market_analysis.py`
3. **Исправить OpenRouter API 401**
- Проверить API ключ
- Добавить graceful fallback
- Файлы: `autonomous_agent/qwen_client.py`
### ВАЖНО (сделать в ближайшее время):
4. **Включить кэширование**
- Установить `ENABLE_CACHE=true`
- Проверить эффективность
5. **Улучшить валидацию сигналов**
- Проверить расчет volume
- Пересмотреть hard stops
- Добавить детальное логирование
---
## 📝 РЕКОМЕНДАЦИИ ПО УЛУЧШЕНИЮ
1. **Добавить валидацию данных перед расчетами:**
```python
if len(df) < 20:
logger.warning(f"Insufficient data for {symbol}: {len(df)} candles")
return default_values
```
2. **Унифицировать названия полей score:**
- Использовать одно название везде: `final_score`
- Или добавить нормализацию полей
3. **Улучшить обработку ошибок:**
- Graceful fallback для всех внешних API
- Не прерывать анализ при ошибках AI
4. **Добавить мониторинг качества:**
- Трекинг количества валидированных сигналов
- Алерты при низком проценте прохождения валидации
---
## ✅ ЧЕКЛИСТ ИСПРАВЛЕНИЙ
- [ ] Исправить все `np.mean()` с проверкой на пустые массивы
- [ ] Исправить `best_long_score`/`best_short_score` с fallback полей
- [ ] Проверить и исправить OpenRouter API ключ
- [ ] Включить кэширование (`ENABLE_CACHE=true`)
- [ ] Добавить валидацию данных перед расчетами
- [ ] Улучшить логирование причин блокировки сигналов
- [ ] Добавить graceful fallback для всех внешних API
---
**Статус:** 🔴 ТРЕБУЕТ НЕМЕДЛЕННОГО ВНИМАНИЯ