# atm-backtesting

Jurnal Excel manual pentru backtesting pe semnale blackbox (entry / SL / TP precalculate de alt trader sau de un indicator), cu comparație **5 strategii de management** side-by-side.

## Ce face

Introduci datele de bază ale fiecărui trade — dată, oră, strategie, indicator, TF, direcție, SL/TP0/TP1/TP2 în %, outcome — și Excel calculează automat:

- **R-multiples** și **$ P&L** pentru 5 strategii paralele
- **Dashboard**: Win Ratio, Average Win/Loss, Profit Factor, Risk:Reward, Expectancy, HWM Balance, Max Drawdown — câte un set per strategie
- **Breakdown** per Sesiune, Strategie, Indicator, Direcție
- **Equity curve** (5 linii — câte una per strategie)

Cele 5 strategii de management comparate:

| # | Strategie | Comportament |
|---|---|---|
| 1 | **TP0 only** | 100% poziție, close la TP0. Foarte conservator (bird in hand). |
| 2 | **TP1 only** | 100% poziție, OCO la SL sau TP1, fără intervenție. |
| 3 | **TP2 only** | 100% poziție, OCO la SL sau TP2 (let it ride). |
| 4 | **Hybrid + BE** | 50% close la TP0, mut SL la BE, 50% close la TP1. Recomandat de trader. |
| 5 | **Hybrid no BE** | 50% close la TP0, **fără** BE, 50% close la TP1. Compară direct cu #4 ca să vezi dacă BE-ul aduce valoare. |

Rezultatul: pe aceleași semnale, vezi care metodă de management produce cel mai mare expectancy, profit factor și cea mai mică drawdown.

### De ce 2 variante Hybrid (cu/fără BE)

BE move este o **regulă teoretică** de management, nu o decizie istorică pe fiecare trade. Așa că nu o marchezi manual pe rând — în schimb, ambele variante (cu și fără BE) se calculează automat pentru fiecare trade. Compari direct dacă regula BE-ului adaugă R-uri sau le scoate.

## Setup (o singură dată)

```powershell
pip install openpyxl
python scripts/generate_template.py
```

Se generează `data/backtest.xlsx`. Deschide-l în Excel sau LibreOffice Calc.

## Workflow zilnic

1. Deschide `data/backtest.xlsx` și du-te în sheet-ul **Trades**.
2. Adaugă un rând nou (continuă imediat sub ultimul completat — **nu lăsa goluri** între rânduri).
3. Completează coloanele galbene (input) — restul (albastre) se calculează automat:
   - **Data**, **Ora RO** (sesiunea + ziua se derivă automat de aici)
   - **Strategie** (M2D / EMA cross / ... — dropdown, editabil în Config)
   - **Indicator** (DIA / SPY / US30 / ... — dropdown)
   - **TF** (1min / 3min / 15min — dropdown; e TF-ul de entry, vezi mai jos)
   - **Direcție** (Buy / Sell — dropdown)
   - **SL %**, **TP0 %**, **TP1 %**, **TP2 %** — distanțe față de entry, în procente (ex. 0.30 pentru 0.30%)
   - **Outcome** (SL / TP0 / TP1 / TP2 — dropdown)
   - **Notes** (opțional)
4. Coloanele albastre derivate (Zi, Sesiune, R_*, $_*, Bal_* pentru cele 5 strategii) se umplu automat.
5. Mergi la sheet-ul **Dashboard** — metricile, breakdown-urile și equity curve se actualizează live.

### Coloana TF

Pentru M2D, TF-ul mic este TF-ul de entry, iar TF-ul mare e implicit:

| TF (input) | Perechea M2D |
|---|---|
| 1min | 1 / 5 min |
| 3min | 3 / 15 min |
| 15min | 15 / 60 min |

Dacă folosești o altă strategie cu pereche diferită, descrie în Notes.

### Cum se calculează Sesiunea automat

Pe baza Data + Ora RO, regulile M2D (vezi `strategie_M2D.md`):

