etichete: cele trei care mint, si doua bug-uri de infrastructura
Cele trei, toate verificate pe ecran dupa reparatie: "minimul din care a pornit miscarea 99.80" intra sub o candela si se citea "99.8" (m2d_directie); "2 saptamani" era acoperita de caseta de citat si se citea "2 saptaman" (atmi_orizont); cele doua stopuri de la buy_doji_stop stateau la 12 px cu liniile incrucisate peste etichete, iar diagrama e tocmai despre diferenta dintre ele - acum fiecare sta la capatul propriei linii. Doua bug-uri gasite pe drum, mai grave decat ce reparam: 1. render_html trecea SVG-urile prin markdown. In mp2_pivoti_excel cele doua asteriscuri din formulele Excel (=2*E2-C2) deveneau un <em> pus peste </text>, iar parserul browserului arunca restul SVG-ului: jumatate de tabel lipsea din pagina, fara niciun semn in .md sau in audit. Acum SVG-urile sunt scoase din calea lui markdown si puse inapoi dupa, cu assert ca nu ramane niciun marcaj. 2. eticheta_libera nu citea <g transform>, deci la diagramele cu panouri compara coordonate din sisteme diferite si rata suprapuneri reale. Acum aplatizeaza translate/scale pe <g>-uri imbricate. Prima diagrama pe care a prins-o dupa reparatie e chiar una deja comisa, din capitolul 10. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ThN7ixZrowca8aTGrK1MUJ
This commit is contained in:
@@ -20,9 +20,11 @@ sys.path.insert(0, "/workspace/atm-curs-dl")
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
from svg_candles import Arrow, Candle, Chart, Mark # noqa: E402
|
||||
import m2d_duo as duo # noqa: E402
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
|
||||
from eticheta_libera import eticheta_libera # noqa: E402
|
||||
|
||||
OUT = Path(__file__).with_suffix(".svg")
|
||||
W, SCALE, GAP, LEFT = 680, 46.0, 46, 74
|
||||
W, SCALE, GAP, LEFT = 680, 46.0, 46, 60 # LEFT 74->60: eticheta cyan din dreapta atingea corpul ultimei candele
|
||||
GREEN, RED, BLUE, CYAN, GREY = "#188a3e", "#c00", "#1a5fb4", "#0891b2", "#555"
|
||||
|
||||
# --- aceleași candele de 15 min ca în diagrama de ansamblu -----------------
|
||||
@@ -49,6 +51,9 @@ assert DA[:SIG + 2] == NU[:SIG + 2], "panourile nu pornesc din aceeași serie"
|
||||
SEMNAL = BASE[SIG][3] # 100.60 — același nivel ca în diagrama de ansamblu
|
||||
REF_LOW = BASE[SIG][2] # 99.80 — minimul din care a pornit mișcarea
|
||||
assert BASE[SIG][3] > BASE[SIG][0], "candela de semnal nu e verde"
|
||||
# pe un rând, eticheta ajungea cu „99.80" sub corpul candelei 4 (99.30-99.85)
|
||||
# și se citea „99.8"; pe două rânduri se termină înainte de candela 2
|
||||
REF_TXT = ["minimul din care a pornit", "mișcarea 99.80"]
|
||||
|
||||
# DA: nicio candelă de după semnal nu se închide sub minimul de referință
|
||||
assert all(b[3] > REF_LOW for b in DA[SIG + 1:]), "DA: o candelă închide sub referință"
|
||||
@@ -94,14 +99,12 @@ extra_da = (duo.titlu(TITLU_DA, color=GREEN)
|
||||
+ duo.zone(ch_da, SIG, 7, "zona în care ai voie long", GREEN, pad=20, lift=26)
|
||||
+ duo.level(ch_da, SEMNAL, ["close-ul candelei de semnal 100.60"], CYAN, W,
|
||||
below=False, at_left=False)
|
||||
+ duo.level(ch_da, REF_LOW, ["minimul din care a pornit mișcarea 99.80"],
|
||||
GREY, W, below=True, dash="2 3"))
|
||||
+ duo.level(ch_da, REF_LOW, REF_TXT, GREY, W, below=True, dash="2 3"))
|
||||
extra_nu = (duo.titlu(TITLU_NU, color=RED)
|
||||
+ duo.zone(ch_nu, 7, 8, "setup anulat", RED, pad=20)
|
||||
+ duo.level(ch_nu, SEMNAL, ["close-ul candelei de semnal 100.60"], CYAN, W,
|
||||
below=False, at_left=False)
|
||||
+ duo.level(ch_nu, REF_LOW, ["minimul din care a pornit mișcarea 99.80"],
|
||||
GREY, W, below=True, dash="2 3"))
|
||||
+ duo.level(ch_nu, REF_LOW, REF_TXT, GREY, W, below=True, dash="2 3"))
|
||||
|
||||
svg, H, n = duo.build(
|
||||
[("DA", body_da, h_da, extra_da), ("NU", body_nu, h_nu, extra_nu)],
|
||||
@@ -109,6 +112,10 @@ svg, H, n = duo.build(
|
||||
"Pe 15 min se citește DIRECȚIA, nu intrarea. Intrarea vine de pe 3 min (pasul 3)."],
|
||||
W)
|
||||
duo.fara_preturi_straine(svg, [SEMNAL, REF_LOW, NU[7][3]])
|
||||
# etichetele de nivel stau lipite de linia lor prin construcție, deci pentru ele
|
||||
# contează doar corpurile candelelor (`segmente=False`)
|
||||
eticheta_libera(svg, "m2d_directie", set(REF_TXT) | {
|
||||
"close-ul candelei de semnal 100.60"}, rects=True, segmente=False)
|
||||
OUT.write_text(svg, encoding="utf-8")
|
||||
print(f"scris {OUT} ({W}x{H:.0f}), {n} etichete | semnal {SEMNAL:.2f}, referință {REF_LOW:.2f} | "
|
||||
f"DA: ultima închidere {DA[-1][3]:.2f} | NU: candela 7 închide {NU[7][3]:.2f}")
|
||||
|
||||
Reference in New Issue
Block a user