Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
166 changes: 166 additions & 0 deletions ANALYSE_PARAMETRES_SCAN_SCALABLES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
# 📊 Analyse des Paramètres du Scan de Scalabilité

## 🔍 Paramètres Variables du Scan de Scalabilité

D'après `core/scanner.py` (classe `ScalabilityScanner`), le scan retourne les paramètres suivants :

| Paramètre | Type | Description | Source |
|-----------|------|-------------|--------|
| `price` | `float` | Prix actuel (dernier close) | `klines[-1]['close']` |
| `recentVolume` | `float` | Volume total des 5 dernières bougies 1m | `sum(volumes[-5:])` |
| `vol5` | `float` | Volatilité sur 5 périodes (écart-type normalisé en %) | `calculate_volatility(closes, 5)` |
| `vol15` | `float` | Volatilité sur 15 périodes (écart-type normalisé en %) | `calculate_volatility(closes, 15)` |
| `spread` | `float` | Spread en % entre best_bid et best_ask | `fetch_spread_data()` |
| `bookDepth` | `float` | Profondeur totale (somme des 5 premiers niveaux) | `fetch_spread_data()` |
| `bidVol` | `float` | Volume bid total | `fetch_spread_data()` |
| `askVol` | `float` | Volume ask total | `fetch_spread_data()` |
| `balanceScore` | `float` | Score d'équilibre bid/ask (0-1, 1.0 = équilibré) | `fetch_spread_data()` |
| `score` | `float` | Score de scalabilité final | `calculate_score()` |

### 📐 Formule du Score de Scalabilité

```python
vol_spread_ratio = vol5 / spread # Si spread > 0 et vol5 > 0
norm_factor = 0.5 * (recentVolume / max_volume) + 0.5 * (bookDepth / max_depth)
balance_bonus = balanceScore # 0-1
raw_score = vol_spread_ratio * log10(recentVolume + 1) * norm_factor * balance_bonus
```

---

## ✅ Présence dans le Schéma SQL

### 📋 Table `scan_logs`

| Paramètre Scan | Colonne SQL | Type | Statut |
|----------------|-------------|------|--------|
| `price` | `price` | `FLOAT NOT NULL` | ✅ **PRÉSENT** |
| `spread` | `spread_pct` | `FLOAT` | ✅ **PRÉSENT** |
| `bookDepth` | `book_depth` | `FLOAT` | ✅ **PRÉSENT** |
| `balanceScore` | `balance_score` | `FLOAT` | ✅ **PRÉSENT** |
| `bidVol` | `bid_vol` | `FLOAT` | ✅ **PRÉSENT** |
| `askVol` | `ask_vol` | `FLOAT` | ✅ **PRÉSENT** |
| `recentVolume` | - | - | ❌ **MANQUANT** |
| `vol5` | - | - | ❌ **MANQUANT** |
| `vol15` | - | - | ❌ **MANQUANT** |
| `score` | - | - | ❌ **MANQUANT** |

**Note** : `orderbook_imbalance_ratio` est présent dans le schéma (calculé comme `bid_vol / ask_vol`), mais n'est pas directement retourné par le scan.

---

### 📋 Table `trades`

| Paramètre Scan | Colonne SQL | Type | Statut |
|----------------|-------------|------|--------|
| `spread` (entry) | `entry_spread_pct` | `FLOAT` | ✅ **PRÉSENT** |
| `balanceScore` (entry) | `entry_balance_score` | `FLOAT` | ✅ **PRÉSENT** |
| `bookDepth` (entry) | `entry_book_depth` | `FLOAT` | ✅ **PRÉSENT** |
| `bidVol` (entry) | `entry_bid_vol` | `FLOAT` | ✅ **PRÉSENT** |
| `askVol` (entry) | `entry_ask_vol` | `FLOAT` | ✅ **PRÉSENT** |
| `spread` (exit) | `exit_spread_pct` | `FLOAT` | ✅ **PRÉSENT** |
| `balanceScore` (exit) | `exit_balance_score` | `FLOAT` | ✅ **PRÉSENT** |
| `recentVolume` (entry/exit) | - | - | ❌ **MANQUANT** |
| `vol5` (entry/exit) | - | - | ❌ **MANQUANT** |
| `vol15` (entry/exit) | - | - | ❌ **MANQUANT** |
| `score` (entry) | - | - | ❌ **MANQUANT** |

---

### 📋 Table `market_context`

| Paramètre Scan | Colonne SQL | Type | Statut |
|----------------|-------------|------|--------|
| `spread` (moyenne) | `avg_spread` | `FLOAT` | ✅ **PRÉSENT** |
| `vol5` / `vol15` (moyenne) | `avg_volatility_1m` / `avg_volatility_5m` | `FLOAT` | ⚠️ **PARTIEL** (moyennes, pas valeurs individuelles) |
| `recentVolume` | - | - | ❌ **MANQUANT** |
| `score` | - | - | ❌ **MANQUANT** |

