# TUTOR REPORT — CONFRONTO SPEC (Word) vs CODICE (Python) — Strategia Quadrato/Rettangolo

> **Data**: 2026-07-18 17:13 Europe/Rome (aggiornato 17:19 dopo correzione Mattia)
> **Autore**: Mavis (tutore REGOLE)
> **Aggiornamento di**: `_TUTOR_REPORT_2026-07-18_REGOLE_RETTANGOLO.md`
> **File Word di riferimento**: `STRATEGIA DEL QUADRATO.docx` (allegato Mattia 18/07 17:11)
> **NOTA**: la strategia è chiamata "**Quadrato**" nel file Word ufficiale, ma "**Rettangolo**" nel codice Python. Stessa strategia. Il Coder dovrà decidere se uniformare (rinominare `rettangolo_*` → `quadrato_*`) o tenere "rettangolo" per retrocompatibilità.
> **CORREZIONE 18/07 17:19**: la CRIT-2 ("TP al MID = zona vietata dalla spec") è **SBAGLIATA**. La spec dice "MAI TRADARE NEL MID" intendendo "MAI APRIRE posizioni nel MID" (= zona vietata per ENTRY). Il TP al MID è **corretto** perché è zona di **USCITA** (il sistema entra ai bordi TOP/BOTTOM, esce al MID). Errore di interpretazione di Mavis.

---

## ⚠️ CORREZIONE: la CRIT-2 NON È una violazione

**Errore mio** (corretto da Mattia 18/07 17:19): avevo interpretato la spec *"MAI TRADARE NELLA ZONA DEL PUNTO MEDIO"* come se significasse "MAI avere il TP nel MID". In realtà significa "MAI **APRIRE** posizioni nel MID" (= zona vietata per ENTRY).

**Cosa fa il codice** (corretto):
- Entry SHORT: `entry = rng_top` (TOP del range, zona di venditori) ✅
- Entry LONG: `entry = rng_bot` (BOTTOM del range, zona di compratori) ✅
- TP SHORT: `tp = rng_mid` (MID del range) ✅
- TP LONG: `tp = rng_mid` (MID del range) ✅

**Interpretazione corretta**:
- Il sistema entra ai **bordi** della scatola (TOP per SHORT, BOTTOM per LONG) — rispetta la regola
- Il sistema **esce al MID** della scatola (dove NON entra mai, ma dove può uscire) — è il TP naturale
- Questo è **coerente con la spec** "vendo al TOP, compro al BOTTOM" (entry ai bordi) + "TP al MID" (uscita a metà strada)

**CRIT-2 ELIMINATA dal report.** Le altre 6 violazioni restano da verificare (alcune potrebbero essere esagerazioni mie, da riconfermare).

---

## 📜 REGOLE UFFICIALI DAL FILE WORD (estratto)

### Sequenza operativa
1. **9:00 apertura Londra** → crea la scatola
2. **Scatola** = high/low del giorno precedente, definito come **9:00 London di ieri → 9:00 London di oggi**
3. **3 REGOLE FONDAMENTALI**:
   - MAI LONG sul TOP della scatola (zona di venditori istituzionali)
   - MAI SHORT sul BOTTOM della scatola (zona di compratori istituzionali)
   - MAI **APRIRE** posizioni nel MID (zona caotica, vietata per ENTRY)
4. Aspetta che il mercato **"testi"** (rompa e ritorni) uno dei due lati
5. Sul retest, attendi formazione di **2 candele specifiche**:
   - **prima candela opposta al segnale** (per SHORT: verde/rialzista; per LONG: rossa/ribassista) con **ombra in cima** (per SHORT) o in fondo (per LONG)
   - **seconda candela Doji Hammer** (nella direzione del segnale)
