cifre_ascunse() ruleaza pe tot repo-ul, nu pe etichete numite, si raporteaza doar cazul care chiar costa: eticheta cu cifra peste un <rect> plin, fie de aceeasi culoare (distanta RGB sub 60, cu transparenta amestecata peste alb), fie desenat dupa ea si deci acoperind-o indiferent de culoare. Al doilea caz a fost adaugat pentru ca m2d_directie avea text gri sub corp verde - aceeasi paguba, dar filtrul pe culoare singur il rata. Calibrare care conta: CW=6.2 e potrivit pentru bold si prea larg pentru rest, iar coada goala prindea candela de alaturi. CW=5.4 pentru nebold a eliminat primele doua rezultate, verificate pe ecran ca false pozitive. Ancora inversa: pe versiunile dinainte de reparatiile de azi filtrul prinde exact cele doua defecte confirmate vizual. Scanarea: 17 etichete in 13 diagrame, din care 9 cu gaura pe cifra. Noua din cele 17 sunt in summaries/06_MODUL_5, unde nu s-a facut niciodata o trecere de etichete; in gen/strategii, dupa trei treceri, au ramas cinci. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ThN7ixZrowca8aTGrK1MUJ
231 lines
12 KiB
Markdown
231 lines
12 KiB
Markdown
# Etichete peste desen în capitolele vechi — inventar, nu reparație
|
||
|
||
Scanare din 02.10.2026, cerută după ce `gen/eticheta_libera.py` a scos 9
|
||
suprapuneri din `mbp_ansamblu` (dintre care două invizibile fără unealtă).
|
||
Întrebarea: cât de răspândită e clasa asta în capitolele 01-05 și anexe.
|
||
|
||
**Nu s-a reparat nimic.** Niciun fișier din `gen/` sau `summaries/` nu a fost
|
||
atins pentru raportul ăsta.
|
||
|
||
## Cum s-a scanat
|
||
|
||
`eticheta_libera` e opt-in, pe etichete numite — pentru o scanare oarbă am
|
||
rulat aceeași geometrie peste **toate** etichetele, pe fiecare sub-panou
|
||
(`<svg>` imbricat) separat, ca să nu compar coordonate din panouri diferite.
|
||
Marjă 4 px. Au fost scoase din numărătoare trei clase de fals pozitiv:
|
||
|
||
- **A — eticheta stă pe linia ei.** Convenția diferă de la un generator la
|
||
altul (unele pun textul deasupra liniei, altele dedesubt), așa că „a ei" se
|
||
decide prin cea mai apropiată etichetă de linia respectivă, nu printr-un
|
||
offset fix.
|
||
- **B — capătul propriei săgeți sau linii de legătură.** Prin construcție
|
||
coada săgeții pornește din text.
|
||
- Dreptunghiuri mai late de 60 px sau mai înalte de 220 px: fundaluri de
|
||
panou, nu corpuri de candelă.
|
||
|
||
Ce rămâne — bucata „C" — e ce raportez mai jos.
|
||
|
||
| Capitol | Atingeri | A: linia proprie | B: coada săgeții | **Rămase (C)** |
|
||
|---|---|---|---|---|
|
||
| `01_buy_doji` | 149 | 59 | 60 | **30** |
|
||
| `02_mp2` | 93 | 52 | 20 | **21** |
|
||
| `03_m2d` | 67 | 18 | 27 | **22** |
|
||
| `04_selectia` | 30 | 12 | 14 | **4** |
|
||
| `05_atmi` | 45 | 16 | 11 | **18** |
|
||
| `A1_risc` | 0 | 0 | 0 | **0** |
|
||
| `A2_contradictii` | 0 | 0 | 0 | **0** |
|
||
| `A3_intrarea` | 23 | 18 | 3 | **2** |
|
||
|
||
`A1` și `A2` n-au diagrame de tip grafic — zero, nu „curat prin verificare".
|
||
|
||
`audit_diagrams.py` trece curat pe toate opt: clasa asta e invizibilă pentru
|
||
el, exact ca la `mbp_ansamblu`. Auditul prinde text peste text; aici e text
|
||
peste linie, peste polilinie sau peste corp de candelă.
|
||
|
||
## Verificate vizual (screenshot citit)
|
||
|
||
12 diagrame: `01`/`stop`, `perechi_tf`, `directie`, `trend`, `transe`;
|
||
`02`/`crossing`, `pivoti`, `trigger`, `exemplu`; `03`/`directie`, `stop`;
|
||
`05`/`orizont`; `A3`/`doua_variante`. Restul e clasificat **doar din
|
||
geometrie** și e marcat ca atare.
|
||
|
||
---
|
||
|
||
## MINCINOASE — schimbă ce înțelege cititorul
|
||
|
||
Trei, toate din aceeași familie: **cifra e tăiată sau acoperită**, nu mutată.
|
||
|
||
### 1. `03_m2d` — `gen/strategii/m2d_directie.py`, ambele panouri
|
||
|
||
`minimul din care a pornit mișcarea 99.80` intră cu ultimele caractere sub
|
||
corpul unei candele verzi. Pe ecran se citește **„…mișcarea 99.8"** — zecimala
|
||
dispare. Nivelul ăsta e condiția care decide dacă setup-ul mai e valid
|
||
(„close 99.30, sub 99.80: direcția mare s-a răsucit"), deci e fix cifra pe
|
||
care cititorul o caută. Apare de două ori, o dată în fiecare panou.
|
||
|
||
### 2. `05_atmi` — `gen/strategii/atmi_orizont.py`
|
||
|
||
Eticheta `2 săptămâni` a barei portocalii e acoperită de marginea din stânga a
|
||
casetei de citat de lângă ea; se vede **„2 săptămân"**. E singura cifră care
|
||
dă contrastul diagramei (luni/ani față de două săptămâni), iar diagrama există
|
||
tocmai ca să arate contradicția.
|
||
|
||
### 3. `01_buy_doji` — `gen/strategii/buy_doji_stop.py`, panoul de jos
|
||
|
||
`stop pus la ochi: 49.70` și `stopul din regulă: 49.20` stau la 12 px unul sub
|
||
altul, fiecare cu linia lui întreruptă, iar linia portocalie a lui 49.70 trece
|
||
prin caseta etichetei lui 49.20. Cifrele sunt scrise, deci nu citești un preț
|
||
greșit — dar nu poți atribui corect cele două linii, iar toată diagrama e
|
||
despre diferența dintre ele. **La limită**: o pun aici pentru că obiectul
|
||
diagramei e chiar distincția asta.
|
||
|
||
---
|
||
|
||
## DOAR URÂTE — cosmetice, pot aștepta
|
||
|
||
Restul de ~94. Se grupează în patru tipare; niciunul nu face să citești un
|
||
preț la înălțimea altuia.
|
||
|
||
**(a) Etichetă descriptivă peste un corp de candelă** — cel mai des. Textul
|
||
începe fix pe marginea unei candele, cu una-două litere peste ea; rămâne
|
||
lizibil pentru că fundalul candelei e la capătul rândului, nu sub el.
|
||
`01`: `ansamblu` (2), `directie`, `trend` (3), `fereastra` (2), `stop`,
|
||
`iesire`, `aplus`, `perechi_tf` · `02`: `perechi_tf`, `crossing`, `trigger`,
|
||
`aplus` (3), `exemplu` (2), `pivoti_excel` (3) · `03`: `directie`, `trigger`
|
||
(2), `iesire` (2), `exemplu` · `05`: `ansamblu`, `trigger` (3), `risc`,
|
||
`exemplu` · `A3`: `cazul_lui`.
|
||
|
||
**(b) Două niveluri prea apropiate, fiecare cu linia lui** — eticheta de jos
|
||
atinge linia de sus. `01`/`perechi_tf` (`weekly 105.20`, `retest: high doji`),
|
||
`02`/`crossing` (`crossing: 61.70 → 62.20`, `pivot weekly (cel MARE) 62.00`),
|
||
`02`/`perechi_tf`, `02`/`bottom`, `03`/`stop` (`512.87` față de `512.02`, la
|
||
9 px), `03`/`directie` (`close-ul candelei de semnal 100.60`),
|
||
`04`/`exemplu`, `A3`/`doua_variante` (`B: 1/3 = 101.55` / `B: 1/2 = 101.25`).
|
||
Verificate: toate rămân lizibile, pentru că prețul e scris în etichetă.
|
||
|
||
**(c) Linie de legătură lungă care traversează un alt text** — săgeți ce
|
||
pleacă din subsolul diagramei spre o bară din mijloc. `01`/`stop` (4),
|
||
`01`/`transe` (5), `01`/`directie` (2), `02`/`stop`, `03`/`directie` (4),
|
||
`03`/`secventa`, `03`/`iesire` (4), `04`/`ansamblu`, `05`/`perechi_tf` (2),
|
||
`05`/`trigger`.
|
||
|
||
**(d) Text peste linii de structură ale unei diagrame care nu e grafic de
|
||
preț** — coloane, axe de timp, chenare. `05`/`orizont` (9 din cele 18 ale
|
||
capitolului, în afară de „2 săptămâni"), `04`/`univers` (2),
|
||
`02`/`pivoti_excel`.
|
||
|
||
---
|
||
|
||
## Verdict
|
||
|
||
**Merită un lot, dar mic — cele trei mincinoase, nu cele 94.**
|
||
|
||
Clasa asta e răspândită (97 de atingeri reale în 6 capitole), dar aproape tot
|
||
e zgomot vizual pe care cititorul îl traversează fără să piardă informație.
|
||
Ce costă e doar cifra tăiată: la `03_m2d`/`directie` și `05_atmi`/`orizont`
|
||
numărul nu se poate citi întreg, iar la `01_buy_doji`/`stop` cele două stopuri
|
||
nu se pot atribui liniilor lor. Trei generatoare, trei mutări de etichetă —
|
||
o sesiune scurtă, nu un lot.
|
||
|
||
Pentru restul, lucrul util nu e repararea, ci **importul lui
|
||
`eticheta_libera` în generatoarele atinse data viitoare oricum**, pe
|
||
etichetele care poartă cifre. Așa clasa nu mai crește, fără să plătim acum
|
||
pentru 94 de suprapuneri inofensive.
|
||
|
||
Nota de scanare: `08_mbp` (comis) mai are două atingeri din tiparul (b), în
|
||
`mbp_stop` (`banda inferioară 623.90` la 9 px sub linia intrării) și
|
||
`mbp_exemplu` (`intrare short 660.00` la 2 px de `bandă superioară`). Ambele
|
||
lizibile; le las aici ca să nu se piardă.
|
||
|
||
---
|
||
|
||
## Adaugat pe 02.10, de la corectorul lui 07_mdsrt
|
||
|
||
Doua defecte vechi, vazute dar neatinse (nu erau pe lista lui):
|
||
|
||
- `mdsrt_short.svg` — titlul „Oglinda pe short (serie construita prin
|
||
rasturnarea exemplului long)" e traversat de coada sagetii „piciorul 1".
|
||
- `mdsrt_aplus`, panoul NU — `cds_n[18].l` e 94.50, dar nivelul se cheama
|
||
„primul low 94.60". E close-ul, nu low-ul.
|
||
|
||
---
|
||
|
||
## Filtrul orb: cifră peste un corp plin (scanare 02.10.2026)
|
||
|
||
Cerut după trierea vizuală a capitolelor 02 / 04 / A3, care a dat o singură
|
||
cauză fizică pentru suprapunerile care chiar schimbă ce citești: textul stă
|
||
peste un `<rect>` **plin**, iar caracterele nu se încalecă — dispar. Peste o
|
||
linie subțire (nivel, fitil, coadă de săgeată, chenar) textul rămâne lizibil,
|
||
oricât de urât arată. De aceea tiparele (a)-(d) de mai sus nu merită un lot,
|
||
dar clasa asta merită o listă.
|
||
|
||
`gen/eticheta_libera.py` are acum `cifre_ascunse(svg)`, care nu e opt-in pe
|
||
etichete numite — fiind îngustă, rulează oarbă:
|
||
|
||
.venv/bin/python gen/eticheta_libera.py gen/strategii/*.svg \
|
||
summaries/06_MODUL_5/*.md
|
||
|
||
Ce raportează: o etichetă **care conține o cifră**, peste un dreptunghi plin,
|
||
în unul din două cazuri — (1) **aceeași culoare** (verde pe verde: caracterul
|
||
dispare oricare ar fi ordinea de desenare), sau (2) **desenat peste** text
|
||
(corpul e pictat după etichetă, deci o acoperă indiferent de culoare — cazul
|
||
`m2d_directie` din lista „mincinoase"). Pragurile: distanță RGB sub 60,
|
||
suprapunere de cel puțin 4 px pe orizontală și 4 px pe verticală, opacitatea
|
||
dreptunghiului cel puțin 0.5 (zonele palide nu acoperă nimic). Transparența se
|
||
amestecă peste alb înainte de comparație, deci barele de volum la 0.55 nu se
|
||
aprind. Bucata „dispare ~" e aproximativă (lățime uniformă pe caracter), dar
|
||
spune dacă gaura cade pe cifră sau pe o literă.
|
||
|
||
Calibrare: lățimea din `_bbox` (CW = 6.2) e potrivită pentru bold și prea
|
||
largă pentru restul; la o etichetă lungă nebold coada goală de ~30 px prindea
|
||
candela de alături (`buy_doji_labu`, `mp2_aplus` — ambele verificate pe ecran,
|
||
false pozitive). Filtrul folosește CW = 5.4 pentru textul nebold. Pe versiunea
|
||
de dinaintea reparațiilor de azi, `mp2_exemplu` („intrare 577.00", 0 păstrat de
|
||
corpul verde) și `m2d_directie` (ambele panouri) sunt prinse — cele două
|
||
defecte reale confirmate vizual, deci filtrul nu e doar strâmt, e și calibrat.
|
||
|
||
### Rezultat: 17 etichete, în 13 diagrame
|
||
|
||
**Gaura cade pe cifră (9):**
|
||
|
||
```
|
||
m2d_iesire.svg: 'intrare 99.60' — dispare ~'60' (12 px, desenat peste)
|
||
mdsrt_exemplu.svg: 'TP1 624.70 = 1:1 (construit)' — dispare ~'1 (' (9 px, desenat peste)
|
||
mp2_short.svg: '128.97: crossing bear' — dispare ~'8.' (9 px, desenat peste)
|
||
02_patternuri_complexe_partea_a_treia.md #3: 'SL 29.40' — dispare ~'9.4' (9 px, aceeași culoare)
|
||
02_patternuri_complexe_partea_a_treia.md #4: 'target 62.00 = 65.00 − 3.00' — dispare ~'62.' (9 px, desenat peste)
|
||
02_patternuri_complexe_partea_a_treia.md #5: 'target 60.50 = 65.00 − 4.50' — dispare ~'0.5' (9 px, desenat peste)
|
||
02_patternuri_complexe_partea_a_treia.md #8: 'intrare short 89.00' — dispare ~' 8' (9 px, desenat peste)
|
||
02_patternuri_complexe_partea_a_treia.md #8: 'target 60.00 = 90.00 − 30.00' — dispare ~' 90' (9 px, desenat peste)
|
||
04_strategia_7_micis.md #6: 'intri cu 1/3 și rămâi cu 1/3' — dispare ~'1/3' (10 px, aceeași culoare)
|
||
```
|
||
|
||
**Gaura cade pe o literă (8) — eticheta are cifre, dar ce dispare e text:**
|
||
|
||
```
|
||
hammer_mbt10_bh_stop.svg: 'intrare 63.35 (close-ul confirmării)' — dispare ~'irm' (13 px, desenat peste)
|
||
hammer_mbt10_mbt_close.svg: 'la 55.30, în timpul zilei, semnalul' — dispare ~'sem' (13 px, aceeași culoare)
|
||
mdsrt_exemplu.svg: 'hammer închide 622.60, înapoi peste pivot' — dispare ~'oi' (9 px, aceeași culoare)
|
||
mdsrt_exemplu.svg: 'intri aici: close peste high-ul hammer-ului (622.70)' — dispare ~'r-' (9 px, aceeași culoare)
|
||
02_patternuri_complexe_partea_a_treia.md #5: 'suport (neckline) 65.00' — dispare ~'in' (9 px, desenat peste)
|
||
02_patternuri_complexe_partea_a_treia.md #7: 'limita de 50% 100.00' — dispare ~'ta ' (9 px, desenat peste)
|
||
03_patternuri_complexe_partea_a_patra.md #8: 'TP2 42.40 = batul steagului = 6.2R' — dispare ~' = ' (9 px, desenat peste)
|
||
05_strategia_8_dhrt.md #10: 'vârful consolidării 53.70 = locul crimei' — dispare ~'ons' (12 px, desenat peste)
|
||
```
|
||
|
||
Verificate pe ecran, cu zoom 4x: 6 din 17, luate din ambele categorii
|
||
(`m2d_iesire` „99.6|", `mdsrt_exemplu` „= 1:_ (construit)", `mp2_short` cu
|
||
„128" sub corpul roșu, `hammer_mbt10_bh_stop` „confirm_rii",
|
||
`02_patternuri…` „neckl_ne", `05_strategia_8_dhrt` „c_nsolidării"). Toate
|
||
șase, reale. Nu am reparat nimic și n-am atins capitolele 06, 09, 10, care
|
||
sunt în lucru la alt agent.
|
||
|
||
Două observații pentru cine ia lista:
|
||
|
||
- Jumătate din cazuri înghit o literă, nu o cifră: filtrul cere ca eticheta să
|
||
**conțină** o cifră, nu ca gaura să cadă pe ea. Dacă lotul trebuie scurtat,
|
||
primele 9 sunt cele care costă.
|
||
- Nouă din cele 17 sunt în `summaries/06_MODUL_5/` — adică în
|
||
diagramele de modul, nu în cele de strategie. Acolo nu s-a făcut niciodată
|
||
o trecere de etichete.
|