From af448dda692ff2421254479c8e68e1ce9c37d2f8 Mon Sep 17 00:00:00 2001 From: Claude Agent Date: Fri, 18 Sep 2026 19:10:59 +0000 Subject: [PATCH] strategii: capitolul 0 (harta) si uneltele pentru diagrame Harta e capitolul pe care il scriu eu: criteriul de ordonare a capitolelor si tabelul 'ce alegi cand' sunt decizii de continut, nu munca de volum. Agent nou .opencode/agents/grafician.md, unul per diagrama, ramificat pe TIP din specificatie: PRET trece obligatoriu prin svg_candles cu assert-urile din spec, CONCEPT nu. Substitutia marcajelor o face gen/strategii/substituie.py, nu agentii: la 37 de diagrame, altfel sapte agenti ar edita acelasi capitol. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01ThN7ixZrowca8aTGrK1MUJ --- .opencode/agents/grafician.md | 80 +++++++++++++++++++++++++ gen/strategii/substituie.py | 51 ++++++++++++++++ strategii/00_harta.md | 106 ++++++++++++++++++++++++++++++++++ 3 files changed, 237 insertions(+) create mode 100644 .opencode/agents/grafician.md create mode 100644 gen/strategii/substituie.py create mode 100644 strategii/00_harta.md diff --git a/.opencode/agents/grafician.md b/.opencode/agents/grafician.md new file mode 100644 index 0000000..192109d --- /dev/null +++ b/.opencode/agents/grafician.md @@ -0,0 +1,80 @@ +--- +description: Desenează o singură diagramă din documentul de strategii, dintr-o specificație .spec.txt +mode: all +model: opencode-go/deepseek-v4.1-flash +temperature: 0.1 +permission: + read: allow + glob: allow + grep: allow + list: allow + edit: allow + bash: allow + webfetch: deny + websearch: deny + task: deny +--- +Lucrezi în /workspace/atm-curs-dl. Desenezi **o singură diagramă**, din +specificația pe care ți-o dă promptul: `gen/strategii/.spec.txt`. + +**Fișierele tale, singurele pe care le atingi:** +- `gen/strategii/.py` — generatorul +- `gen/strategii/.svg` — rezultatul, scris de generator + +Nu atingi `.spec.txt`-ul (e sursa ta, o citești), nu atingi niciun `.md`, nu +atingi generatoarele altora, nu atingi `svg_candles.py` sau `pchart.py`. +Fără `git commit`. Fără sub-agenți. + +## Primul lucru: citește `TIP:` din specificație + +### `TIP: PRET` — grafic de preț + +Trece **obligatoriu** prin `svg_candles`. Nu desena candele de mână. + +1. Citește `STYLE.md`, secțiunea „Cum trebuie să arate un grafic de preț". +2. Citește `gen/exemplu_grafic_real.py` — **ăsta e modelul de copiat**: + `from_closes(...)` cu lista de close-uri din specificație, wick-uri, + volume, `Level` pentru entry/SL/TP, `Mark` ancorat pe candelă, `MA(20)`, + panou de volum. +3. Specificația îți dă lista exactă de close-uri, wick-urile speciale și + nivelurile. **Folosește-le ca atare.** Dacă un nivel din specificație nu + iese din serie (ex. low-ul barei 27 nu e 52.60), **ajustezi seria până + iese**, nu eticheta. Eticheta e adevărul; seria o construiești tu ca să-l + susțină. +4. **Assert-urile din specificație se scriu în generator, toate, ca `assert` + reale.** Ele sunt motivul pentru care diagrama asta e de încredere. Un + generator care rulează fără ele nu e terminat. + +### `TIP: CONCEPT` — diagramă conceptuală + +Funnel, matrice, cadrane, coloane comparate, tabel vizual. **Nu** folosești +`svg_candles` — acolo nu sunt candele. + +Formă: lățime 700, `font-family: system-ui, sans-serif`, minim 13px, text +negru pe alb, fără umbre, fără gradienți. Accente: `#777` gri, `#c00` roșu, +`#188a3e` verde, `#1a5fb4` albastru, `#b06000` portocaliu. + +## Regula de conținut, valabilă pentru amândouă + +**Fiecare cifră și fiecare etichetă din desen trebuie să fie în +specificație.** Un desen inventează mai ușor decât un paragraf, pentru că +arată convingător. Dacă specificația cere ceva ce nu poți desena corect, îl +lași afară și spui în raport de ce — nu improvizezi un înlocuitor. + +## Verificarea, în sarcina ta + +1. Rulezi generatorul. Trebuie să treacă toate assert-urile. +2. **Citești SVG-ul rezultat** și confirmi, uitându-te efectiv la el: + - fiecare etichetă are coordonate în interiorul pânzei; + - nu se suprapun două texte pe aceeași poziție; + - candelele sunt lipite, ca serie continuă, nu izolate; + - cifrele din etichete sunt cele din specificație. +3. Dacă ceva se bate, rearanjezi și rulezi din nou. + +Un generator care rulează fără eroare nu e dovadă că desenul se citește. + +## Raport, scurt + +Ce arată diagrama, ce assert-uri au trecut, ce ai ajustat în serie ca să iasă +nivelurile, ce ai lăsat afară din specificație și de ce, și ce ai verificat +citind SVG-ul. Lista, nu povestea. diff --git a/gen/strategii/substituie.py b/gen/strategii/substituie.py new file mode 100644 index 0000000..3e2d63d --- /dev/null +++ b/gen/strategii/substituie.py @@ -0,0 +1,51 @@ +"""Înlocuiește marcajele din strategii/*.md cu SVG-ul lui. + +Substituția o face scriptul ăsta, nu agenții: la 37 de diagrame, dacă fiecare +agent ar scrie în .md-ul capitolului, șapte agenți ar edita același fișier. + +Cheia din marcaj se caută ca gen/strategii/_.svg, unde slug-ul +vine din numele capitolului (01_buy_doji.md -> buy_doji). + + python3 gen/strategii/substituie.py # scrie + python3 gen/strategii/substituie.py --check # doar raportează, nu scrie +""" +import re +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parent.parent.parent +CAPITOLE = sorted((ROOT / "strategii").glob("0[1-8]_*.md")) +MARCAJ = re.compile(r"^$", re.M) + + +def slug(cale: Path) -> str: + """01_buy_doji.md -> buy_doji""" + return cale.stem.split("_", 1)[1] + + +def main() -> int: + check = "--check" in sys.argv + puse = lipsa = 0 + for cap in CAPITOLE: + text = cap.read_text() + s = slug(cap) + + def inlocuieste(m: re.Match) -> str: + nonlocal puse, lipsa + svg = ROOT / "gen" / "strategii" / f"{s}_{m.group(1)}.svg" + if not svg.exists(): + lipsa += 1 + print(f"LIPSĂ {cap.name}: {svg.name}") + return m.group(0) + puse += 1 + return svg.read_text().strip() + + nou = MARCAJ.sub(inlocuieste, text) + if nou != text and not check: + cap.write_text(nou) + print(f"{puse} diagrame puse, {lipsa} lipsă") + return 1 if lipsa else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/strategii/00_harta.md b/strategii/00_harta.md new file mode 100644 index 0000000..09a6e40 --- /dev/null +++ b/strategii/00_harta.md @@ -0,0 +1,106 @@ +# 0. Harta — cum se citește documentul și ce alegi când + +## Ce e documentul ăsta + +Cele nouă strategii din cursul ATM, scrise ca reguli executabile, nu ca +lecții. Fiecare capitol are aceleași trei niveluri și aceeași secțiune de +transfer, ca să le poți compara între ele fără să reciteșți tot. + +Sursa e materialul deja transcris și verificat din `summaries/` — fiecare +regulă, cifră și prag poartă trimiterea lui la fișier și linie. Ce nu există +în material scrie „materialul nu dă un prag aici", și rămâne așa: un prag +inventat într-un document de reguli ajunge executat cu bani reali. + +## Cele trei niveluri + +| Nivel | Când îl citești | Ce găsești | +|---|---|---| +| **0 — Ideea** | când deschizi capitolul prima oară, sau peste trei luni | ce ineficiență exploatează, diagrama întregului trade, fraza de decizie, când **nu** o folosești | +| **1 — Regulile** | la ecran, cu trade-ul în față | filtrul de context, setup, trigger DA/NU, SL cu motivul lui, TP și tranșe, sizing, checklist de tipărit | +| **2 — Nuanțele** | după 50 de trade-uri, când vrei să știi de ce ai pierdut | ce dă edge și **cât e confirmat**, setup A+ vs. mediocru, gotchas, contradicțiile din material, exemplul complet | + +**Nivelul 1 e executabil fără 0 și fără 2.** Dacă o regulă de acolo pare să +aibă nevoie de explicație, explicația e în 2, nu lipsă. + +## Cele două marcaje care contează + +> **Secțiunea „Transfer" e judecata mea, nu materialul cursului.** Cursul e +> scris pentru acțiuni și futures US, pe TradeStation, cu indicatorii lui. +> Tot ce spune documentul ăsta despre prop și despre BVB e extrapolare — utilă, +> argumentată, dar de verificat înainte să pui bani pe ea. + +**„cât e confirmat"**, coloana din tabelul de edge al fiecărui capitol. Vine +din `triaj/DECIZII.md`: câte loturi *independente* de sesiuni (perioade +diferite, agenți care nu s-au văzut) au găsit aceeași regulă. O regulă găsită +de 6 din 6 loturi peste 36 de zile nu cântărește cât una spusă o dată. + +## Ordinea capitolelor + +Nu e ordinea din curs. E ordinea în care merită să le înveți, iar criteriul +care a decis-o e unul singur: + +> **Dacă regula de intrare conține un indicator proprietar, pe BVB nu-ți +> rămâne nimic.** + +| Cap. | Strategie | BVB | Prop | De ce e pe locul ăsta | +|---|---|---|---|---| +| [1](01_buy_doji.md) | **Buy Doji / Sell Doji** | **da, long-only** | da | singura fără indicator proprietar în regula de intrare | +| [2](02_mp2.md) | **MP²** | **da** | parțial | autorul a explicat el însuși replicarea cu pivoți în Excel | +| [3](03_m2d.md) | **M2D** | nu | **da** | 100% mecanic, e ce rulezi deja | +| [4](04_selectia.md) | **Selecția simbolului** | parțial | da | nu e strategie, e filtrul dinaintea lor | +| [5](05_atmi.md) | **ATMI** | degradat | nu | investiție, nu trading: 10 min/trimestru | +| [6](06_hammer_mbt10.md) | **Buy hammer + MBT-10** | jumătate | parțial | hammer e standard, MBT-10 e cutie neagră | +| [7](07_mdsrt.md) | **MDSRT** | slab | parțial | Power e obligatoriu și e proprietar | +| [8](08_mbp.md) | **MBP / Mbappé** | **nu** | condiționat | TICUS = breadth pe toată piața US | +| [A1](A1_risc.md) | Risc și execuție | — | — | partea care decide dacă supraviețuiești | +| [A2](A2_contradictii.md) | Contradicțiile din material | — | — | unde cursul nu e de acord cu el însuși | + +## Ce alegi când + +**Vreau să încep undeva, astăzi.** → Capitolul 1, Buy Doji, pe daily. Nu are +nevoie de nimic ce nu poți reproduce, și te învață exact lucrurile pe care le +refolosesc toate celelalte: trend, nivel, confirmare la close, SL structural, +1:1 plus trail. + +**Vreau să tranzacționez la BVB.** → Capitolele 1 și 2, împreună. MP² îți dă +**unde** (bottom-ul, crossing-ul, calculat în Excel), Buy Doji îți dă **când** +(trigger-ul de candelă, standard). Exact golul pe care autorul l-a numit ca +nereplicabil — trigger-ul fin — îl umple stratul de candelă. + +**Sunt pe cont de prop.** → Capitolul 3 (M2D, ce rulezi acum) plus anexa A1. +Citește A1 înainte de orice altceva: limita zilnică se calculează **și pe +poziții deschise**, iar asta a costat deja pe cineva tranzacții care erau pe +profit. + +**Am bani pe care nu vreau să-i tranzacționez.** → Capitolul 5, ATMI. Zece +minute o dată la trei luni. Nu e trading și nu se amestecă cu restul contului. + +**Vreau să știu de ce am pierdut pe un setup care arăta bine.** → Nivelul 2 al +capitolului respectiv, secțiunea 2.2 (A+ vs. mediocru), apoi A2. + +## Trei lucruri pe care materialul le spune și care contrazic intuiția + +1. **Pe prop, limita zilnică se calculează și pe pozițiile deschise.** Unui + cursant i s-au închis automat tranzacții *care erau pe profit*, pentru că + pierderea flotantă atinsese limita + (`summaries/09_QA/26_2025-06-11.md:214-222`). +2. **Nu extinde TP-ul peste 1:1.** Profitul suplimentar vine din trailing, nu + din mutarea țintei fixe + (`summaries/03_MODUL_2/13_strategia_3_byh.md:319-321`). +3. **Nu adăuga filtre peste o strategie mecanică.** Orice filtru o face + discreționară, și statisticile citate pentru ea nu se mai aplică + (`summaries/09_QA/16_2025-10-07.md:83-106`). Contează direct dacă vrei să + pui selecția simbolului (capitolul 4) peste MP² (capitolul 2): atunci nu + mai e MP², e altceva, și trebuie retestat de la zero. + +## Ce nu e în document + +- **Formula MBT-10.** Nu e publică nicăieri în material, nici măcar + aproximativ. Capitolul 6 spune ce se poate reconstrui din ea și cât de mult + slăbește asta semnalul. +- **Cifrele complete ale backtesturilor.** Materialul citează rezultate + (39-40 de tranzacții pe SPY, win rate 72-80%) fără prețurile per tranzacție. + Nu poți reface testele, doar să-ți faci propriul eșantion. +- **Patru sesiuni de analiză zilnică nu sunt ținute de autor** (25, 26, 29 și + 30 iunie 2026 — un înlocuitor). Regulile care se sprijineau doar pe zilele + alea au fost scoase din material încă de la sumarizare.