---

## ❌ Paramètres Manquants dans le Schéma SQL

### 1. **`recentVolume`** (Volume des 5 dernières bougies)
- **Utilisation** : Utilisé dans le calcul du score de scalabilité (`log10(recentVolume + 1)`)
- **Alternative existante** : `volume_1m` et `volume_ratio_1m` dans `scan_logs`, mais pas le volume spécifique des 5 dernières bougies
- **Impact** : ⚠️ **MOYEN** - Peut être approximé par `volume_1m`, mais pas exactement la même valeur

### 2. **`vol5`** (Volatilité 5 périodes)
- **Utilisation** : Utilisé dans le calcul du score (`vol5 / spread`)
- **Alternative existante** : `atr_pct_1m` (ATR en %), mais ce n'est pas exactement la même métrique
- **Impact** : ⚠️ **MOYEN** - `atr_pct_1m` peut servir de proxy, mais `vol5` est un calcul spécifique (écart-type normalisé)

### 3. **`vol15`** (Volatilité 15 périodes)
- **Utilisation** : Utilisé pour le calcul du score (potentiellement)
- **Alternative existante** : `atr_pct_5m` (ATR en %), mais ce n'est pas exactement la même métrique
- **Impact** : ⚠️ **FAIBLE** - Moins utilisé que `vol5` dans le calcul du score

### 4. **`score`** (Score de scalabilité final)
- **Utilisation** : Score final utilisé pour classer les paires
- **Alternative existante** : Aucune
- **Impact** : ⚠️ **MOYEN** - Utile pour l'analyse ML (corrélation entre score de scalabilité et performance des trades)

---

## 💡 Recommandations

### Option 1 : Ajouter les Colonnes Manquantes (Recommandé)

```sql
-- Pour scan_logs
ALTER TABLE scan_logs ADD COLUMN recent_volume FLOAT;
ALTER TABLE scan_logs ADD COLUMN vol5 FLOAT;
ALTER TABLE scan_logs ADD COLUMN vol15 FLOAT;
ALTER TABLE scan_logs ADD COLUMN scalability_score FLOAT;

-- Pour trades (entry)
ALTER TABLE trades ADD COLUMN entry_recent_volume FLOAT;
ALTER TABLE trades ADD COLUMN entry_vol5 FLOAT;
ALTER TABLE trades ADD COLUMN entry_vol15 FLOAT;
ALTER TABLE trades ADD COLUMN entry_scalability_score FLOAT;

-- Pour trades (exit)
ALTER TABLE trades ADD COLUMN exit_recent_volume FLOAT;
ALTER TABLE trades ADD COLUMN exit_vol5 FLOAT;
ALTER TABLE trades ADD COLUMN exit_vol15 FLOAT;
```

### Option 2 : Utiliser les Alternatives Existantes (Temporaire)