| Sesiune | Condiție |
|---|---|
| **A1** | 16:35–17:00 RO, Mar/Mie/Joi |
| **A2** | 17:00–18:00 RO, Mar/Mie/Joi (sweet spot) |
| **A3** | 18:00–19:00 RO, Mar/Mie/Joi |
| **B**  | 22:00–22:45 RO, Mar/Mie/Joi (Power Hour) |
| **C**  | 15:30–16:30 RO (pre-NY chop / news risk), orice zi |
| **D**  | Luni sau Vineri |
| **Other** | În afara ferestrelor de mai sus |

> Notă: zilele FOMC/NFP/CPI ar trebui marcate ca C, dar formula nu detectează evenimente — marchează manual în Notes dacă e zi news majoră.

## Configurare

Sheet-ul **Config** permite editarea:

- **Account Size Start ($)** — balanța inițială (default $10,000)
- **Risk reper (%)** — reper configurabil; sumele $ din coloanele `$_*` folosesc `SL % × Account Size Start`
- Listele pentru dropdown-uri: Strategii, Indicatori, TF, Direcție, Outcome

La schimbarea Account Size, sumele $ din `$_*`, `Bal_*` și Dashboard se recalculează. Risk-ul efectiv pe trade este variabil: `SL % × Account Size Start`.

## Formule R-multiples (referință)

`SL_%`, `TP0_%`, `TP1_%`, `TP2_%` sunt distanțe pozitive față de entry, exprimate în procente.

Tabelul de mai jos arată R-multiple-ul rezultat pentru fiecare combinație (Outcome × Strategie):

| Outcome | TP0 only | TP1 only | TP2 only | Hybrid + BE | Hybrid no BE |
|---------|----------|----------|----------|-------------|--------------|
| **SL** | −1 | −1 | −1 | −1 | −1 |
| **TP0** | +TP0/SL | −1 | −1 | +0.5·TP0/SL | +0.5·TP0/SL − 0.5 |
| **TP1** | +TP0/SL | +TP1/SL | −1 | +0.5·(TP0+TP1)/SL | +0.5·(TP0+TP1)/SL |
| **TP2** | +TP0/SL | +TP1/SL | +TP2/SL | +0.5·(TP0+TP1)/SL | +0.5·(TP0+TP1)/SL |

**Citirea Outcome-ului**:
- `SL` — prețul a atins SL fără să atingă vreodată TP0 (loss complet).
- `TP0` — prețul a atins TP0, dar nu și TP1 (ulterior fie a venit înapoi la SL, fie a fost închis la BE pentru variantele cu BE move).
- `TP1` — prețul a atins TP1 (a trecut prin TP0).
- `TP2` — prețul a atins TP2 (a trecut prin TP0 și TP1).

**Asumpții de simulare**:
- `TP1 only` și `TP2 only` simulează OCO pur, fără intervenție manuală. Outcome=`TP0` se închide la SL (presupunere worst-case).
- `TP2 only` cu Outcome=`TP1` se închide la SL (TP1 a fost atins, dar SL ar fi venit înainte de TP2).
- Diferența dintre Hybrid + BE și Hybrid no BE apare doar când Outcome=`TP0`; la TP1/TP2 ambele dau identic.

## Regenerare template

Dacă strici structura Excel-ului accidental sau modifici `scripts/generate_template.py`:

```powershell
python scripts/generate_template.py
```

Atenție: **suprascrie** `data/backtest.xlsx`. Fă backup la rândurile tale înainte (copy-paste într-un alt fișier sau export CSV).

## Decizii GO LIVE / ABANDON

Vezi `STOPPING_RULE.md` — threshold-urile semnate (N≥40, WR≥55%, Expectancy≥+0.20R) și caveat-urile metodologice.

## Fișiere

```
atm-backtesting/
├── data/
│   └── backtest.xlsx          # source of truth — jurnalul tău
├── scripts/
│   └── generate_template.py   # regenerator template
├── strategie_M2D.md           # referință reguli M2D (Buy/Sell setup, SL/TP, sesiuni)
├── calendar_evenimente.yaml   # calendar news (FOMC/NFP/CPI etc.) pentru identificare manuală sesiune
├── STOPPING_RULE.md           # threshold-uri decizie + caveats semnate
├── pyproject.toml             # dependență: openpyxl
└── README.md                  # acest fișier
```
