Files
atm-backtesting/README.md
Marius 017921794e reboot: replace vision pipeline with Excel-first manual journal
Pipeline-ul vision (screenshot extraction + CSV append + Python stats) era
greoi pentru backtest semi-manual. Înlocuit cu un singur template Excel
generat din openpyxl + Dashboard cu comparație 5 strategii management pe
aceleași semnale blackbox.

- Strategii: TP0 only / TP1 only / TP2 only / Hybrid+BE / Hybrid no BE
- Input minim (12 coloane galbene); Sesiune și Zi derivate auto din Data+Ora
- Dashboard cu coloana "Cum citesc" + secțiune Glosar cu exemple concrete
- Breakdowns PER SESIUNE / STRATEGIE / INDICATOR / DIRECȚIE
- Equity curve cu 5 linii

Eliminat: m2d-extractor agent, /backtest, /batch, /m2d-log, /stats slash
commands, scripts/{append_row,pl_calc,stats,manual_log,regenerate_md,
vision_schema,calendar_parse}.py, tests/, screenshots/, data/extractions/.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 18:30:33 +03:00

145 lines
6.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 only / 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:3517:00 RO, Mar/Mie/Joi |
| **A2** | 17:0018:00 RO, Mar/Mie/Joi (sweet spot) |
| **A3** | 18:0019:00 RO, Mar/Mie/Joi |
| **B** | 22:0022:45 RO, Mar/Mie/Joi (Power Hour) |
| **C** | 15:3016: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 per Trade (%)** — % din account riscat per trade (default 1.0%)
- Listele pentru dropdown-uri: Strategii, Indicatori, TF, Direcție, Outcome
La schimbarea Account Size sau Risk %, toate sumele $ din Trades și Dashboard se recalculează.
## 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 only** | +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 only` — 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 only` 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 only`; 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
```