6. **ENTRY** al livello rotto (TOP per SHORT, BOTTOM per LONG)
7. **SL**: leggermente sopra il massimo della candela Doji Hammer (per SHORT) / sotto il minimo (per LONG) — **NON troppo stretto**
8. **TP**: al MID del range (zona caotica per ENTRY, OK per EXIT)
9. **Gestione** (testo del video, prassi trader):
   - Sposta SL a **pareggio** quando il prezzo va in profitto
   - **Trailing stop** attivo
   - **Risk:Reward ratio** rispettato (nell'esempio 4:1)

---

## 🔴 VIOLAZIONI ANCORA VALIDE (dopo correzione CRIT-2)

### CRIT-1 — **Timezone del range** (UTC vs London 9-9)
**SPEC**: Range = high/low **9:00 London di ieri → 9:00 London di oggi**
**CODICE**:
- `rettangolo_runner.py:69`: `prev_daily = daily[-2]` → Bybit daily K-line = **0:00-24:00 UTC**
- `sltp_engine.py:120`: idem
- `rettangolo_monitor.py:130-145`: USA custom box London 9-9 ✅
**VIOLA**: 3 implementazioni, 2 sbagliate + 1 giusta. La scatola che Mattia vede nel monitor **NON è la stessa scatola** usata per generare trade.
**CERTEZZA**: 🔴 ALTA. La spec dice testualmente "9:00 APERTURA DI LONDRA" e "il giorno precedente viene considerato dalla 9:00 alle 9:00". Il codice non lo fa.

### CRIT-3 — **Pattern 2 candele troppo permissivo**
**SPEC**: prima candela opposta al segnale **CON ombra** (rifiuto) + seconda candela **Doji Hammer**
**CODICE** `rettangolo_strategy.py:48-55`:
```python
# SHORT
cur_pattern = is_doji(cur) or has_hammer_bearish(cur) or cur_bearish
# LONG
cur_pattern = is_doji(cur) or has_hammer_bullish(cur) or cur_bullish
```
**VIOLA**:
- `or cur_bearish`/`or cur_bullish` ammette QUALSIASI candela rossa/verde → troppi falsi segnali
- La spec dice "**una candela verde e una candela rossa. e in particolare una candela DOJ Hammer**" → la seconda DEVE essere Doji/Hammer, non candela generica
**CERTEZZA**: 🔴 ALTA. Il commento nel codice stesso dice "seconda rossa/Doji/Hammer" ma il check ammette `cur_bearish` puro (qualsiasi rossa).

### CRIT-4 — **No filtro "primi 10-20 min post-apertura"**
**SPEC**: "particolarmente durante quei primi 10-20 min dopo l'apertura del mercato, perché il prezzo sta cacciando i gruppi più grandi di venditori e compratori. Il centro di questo range è dove troverai caos e movimento casuale"
**CODICE**: Nessun filtro temporale, compute_signal parte dalla prima candela intraday disponibile
**VIOLA**: trade possibili nella zona caotica del MID subito dopo le 9:00 London
**CERTEZZA**: 🟡 MEDIA. La spec lo dice ma è forse prassi più che regola hard. Da verificare se Mattia lo vuole codificato.

### CRIT-5 — **No SL a pareggio automatico** ⚠️ FORSE PRASSI NON REGOLA
**SPEC**: "Sposto gli stop a pareggio, così sono fuori dal rischio"
**CODICE** `sltp_engine.py:compute_sltp_rettangolo`: nessuna logica automatica per spostare SL a pareggio
**POSSIBILE VIOLA**: ma il testo dice "**sposto**" (faccio io), non "il sistema sposta automaticamente". Potrebbe essere **prassi manuale di Mattia**, non regola codificata.
**CERTEZZA**: 🟡 BASSA. Da chiedere conferma a Mattia.

### CRIT-6 — **No check Risk:Reward ratio** ⚠️ FORSE PRASSI NON REGOLA
**SPEC**: "rispetta i rapporti. Rischio Reward" (esempio 4:1)
**CODICE**: nessun check R:R minimo
**POSSIBILE VIOLA**: ma il testo dice "rispetta i rapporti" come prassi generale, non regola hard. Il Coder potrebbe implementare il check come safety net (es. R:R >= 2:1).
**CERTEZZA**: 🟡 BASSA. Da chiedere conferma a Mattia.

### WARN-2 — **Pattern 2 candele: ombra PRIMA candela** ⚠️ DA VERIFICARE
**SPEC**: "una prima candela verde con ombra in cima" (per SHORT) — descrizione narrativa
**CODICE**: non verifica l'ombra della prima candela
**POSSIBILE VIOLA**: la spec descrive il pattern a parole, non è una regola hard. La presenza dell'ombra potrebbe essere "descrittiva" del pattern, non "verificabile".
**CERTEZZA**: 🟡 MEDIA. Da chiedere a Mattia se l'ombra è regola hard o descrizione.

---

## 📊 TABELLA RIEPILOGATIVA (dopo correzione CRIT-2)

| # | Elemento | SPEC Word | CODICE Python | Stato | Certezza |
|---|---|---|---|---|---|
| 1 | Timezone range | 9:00-9:00 London | 0:00-24:00 UTC (runner + sltp) | 🔴 VIOLA | ALTA |
| 2 | TP SHORT | MID del range (zona di uscita) | `rng_mid` ✅ | ✅ OK | — |
| 3 | TP LONG | MID del range (zona di uscita) | `rng_mid` ✅ | ✅ OK | — |
| 4 | Pattern 2 candele | prima CON ombra + seconda Doji Hammer | `is_doji OR hammer OR generica` | 🔴 VIOLA | ALTA |
| 5 | Filtro 10-20 min post-9:00 | NON aprire nel MID post-apertura | Nessun filtro | 🟡 VIOLA (?) | MEDIA |
| 6 | SL a pareggio | "sposto" (prassi) | manuale (Mattia) | 🟡 DA VERIFICARE | BASSA |
| 7 | Check R:R ratio | "rispetta" (prassi) | nessun check | 🟡 DA VERIFICARE | BASSA |
| 8 | Entry al TOP/BOTTOM | sì | `entry = rng_top/bot` ✅ | ✅ OK | — |
| 9 | SL su Hammer ± buffer | "leggermente sopra/sotto" | `sl_ref * (1 ± 0.01)` ✅ | ✅ OK | — |
| 10 | Trailing stop | sì, "trascina i profitti" | presente, attivo dopo 1.5% | 🟡 PARZIALE | — |
| 11 | Leva 3x Charter | (implicito Charter) | `set_leverage(3)` ✅ | ✅ OK | — |
| 12 | Size 500 margin / 1500 nozionale | (implicito Charter) | `ORDER_VALUE_USD=1500` ✅ | ✅ OK | — |
| 13 | set_leverage prima di market | (implicito Charter) | sequenza fissa ✅ | ✅ OK | — |
| 14 | No media-up stesso symbol | (implicito Charter) | check in runner riga 96-103 ✅ | ✅ OK | — |

**Score rivisto**: 6 OK certi + 1 PARZIALE (trailing) + 2-3 da verificare. Solo 2 violazioni certe (CRIT-1, CRIT-3).

---

## 📋 INPUT SPECIFICI PER CODER (rivisti, solo quelli certi)

### Fix 1 (CRIT-1) — Timezone range unificato [SICURO]
- Creare `rettangolo_range.py` con funzione `compute_prev_daily_range(client, symbol)` che ritorna high/low di **9:00 London ieri → 9:00 London oggi**
- `rettangolo_runner.py`, `sltp_engine.py`, `rettangolo_monitor.py` devono importare questa funzione (eliminare le 3 implementazioni divergenti)

### Fix 2 (CRIT-3) — Pattern 2 candele stretto [SICURO]
- Rimuovere `or cur_bearish` / `or cur_bullish` dalle rispettive righe in `_is_two_candle_pattern`
- Risultato: solo `is_doji(cur) or has_hammer_bearish(cur)` per SHORT, idem per LONG

### Fix 3 (CRIT-4) — Filtro 10-20 min post-apertura [DA CONFERMARE]
- Aggiungere check in `compute_signal`: se candela corrente cade tra 9:00 e 9:20 London, ritorna None

### Fix 4 (CRIT-5) — SL a pareggio automatico [DA CONFERMARE]
- Solo se Mattia conferma che vuole il sistema automatico, non prassi manuale

### Fix 5 (CRIT-6) — Check R:R minimo [DA CONFERMARE]
- Solo se Mattia conferma che vuole un check automatico (es. R:R >= 2:1)

---

## ❓ DOMANDE PER MATTIA (riviste dopo correzione)

1. **CRIT-1 e CRIT-3 sono certe. Le confermi come fix da fare?**
2. **CRIT-4 (filtro 10-20 min)**: vuoi che il Coder lo implementi o è prassi che lasci a Mattia?
3. **CRIT-5 (SL a pareggio)**: vuoi che il Coder implementi lo spostamento automatico, o è roba che fai tu manualmente?
4. **CRIT-6 (R:R check)**: vuoi un check automatico R:R minimo, o è prassi tua?
5. **WARN-2 (ombra prima candela)**: è regola hard o descrizione narrativa?
6. **Naming**: la spec dice "Quadrato", il codice dice "Rettangolo". Vuoi uniformare o tenere "Rettangolo"?
7. **Backup**: vuoi che Coder crei `rettangolo_strategy.py.bak_20260718-1719` prima di toccare?
8. **Posizione BTC**: dopo i fix, vuoi che Coder rivaluti se è ancora coerente con le NUOVE regole?

---

## 📚 LESSON IMPARATA (per MEMORY)

- **Mai interpretare una regola in modo letterale**: "MAI TRADARE NEL MID" significa "MAI APRIRE posizioni nel MID", non "MAI avere ALCUNA attività nel MID". Il TP è zona di uscita, non di entrata. Il contesto operativo conta.
- **Quando la spec è ambigua, chiedere a Mattia PRIMA di segnalare come violazione**: la CRIT-2 era un'interpretazione mia, non una violazione reale. Avrei dovuto chiedere conferma.

---

## 🚨 STATO

- **Nessuna azione eseguita** da Mavis
- **Nessun file modificato**
- **Nessun processo killato**
- **Nessuna posizione chiusa**
- Report aggiornato (con correzione CRIT-2) pronto per **Verifier** → audit → **Coder** → fix → **Mavis** riverifica

**Output destinato a**: Verifier per audit. Se Verifier dà pass, passa a Coder con questo report come specifica.
