SPEC DIAGRAMĂ — buy_doji_trend
==============================
tip:            PRET, două panouri alăturate (sau stivuite pe mobil)
destinație:     summaries/17_STRATEGII/01_buy_doji.md, Pasul 3, după doji_forma
cheie markdown: <!-- DIAGRAMA: trend -->
titlu SVG:      „Trendul dinaintea dojiului: 9 candele vs. 3 candele — exemplu construit"
stil:           candele lipite (gap 15-18, body_w 9-10), fără volum; open = close anterior;
                adnotări „ca la proști": zone dreptunghiulare + săgeți cu text (CE + DE CE).
                fitile implicite 0.15 peste/sub corp, cu excepțiile de mai jos.

CE TREBUIE SĂ DEMONSTREZE
-------------------------
Același doji (h 50.10 / l 49.25) și aceeași confirmare (close 50.40), după
două trenduri diferite. Stânga = ideal (9 candele). Dreapta = acceptat, dar
semnal mai slab (3 candele după un range) — și e cazul pe care scannerul cu
„Since Bear ≥ 8" nu-l găsește.

PANOUL STÂNGA — 12 bare
-----------------------
open[0] = 55.50; close-uri 0-9: 55.00, 54.30, 54.60, 53.60, 52.90, 53.10, 52.00,
51.20, 50.60, 49.65 (barele 1-9 = trendul de 9 candele)
10 doji      (49.65, 50.10, 49.25, 49.60)
11 confirmare (49.60, 50.55, 49.45, 50.40)
Zone(1..9) verde, etichetă „9 candele de scădere — ideal"; numerele 1..9 sub bare;
săgeată pe doji: „doji la capătul scăderii / vânzătorii s-au terminat".
Mark(11,"confirmare 50.40").
Text sub panou: „DA — ideal (8-10 candele)".

PANOUL DREAPTA — 13 bare
------------------------
open[0] = 51.40; close-uri 0-7 (range): 51.70, 51.20, 51.60, 51.10, 51.50,
51.30, 51.70, 51.40; apoi 8: 50.90, 9: 50.30, 10: 49.65 (3 candele în jos)
11 doji      (49.65, 50.10, 49.25, 49.60)
12 confirmare (49.60, 50.55, 49.45, 50.40)
Zone(8..10) portocalie, etichetă „doar 3 candele — merge, dar mai slab"; numerele
1..3 sub bare; săgeată pe range (bara 3): „înainte: preț pe loc, / nu scădere — de
aceea / semnalul e mai slab". Mark(11,"doji"), Mark(12,"confirmare 50.40").
Text sub panou: „ACCEPTAT, semnal mai slab · scannerul cu Since Bear ≥ 8 nu-l vede".

ASSERT-URI
----------
1. open[i] == close[i-1]; h/l cuprind o/c, pe ambele panouri.
2. Doji identic pe ambele (o,h,l,c) și abs(o-c) <= 0.10*(h-l).
3. Stânga: close[9] < close[0] - 5 și close[9] == min(close[0:10]);
   cel puțin 6 din barele 1..9 închid sub close-ul barei precedente.
4. Dreapta: max(close[0:8]) - min(close[0:8]) <= 0.60 (range);
   close[8] > close[9] > close[10] (exact 3 candele în jos).
5. Confirmarea închide peste 50.10 pe ambele.

NOTĂ DE RANDARE
---------------
Extra-urile desenate de mână (numere, titlu) folosesc `ch._render()`, nu
`ch.render()`: al doilea restaurează top/left după desen, deci `_y`/`_cx` ar da
coordonate deplasate cu offset-ul pe care Chart îl pune pentru titlu și pentru
etichetele zonelor. Titlul panoului de sus e desenat de mână din același motiv
(titlul din Chart cade exact peste eticheta zonei).

SURSA
-----
- 8-10 candele ideal; 2-3 candele au funcționat, semnal mai slab:
  summaries/03_MODUL_2/13_strategia_3_byh.md:185-187, 315-318.
- Scannerul cu Since Bear ≥ 8 pierde trendurile scurte:
  summaries/09_QA/28_2025-05-27.md:144-149; Since Bear numără de la sell
  momentum, nu candele descrescătoare: :43-46.
- Seria e CONSTRUITĂ.