- `recentVolume` → Utiliser `volume_1m` (approximation)
- `vol5` → Utiliser `atr_pct_1m` (proxy)
- `vol15` → Utiliser `atr_pct_5m` (proxy)
- `score` → Ne pas logger (perte d'information)

⚠️ **Note** : Cette option entraîne une perte de précision pour l'analyse ML.

---

## 📊 Résumé

| Paramètre | Présent dans `scan_logs` | Présent dans `trades` | Action Recommandée |
|-----------|-------------------------|----------------------|-------------------|
| `price` | ✅ | ✅ (via `entry_price`) | ✅ OK |
| `spread` | ✅ (`spread_pct`) | ✅ (`entry_spread_pct`, `exit_spread_pct`) | ✅ OK |
| `bookDepth` | ✅ (`book_depth`) | ✅ (`entry_book_depth`) | ✅ OK |
| `balanceScore` | ✅ (`balance_score`) | ✅ (`entry_balance_score`, `exit_balance_score`) | ✅ OK |
| `bidVol` | ✅ (`bid_vol`) | ✅ (`entry_bid_vol`) | ✅ OK |
| `askVol` | ✅ (`ask_vol`) | ✅ (`entry_ask_vol`) | ✅ OK |
| `recentVolume` | ❌ | ❌ | ⚠️ **AJOUTER** |
| `vol5` | ❌ | ❌ | ⚠️ **AJOUTER** |
| `vol15` | ❌ | ❌ | ⚠️ **AJOUTER** (optionnel) |
| `score` | ❌ | ❌ | ⚠️ **AJOUTER** |

---

## 🎯 Conclusion

**7 paramètres sur 10 sont présents** dans le schéma SQL.

**3 paramètres manquants** :
1. `recentVolume` (volume des 5 dernières bougies)
2. `vol5` (volatilité 5 périodes)
3. `score` (score de scalabilité final)

**Recommandation** : Ajouter ces 3 colonnes à `scan_logs` et `trades` pour une analyse ML complète.

213 changes: 213 additions & 0 deletions COMPARAISON_PARAMETRES_SCALABLES_SCHEMA.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
# 📊 Comparaison : Paramètres Scalables vs Schéma SQL

## ✅ Résumé

**La plupart des paramètres variables provenant du scan des paires scalables sont présents dans le schéma SQL**, mais certains paramètres spécifiques au calcul du score de scalabilité ne sont pas stockés directement.

---

## 📋 Tableau Comparatif

| Paramètre Scan Scalables | Nom dans Schéma SQL | Table | Statut | Notes |
|--------------------------|---------------------|-------|--------|-------|
| **`spread`** | `spread_pct` | `scan_logs` | ✅ **PRÉSENT** | Ligne 80 |
| **`bookDepth`** | `book_depth` | `scan_logs` | ✅ **PRÉSENT** | Ligne 81 |
| **`balanceScore`** | `balance_score` | `scan_logs` | ✅ **PRÉSENT** | Ligne 82 |
| **`bidVol`** | `bid_vol` | `scan_logs` | ✅ **PRÉSENT** | Ligne 83 |
| **`askVol`** | `ask_vol` | `scan_logs` | ✅ **PRÉSENT** | Ligne 84 |
| **`orderbook_imbalance_ratio`** | `orderbook_imbalance_ratio` | `scan_logs` | ✅ **PRÉSENT** | Ligne 85 (calculé : bid_vol / ask_vol) |
| **`vol5`** | ❌ | - | ❌ **MANQUANT** | Volatilité 5 périodes (utilisée pour calculer le score) |
| **`vol15`** | ❌ | - | ❌ **MANQUANT** | Volatilité 15 périodes (utilisée pour calculer le score) |
| **`recentVolume`** | ❌ | - | ❌ **MANQUANT** | Volume des 5 dernières bougies (utilisé pour calculer le score) |
| **`score`** | ❌ | - | ❌ **MANQUANT** | Score de scalabilité final (utilisé pour classer les paires) |
| **`price`** | `price` | `scan_logs` | ✅ **PRÉSENT** | Ligne 79 |

---

## 📍 Détails par Table

### 1. **Table `scan_logs`** ✅

**Paramètres présents** :
```sql
-- Données marché (lignes 78-85)
price FLOAT NOT NULL,
spread_pct FLOAT,
book_depth FLOAT,
balance_score FLOAT,
bid_vol FLOAT,
ask_vol FLOAT,
orderbook_imbalance_ratio FLOAT, -- bid_vol / ask_vol
```

**Paramètres manquants** :
- `vol5` : Volatilité sur 5 périodes
- `vol15` : Volatilité sur 15 périodes
- `recentVolume` : Volume des 5 dernières bougies
- `score` : Score de scalabilité

**Note** : Les volumes sont stockés via `volume_1m` et `volume_5m`, mais pas le `recentVolume` spécifique (somme des 5 dernières bougies).

---

### 2. **Table `trades`** ✅

**Paramètres présents au moment de l'entrée** :
```sql
-- Score et autres (ligne 434-435)
entry_spread_pct FLOAT,
entry_balance_score FLOAT,

-- Scalability data au entry (lignes 550-553)
entry_book_depth FLOAT,
entry_bid_vol FLOAT,
entry_ask_vol FLOAT,
entry_orderbook_imbalance FLOAT,
```

**Paramètres présents au moment de la sortie** :
```sql
-- Score et autres (lignes 474-475)
exit_spread_pct FLOAT,
exit_balance_score FLOAT,
```

**Paramètres manquants** :
- `entry_vol5` / `exit_vol5` : Volatilité 5 périodes
- `entry_vol15` / `exit_vol15` : Volatilité 15 périodes
- `entry_recentVolume` / `exit_recentVolume` : Volume récent
- `entry_scalability_score` / `exit_scalability_score` : Score de scalabilité

---

### 3. **Table `market_context`** ⚠️ PARTIEL

**Paramètres présents** :
```sql
-- Métriques globales (lignes 601-603)
avg_spread FLOAT,
avg_volatility_1m FLOAT,
avg_volatility_5m FLOAT,
```

**Note** : Ces valeurs sont des **moyennes globales** pour toutes les paires, pas des valeurs spécifiques par paire.

---

## 🔍 Analyse des Paramètres Manquants

### 1. **`vol5` et `vol15`** (Volatilité)

**Impact** : ⚠️ **MOYEN**
- Utilisés pour calculer le score de scalabilité
- Pourraient être utiles pour l'analyse ML (corrélation volatilité/performance)
- **Alternative** : Les indicateurs ATR (`atr_pct_1m`, `atr_pct_5m`) sont déjà stockés et représentent la volatilité

**Recommandation** :
- ✅ **Option 1** : Utiliser `atr_pct_1m` et `atr_pct_5m` comme proxy (déjà présents)
- ⚠️ **Option 2** : Ajouter `vol5` et `vol15` si besoin d'analyse spécifique

---

### 2. **`recentVolume`** (Volume des 5 dernières bougies)

**Impact** : ⚠️ **FAIBLE**
- Utilisé pour calculer le score de scalabilité
- **Alternative** : `volume_1m` et `volume_ratio_1m` sont déjà stockés

**Recommandation** :
- ✅ **Option 1** : Utiliser `volume_1m` comme proxy (déjà présent)
- ⚠️ **Option 2** : Ajouter `recent_volume_5m` si besoin d'analyse spécifique

---

### 3. **`score`** (Score de scalabilité)

**Impact** : ⚠️ **FAIBLE**
- Utilisé uniquement pour classer les paires lors du scan
- **Pas nécessaire pour ML** : Le score est une métrique composite qui peut être recalculé
- **Alternative** : Les composants du score (`spread_pct`, `book_depth`, `balance_score`, `volume_ratio_1m`, `atr_pct_1m`) sont déjà stockés

**Recommandation** :
- ✅ **Ne pas ajouter** : Le score peut être recalculé si nécessaire, et les features individuelles sont plus utiles pour ML

---

## ✅ Conclusion

### Paramètres Essentiels : **TOUS PRÉSENTS** ✅

Les paramètres **essentiels** pour l'analyse ML et le logging sont tous présents :
- ✅ `spread_pct` : Spread du carnet d'ordres
- ✅ `book_depth` : Profondeur du carnet
- ✅ `balance_score` : Équilibre bid/ask
- ✅ `bid_vol` / `ask_vol` : Volumes bid/ask
- ✅ `orderbook_imbalance_ratio` : Ratio d'équilibre

### Paramètres Optionnels : **MANQUANTS** ⚠️

Les paramètres suivants ne sont **pas stockés directement** mais peuvent être **reconstruits ou remplacés** :
- ⚠️ `vol5` / `vol15` → **Alternative** : `atr_pct_1m` / `atr_pct_5m` (déjà présents)
- ⚠️ `recentVolume` → **Alternative** : `volume_1m` / `volume_ratio_1m` (déjà présents)
- ⚠️ `score` → **Alternative** : Peut être recalculé depuis les features stockées

---

## 🎯 Recommandations

### ✅ **Action Immédiate : AUCUNE**

Le schéma SQL contient **tous les paramètres essentiels** pour :
- ✅ Logger les données de scalabilité
- ✅ Analyser la corrélation entre scalabilité et performance
- ✅ Entraîner des modèles ML

### ⚠️ **Action Optionnelle : Ajouter `vol5` et `vol15`**

Si vous souhaitez analyser spécifiquement la volatilité calculée par le scanner (différente de l'ATR), vous pouvez ajouter :

```sql
-- Dans scan_logs
ALTER TABLE scan_logs ADD COLUMN vol5 FLOAT;
ALTER TABLE scan_logs ADD COLUMN vol15 FLOAT;
ALTER TABLE scan_logs ADD COLUMN recent_volume_5m FLOAT;

-- Dans trades (optionnel)
ALTER TABLE trades ADD COLUMN entry_vol5 FLOAT;
ALTER TABLE trades ADD COLUMN entry_vol15 FLOAT;
ALTER TABLE trades ADD COLUMN exit_vol5 FLOAT;
ALTER TABLE trades ADD COLUMN exit_vol15 FLOAT;
```

**Mais ce n'est pas nécessaire** car :
- L'ATR (`atr_pct_1m`, `atr_pct_5m`) représente déjà la volatilité
- Le volume (`volume_1m`, `volume_ratio_1m`) représente déjà l'activité récente

---

## 📊 Utilisation Actuelle

D'après le code Python, les paramètres suivants sont **déjà loggés** :

### Dans `scan_logs` :
```python
# core/postgresql_datalogger.py - log_scan()
spread_pct=scan_data.get('spread_pct'),
book_depth=scan_data.get('book_depth'),
balance_score=scan_data.get('balance_score'),
bid_vol=scan_data.get('bid_vol'),
ask_vol=scan_data.get('ask_vol'),
```

### Dans `trades` :
```python
# core/postgresql_datalogger.py - log_trade()
entry_spread_pct=entry_scalability.get('spread_pct'),
entry_book_depth=entry_scalability.get('depth'),
entry_balance_score=entry_scalability.get('balance'),
entry_bid_vol=entry_scalability.get('bidVol'),
entry_ask_vol=entry_scalability.get('askVol'),
```

**Conclusion** : ✅ **Tous les paramètres essentiels sont déjà loggés correctement !**

Loading