svg_candles: cautarea nivelurilor, scoasa in functie comuna; 11 generatoare reparate
Unsprezece generatoare nu mai rulau deloc la HEAD: cautau <line x1="24", iar svg_candles scrie x1="24.0" de cand are Level.i0. Un generator mort inseamna ca diagrama nu mai poate fi regenerata, si nimeni n-ar fi aflat pana cand ar fi incercat cineva, peste luni. Cele 11 copii ale aceluiasi regex au disparut: y_niveluri() si offset_render() se agata acum de semnatura liniei de Level (stroke-width + dasharray), nu de x-ul ei. Caz nou in selftest, cu Level(i0=) si panou de volum - combinatia la care varianta veche fie crapa, fie prindea tacut linia de zero a volumului. 41 de SVG-uri regenerate, toate identice cu cele comise dupa normalizarea x1=24 -> x1=24.0, deci niciun desen n-a sarit. Verificarea asta a prins o regresie reala: la buy_doji_transe substitutia lasase scaderea veche pe randul urmator, offsetul se scadea de doua ori si desenul urca 92 px. Inca doua generatoare moarte din aceeasi familie, gasite pe drum (intrarea_cazul_lui, intrarea_doua_variante): desenau peste grafic citind ch._y() fara offset. Nu crapau zgomotos - produceau suprapuneri la 22 px. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ThN7ixZrowca8aTGrK1MUJ
This commit is contained in:
@@ -18,7 +18,8 @@ import sys
|
||||
from pathlib import Path
|
||||
|
||||
sys.path.insert(0, "/workspace/atm-curs-dl")
|
||||
from svg_candles import Chart, Level, Mark, MA, from_closes # noqa: E402
|
||||
from svg_candles import (Chart, Level, Mark, MA, from_closes, # noqa: E402
|
||||
offset_render)
|
||||
|
||||
OUT = Path(__file__).resolve().parent / "intrarea_cazul_lui.svg"
|
||||
|
||||
@@ -119,16 +120,26 @@ svg = ch.render()
|
||||
# tăia, așa că eticheta lor stă în golul de lângă candelă (roșia: ▲ chiar sub
|
||||
# low-urile barelor 16+, peste suport; ieșirea: deasupra barelor 14-19,
|
||||
# terminată în bara 19, cu linie de legătură).
|
||||
y19 = ch._y(103.30)
|
||||
# render() ridică `top` pentru titlu și îl pune la loc: ch._y() de aici e cu
|
||||
# OFF mai sus decât desenul. Fără asta, legenda de SMA cădea peste titlu și
|
||||
# „SL 99.90" peste „suport weekly 100.00" — se vedea în SVG-ul regenerat.
|
||||
OFF = offset_render(svg, ch)
|
||||
|
||||
|
||||
def Y(p):
|
||||
return ch._y(p) + OFF
|
||||
|
||||
|
||||
y19 = Y(103.30)
|
||||
extra = [
|
||||
f'<text x="{ch._cx(15) - 5:.0f}" y="{ch._y(100.20):.1f}" fill="{RED}" '
|
||||
f'<text x="{ch._cx(15) - 5:.0f}" y="{Y(100.20):.1f}" fill="{RED}" '
|
||||
f'style="font-weight:bold">▲ roșie mare: −0.68R flotant</text>',
|
||||
f'<text x="{ch._cx(19) + 4:.0f}" y="{y19:.1f}" fill="{ORANGE}" text-anchor="end" '
|
||||
f'style="font-weight:bold">ieși aici: 102.60 = +0.23R</text>',
|
||||
f'<line x1="{ch._cx(19):.1f}" y1="{y19 + 4:.1f}" x2="{ch._cx(19):.1f}" '
|
||||
f'y2="{ch._y(cds[19].h) - 3:.1f}" stroke="{ORANGE}" stroke-width="1"/>',
|
||||
f'<text x="30" y="{ch._y(SL) + 15:.1f}" fill="{RED}">SL 99.90 (low 4 candele)</text>',
|
||||
f'<text x="24" y="{ch.top + 12:.1f}" fill="#555">'
|
||||
f'y2="{Y(cds[19].h) - 3:.1f}" stroke="{ORANGE}" stroke-width="1"/>',
|
||||
f'<text x="30" y="{Y(SL) + 15:.1f}" fill="{RED}">SL 99.90 (low 4 candele)</text>',
|
||||
f'<text x="24" y="{ch.top + OFF + 12:.1f}" fill="#555">'
|
||||
f'<tspan fill="{MA5_C}">── SMA 5</tspan> / <tspan fill="{MA10_C}">- - SMA 10</tspan> ilustrative</text>',
|
||||
]
|
||||
legend = [
|
||||
|
||||
Reference in New Issue
Block a user