MODUL 5: ultimele patru suprapuneri de eticheta, si verificatorul scos in gen/eticheta_libera.py

Assert-ul care verifica daca o eticheta sta lipita de o linie a devenit modul
propriu, importat din ambele generatoare de patternuri. Vede acum si
<polyline> (mediile mobile - punctul lui orb) si, optional, corpurile
candelelor. Avea si un bug tacut: regexul cerea culoare pe 6 cifre, deci sarea
peste tot ce e desenat cu #c00, adica exact sagetile si nivelurile rosii. Are
demo() cu self-check.

La bull_flag eticheta SMA-20 nu e mutabila din generator - pozitia ei o
calculeaza svg_candles - asa ca media e numita in caption, ca la cup with
handle.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ThN7ixZrowca8aTGrK1MUJ
This commit is contained in:
Claude Agent
2026-10-02 02:32:27 +00:00
parent aea592091e
commit 0dd358802d
7 changed files with 171 additions and 80 deletions

View File

@@ -910,23 +910,23 @@ diferența față de rounding bottom, pentru că formele sunt aproape identice:<
vezi după o urcare, e o ceașcă. Aceeași curbă, două interpretări diferite,
pentru că trendul dinainte e diferit.</p>
<!--SVG:cu-->
<p><svg viewBox="0 0 620 602" xmlns="http://www.w3.org/2000/svg" style="width:100%;height:auto;font:12px sans-serif">
<p><svg viewBox="0 0 700 602" xmlns="http://www.w3.org/2000/svg" style="width:100%;height:auto;font:12px sans-serif">
<text x="24" y="114" fill="#333" style="font-weight:bold">Cup with handle — exemplu construit (fără ticker), monthly</text>
<rect x="396.5" y="290.0" width="64.0" height="64.7" fill="#b06000" fill-opacity="0.08" stroke="#b06000" stroke-width="1"/>
<text x="396.5" y="285.0" fill="#b06000" style="font-weight:bold">mânerul</text>
<line x1="24.0" y1="128.3" x2="606" y2="128.3" stroke="#1a5fb4" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="592" y="122.3" fill="#1a5fb4" text-anchor="end">target 160.00 = 120.00 + 40.00</text>
<line x1="24.0" y1="292.1" x2="606" y2="292.1" stroke="#188a3e" stroke-width="1.5" stroke-dasharray="4 3"/>
<line x1="24.0" y1="128.3" x2="686" y2="128.3" stroke="#1a5fb4" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="672" y="122.3" fill="#1a5fb4" text-anchor="end">target 160.00 = 120.00 + 40.00</text>
<line x1="24.0" y1="292.1" x2="686" y2="292.1" stroke="#188a3e" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="30.0" y="286.1" fill="#188a3e">intrare 121.00</text>
<line x1="24.0" y1="296.3" x2="606" y2="296.3" stroke="#c00" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="592" y="290.3" fill="#c00" text-anchor="end">rezistență 120.00</text>
<line x1="24.0" y1="346.7" x2="606" y2="346.7" stroke="#b06000" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="592" y="340.7" fill="#b06000" text-anchor="end">minimul mânerului 108.00</text>
<line x1="24.0" y1="350.9" x2="606" y2="350.9" stroke="#c00" stroke-width="1.5" stroke-dasharray="4 3"/>
<line x1="24.0" y1="296.3" x2="686" y2="296.3" stroke="#c00" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="672" y="290.3" fill="#c00" text-anchor="end">rezistență 120.00</text>
<line x1="24.0" y1="346.7" x2="686" y2="346.7" stroke="#b06000" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="672" y="340.7" fill="#b06000" text-anchor="end">minimul mânerului 108.00</text>
<line x1="24.0" y1="350.9" x2="686" y2="350.9" stroke="#c00" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="30.0" y="344.9" fill="#c00">SL 107.00</text>
<line x1="24.0" y1="380.3" x2="606" y2="380.3" stroke="#8b5cf6" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="592" y="374.3" fill="#8b5cf6" text-anchor="end">limita de 50% 100.00</text>
<line x1="24.0" y1="464.3" x2="606" y2="464.3" stroke="#b06000" stroke-width="1.5" stroke-dasharray="4 3"/>
<line x1="24.0" y1="380.3" x2="686" y2="380.3" stroke="#8b5cf6" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="672" y="374.3" fill="#8b5cf6" text-anchor="end">limita de 50% 100.00</text>
<line x1="24.0" y1="464.3" x2="686" y2="464.3" stroke="#b06000" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="30.0" y="458.3" fill="#b06000">fundul ceștii 80.00</text>
<polyline points="331.0,388.3 346.0,385.8 361.0,383.2 376.0,380.9 391.0,379.1 406.0,379.1 421.0,380.7 436.0,382.3 451.0,381.9 466.0,378.7 481.0,373.5 496.0,365.3 511.0,354.1 526.0,341.0 541.0,326.7 556.0,310.8 571.0,294.9" fill="none" stroke="#777" stroke-width="1.5" stroke-dasharray="4 3"/>
<line x1="46.0" y1="388.7" x2="46.0" y2="405.5" stroke="#1a1a1a" stroke-width="1.2"/>
@@ -1001,7 +1001,7 @@ pentru că trendul dinainte e diferit.</p>
<rect x="551.5" y="140.9" width="9" height="29.4" fill="#188a3e"/>
<line x1="571.0" y1="122.0" x2="571.0" y2="147.2" stroke="#1a1a1a" stroke-width="1.2"/>
<rect x="566.5" y="126.2" width="9" height="14.7" fill="#188a3e"/>
<line x1="24" y1="560.3" x2="606" y2="560.3" stroke="#888"/>
<line x1="24" y1="560.3" x2="686" y2="560.3" stroke="#888"/>
<rect x="41.5" y="530.7" width="9" height="29.6" fill="#188a3e" opacity="0.55"/>
<rect x="56.5" y="528.0" width="9" height="32.3" fill="#188a3e" opacity="0.55"/>
<rect x="71.5" y="525.3" width="9" height="35.0" fill="#188a3e" opacity="0.55"/>
@@ -1042,7 +1042,7 @@ pentru că trendul dinainte e diferit.</p>
<text x="121.0" y="286.3" fill="#c00" text-anchor="middle" style="font-weight:bold">top 1</text>
<text x="391.0" y="268.3" fill="#c00" text-anchor="middle" style="font-weight:bold">top 2</text>
<text x="241.0" y="478.3" fill="#b06000" text-anchor="middle" style="font-weight:bold">fundul ceștii</text>
<text x="481.0" y="263.9" fill="#188a3e" text-anchor="middle" style="font-weight:bold">breakout</text>
<text x="481.0" y="209.9" fill="#188a3e" text-anchor="middle" style="font-weight:bold">breakout</text>
<text x="24" y="590" fill="#555">Mânerul: 4 bare, −30% din adâncime. Două top-uri la 120.00 = double top. Gri punctat: SMA-20.</text>
</svg></p>
<p>Părțile formei, cu numele din curs:

View File

@@ -920,23 +920,23 @@ vezi după o urcare, e o ceașcă. Aceeași curbă, două interpretări diferite
pentru că trendul dinainte e diferit.
<!--SVG:cu-->
<svg viewBox="0 0 620 602" xmlns="http://www.w3.org/2000/svg" style="width:100%;height:auto;font:12px sans-serif">
<svg viewBox="0 0 700 602" xmlns="http://www.w3.org/2000/svg" style="width:100%;height:auto;font:12px sans-serif">
<text x="24" y="114" fill="#333" style="font-weight:bold">Cup with handle — exemplu construit (fără ticker), monthly</text>
<rect x="396.5" y="290.0" width="64.0" height="64.7" fill="#b06000" fill-opacity="0.08" stroke="#b06000" stroke-width="1"/>
<text x="396.5" y="285.0" fill="#b06000" style="font-weight:bold">mânerul</text>
<line x1="24.0" y1="128.3" x2="606" y2="128.3" stroke="#1a5fb4" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="592" y="122.3" fill="#1a5fb4" text-anchor="end">target 160.00 = 120.00 + 40.00</text>
<line x1="24.0" y1="292.1" x2="606" y2="292.1" stroke="#188a3e" stroke-width="1.5" stroke-dasharray="4 3"/>
<line x1="24.0" y1="128.3" x2="686" y2="128.3" stroke="#1a5fb4" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="672" y="122.3" fill="#1a5fb4" text-anchor="end">target 160.00 = 120.00 + 40.00</text>
<line x1="24.0" y1="292.1" x2="686" y2="292.1" stroke="#188a3e" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="30.0" y="286.1" fill="#188a3e">intrare 121.00</text>
<line x1="24.0" y1="296.3" x2="606" y2="296.3" stroke="#c00" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="592" y="290.3" fill="#c00" text-anchor="end">rezistență 120.00</text>
<line x1="24.0" y1="346.7" x2="606" y2="346.7" stroke="#b06000" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="592" y="340.7" fill="#b06000" text-anchor="end">minimul mânerului 108.00</text>
<line x1="24.0" y1="350.9" x2="606" y2="350.9" stroke="#c00" stroke-width="1.5" stroke-dasharray="4 3"/>
<line x1="24.0" y1="296.3" x2="686" y2="296.3" stroke="#c00" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="672" y="290.3" fill="#c00" text-anchor="end">rezistență 120.00</text>
<line x1="24.0" y1="346.7" x2="686" y2="346.7" stroke="#b06000" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="672" y="340.7" fill="#b06000" text-anchor="end">minimul mânerului 108.00</text>
<line x1="24.0" y1="350.9" x2="686" y2="350.9" stroke="#c00" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="30.0" y="344.9" fill="#c00">SL 107.00</text>
<line x1="24.0" y1="380.3" x2="606" y2="380.3" stroke="#8b5cf6" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="592" y="374.3" fill="#8b5cf6" text-anchor="end">limita de 50% 100.00</text>
<line x1="24.0" y1="464.3" x2="606" y2="464.3" stroke="#b06000" stroke-width="1.5" stroke-dasharray="4 3"/>
<line x1="24.0" y1="380.3" x2="686" y2="380.3" stroke="#8b5cf6" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="672" y="374.3" fill="#8b5cf6" text-anchor="end">limita de 50% 100.00</text>
<line x1="24.0" y1="464.3" x2="686" y2="464.3" stroke="#b06000" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="30.0" y="458.3" fill="#b06000">fundul ceștii 80.00</text>
<polyline points="331.0,388.3 346.0,385.8 361.0,383.2 376.0,380.9 391.0,379.1 406.0,379.1 421.0,380.7 436.0,382.3 451.0,381.9 466.0,378.7 481.0,373.5 496.0,365.3 511.0,354.1 526.0,341.0 541.0,326.7 556.0,310.8 571.0,294.9" fill="none" stroke="#777" stroke-width="1.5" stroke-dasharray="4 3"/>
<line x1="46.0" y1="388.7" x2="46.0" y2="405.5" stroke="#1a1a1a" stroke-width="1.2"/>
@@ -1011,7 +1011,7 @@ pentru că trendul dinainte e diferit.
<rect x="551.5" y="140.9" width="9" height="29.4" fill="#188a3e"/>
<line x1="571.0" y1="122.0" x2="571.0" y2="147.2" stroke="#1a1a1a" stroke-width="1.2"/>
<rect x="566.5" y="126.2" width="9" height="14.7" fill="#188a3e"/>
<line x1="24" y1="560.3" x2="606" y2="560.3" stroke="#888"/>
<line x1="24" y1="560.3" x2="686" y2="560.3" stroke="#888"/>
<rect x="41.5" y="530.7" width="9" height="29.6" fill="#188a3e" opacity="0.55"/>
<rect x="56.5" y="528.0" width="9" height="32.3" fill="#188a3e" opacity="0.55"/>
<rect x="71.5" y="525.3" width="9" height="35.0" fill="#188a3e" opacity="0.55"/>
@@ -1052,7 +1052,7 @@ pentru că trendul dinainte e diferit.
<text x="121.0" y="286.3" fill="#c00" text-anchor="middle" style="font-weight:bold">top 1</text>
<text x="391.0" y="268.3" fill="#c00" text-anchor="middle" style="font-weight:bold">top 2</text>
<text x="241.0" y="478.3" fill="#b06000" text-anchor="middle" style="font-weight:bold">fundul ceștii</text>
<text x="481.0" y="263.9" fill="#188a3e" text-anchor="middle" style="font-weight:bold">breakout</text>
<text x="481.0" y="209.9" fill="#188a3e" text-anchor="middle" style="font-weight:bold">breakout</text>
<text x="24" y="590" fill="#555">Mânerul: 4 bare, −30% din adâncime. Două top-uri la 120.00 = double top. Gri punctat: SMA-20.</text>
</svg>

View File

@@ -241,18 +241,18 @@ cursului (buy doji, buy momentum, buy hammer, bull engulfing) și dacă zona e
<text x="254.0" y="235.2" fill="#c00" text-anchor="middle" style="font-weight:bold">picior 1</text>
<text x="350.0" y="240.8" fill="#c00" text-anchor="middle" style="font-weight:bold">picior 2 (mai jos)</text>
<text x="446.0" y="270.4" fill="#b06000" text-anchor="middle" style="font-weight:bold">hammer in capul triunghiului</text>
<text x="478.0" y="173.6" fill="#188a3e" text-anchor="middle" style="font-weight:bold">breakout cu volum</text>
<line x1="554.0" y1="280.4" x2="514.9" y2="229.9" stroke="#c00" stroke-width="1.8"/>
<polygon points="510.0,223.6 518.1,227.5 511.7,232.4" fill="#c00"/>
<text x="554.0" y="294.4" fill="#c00" text-anchor="middle" style="font-weight:bold">stopul sta sub low-ul candelei de breakout:</text>
<text x="554.0" y="308.4" fill="#c00" text-anchor="middle" style="font-weight:bold">daca pretul se intoarce in triunghi, ideea a murit</text>
<text x="478.0" y="149.6" fill="#188a3e" text-anchor="middle" style="font-weight:bold">breakout cu volum</text>
<line x1="566.0" y1="280.4" x2="515.6" y2="229.3" stroke="#c00" stroke-width="1.8"/>
<polygon points="510.0,223.6 518.5,226.5 512.8,232.1" fill="#c00"/>
<text x="566.0" y="294.4" fill="#c00" text-anchor="middle" style="font-weight:bold">stopul sta sub low-ul candelei de breakout:</text>
<text x="566.0" y="308.4" fill="#c00" text-anchor="middle" style="font-weight:bold">daca pretul se intoarce in triunghi, ideea a murit</text>
<text x="24" y="448" fill="#555">Exemplu construit (fără ticker), la scară: lecția nu rostește nicio cifră. Regula de măsurare e a cursului.</text>
<line x1="206.0" y1="92.4" x2="494.0" y2="222.0" stroke="#8b5cf6" stroke-width="1.6"/>
<line x1="206.0" y1="188.4" x2="254.0" y2="199.2" stroke="#8b5cf6" stroke-width="1.2" stroke-dasharray="4 3"/>
<line x1="254.0" y1="199.2" x2="478.0" y2="249.6" stroke="#8b5cf6" stroke-width="1.6"/>
<line x1="206.0" y1="188.4" x2="206.0" y2="92.4" stroke="#8b5cf6" stroke-width="2.2"/>
<line x1="615.6" y1="186.0" x2="615.6" y2="90.0" stroke="#1a5fb4" stroke-width="2.2"/>
<text x="211.6" y="140.4" fill="#8b5cf6" text-anchor="start" style="font-size:11px;font-weight:bold">baza = 4.00</text>
<text x="211.6" y="156.4" fill="#8b5cf6" text-anchor="start" style="font-size:11px;font-weight:bold">baza = 4.00</text>
<text x="622.8" y="138.0" fill="#1a5fb4" text-anchor="start" style="font-size:11px;font-weight:bold">aceeasi 4.00</text>
</svg></p>
<p><strong>Măsurarea, cuvânt cu cuvânt din curs:</strong> „dacă măsori distanța de aici
@@ -851,7 +851,6 @@ urmat de o <em>flamură</em>: un canal îngust, cu laturi paralele, înclinat u
<line x1="24.0" y1="88.9" x2="716" y2="88.9" stroke="#1a5fb4" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="702" y="82.9" fill="#1a5fb4" text-anchor="end">TP2 47.80 = batul steagului = 5.6R</text>
<polyline points="350.0,247.8 366.0,245.0 382.0,241.6 398.0,238.0 414.0,233.2 430.0,228.7 446.0,224.5 462.0,220.3 478.0,217.3 494.0,214.3 510.0,211.3 526.0,209.6 542.0,206.9 558.0,202.5 574.0,196.5 590.0,189.0" fill="none" stroke="#b06000" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="596" y="183" fill="#b06000">SMA-20</text>
<line x1="46.0" y1="311.0" x2="46.0" y2="316.7" stroke="#1a1a1a" stroke-width="1.2"/>
<rect x="41.5" y="312.5" width="9" height="2.6" fill="#188a3e"/>
<line x1="62.0" y1="311.2" x2="62.0" y2="320.3" stroke="#1a1a1a" stroke-width="1.2"/>
@@ -963,7 +962,7 @@ urmat de o <em>flamură</em>: un canal îngust, cu laturi paralele, înclinat u
<text x="222.0" y="160.3" fill="#555" text-anchor="middle" style="font-weight:bold">B</text>
<text x="366.0" y="278.6" fill="#b06000" text-anchor="middle" style="font-weight:bold">C = aici era by the dip</text>
<text x="414.0" y="171.6" fill="#188a3e" text-anchor="middle" style="font-weight:bold">breakout cu volum</text>
<text x="24" y="446" fill="#555">Exemplu construit (fără ticker), la scară: lecția nu rostește nicio cifră. Regula de măsurare e a cursului.</text>
<text x="24" y="446" fill="#555">Exemplu construit (fără ticker), la scară. Portocaliu punctat: SMA-20. Regula de măsurare e a cursului.</text>
<line x1="222.0" y1="190.3" x2="430.0" y2="232.6" stroke="#1a5fb4" stroke-width="1.6"/>
<line x1="222.0" y1="229.3" x2="270.0" y2="239.1" stroke="#1a5fb4" stroke-width="1.2" stroke-dasharray="4 3"/>
<line x1="270.0" y1="239.1" x2="414.0" y2="268.3" stroke="#1a5fb4" stroke-width="1.6"/>

View File

@@ -219,18 +219,18 @@ cursului (buy doji, buy momentum, buy hammer, bull engulfing) și dacă zona e
<text x="254.0" y="235.2" fill="#c00" text-anchor="middle" style="font-weight:bold">picior 1</text>
<text x="350.0" y="240.8" fill="#c00" text-anchor="middle" style="font-weight:bold">picior 2 (mai jos)</text>
<text x="446.0" y="270.4" fill="#b06000" text-anchor="middle" style="font-weight:bold">hammer in capul triunghiului</text>
<text x="478.0" y="173.6" fill="#188a3e" text-anchor="middle" style="font-weight:bold">breakout cu volum</text>
<line x1="554.0" y1="280.4" x2="514.9" y2="229.9" stroke="#c00" stroke-width="1.8"/>
<polygon points="510.0,223.6 518.1,227.5 511.7,232.4" fill="#c00"/>
<text x="554.0" y="294.4" fill="#c00" text-anchor="middle" style="font-weight:bold">stopul sta sub low-ul candelei de breakout:</text>
<text x="554.0" y="308.4" fill="#c00" text-anchor="middle" style="font-weight:bold">daca pretul se intoarce in triunghi, ideea a murit</text>
<text x="478.0" y="149.6" fill="#188a3e" text-anchor="middle" style="font-weight:bold">breakout cu volum</text>
<line x1="566.0" y1="280.4" x2="515.6" y2="229.3" stroke="#c00" stroke-width="1.8"/>
<polygon points="510.0,223.6 518.5,226.5 512.8,232.1" fill="#c00"/>
<text x="566.0" y="294.4" fill="#c00" text-anchor="middle" style="font-weight:bold">stopul sta sub low-ul candelei de breakout:</text>
<text x="566.0" y="308.4" fill="#c00" text-anchor="middle" style="font-weight:bold">daca pretul se intoarce in triunghi, ideea a murit</text>
<text x="24" y="448" fill="#555">Exemplu construit (fără ticker), la scară: lecția nu rostește nicio cifră. Regula de măsurare e a cursului.</text>
<line x1="206.0" y1="92.4" x2="494.0" y2="222.0" stroke="#8b5cf6" stroke-width="1.6"/>
<line x1="206.0" y1="188.4" x2="254.0" y2="199.2" stroke="#8b5cf6" stroke-width="1.2" stroke-dasharray="4 3"/>
<line x1="254.0" y1="199.2" x2="478.0" y2="249.6" stroke="#8b5cf6" stroke-width="1.6"/>
<line x1="206.0" y1="188.4" x2="206.0" y2="92.4" stroke="#8b5cf6" stroke-width="2.2"/>
<line x1="615.6" y1="186.0" x2="615.6" y2="90.0" stroke="#1a5fb4" stroke-width="2.2"/>
<text x="211.6" y="140.4" fill="#8b5cf6" text-anchor="start" style="font-size:11px;font-weight:bold">baza = 4.00</text>
<text x="211.6" y="156.4" fill="#8b5cf6" text-anchor="start" style="font-size:11px;font-weight:bold">baza = 4.00</text>
<text x="622.8" y="138.0" fill="#1a5fb4" text-anchor="start" style="font-size:11px;font-weight:bold">aceeasi 4.00</text>
</svg>
@@ -860,7 +860,6 @@ urmat de o *flamură*: un canal îngust, cu laturi paralele, înclinat ușor
<line x1="24.0" y1="88.9" x2="716" y2="88.9" stroke="#1a5fb4" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="702" y="82.9" fill="#1a5fb4" text-anchor="end">TP2 47.80 = batul steagului = 5.6R</text>
<polyline points="350.0,247.8 366.0,245.0 382.0,241.6 398.0,238.0 414.0,233.2 430.0,228.7 446.0,224.5 462.0,220.3 478.0,217.3 494.0,214.3 510.0,211.3 526.0,209.6 542.0,206.9 558.0,202.5 574.0,196.5 590.0,189.0" fill="none" stroke="#b06000" stroke-width="1.5" stroke-dasharray="4 3"/>
<text x="596" y="183" fill="#b06000">SMA-20</text>
<line x1="46.0" y1="311.0" x2="46.0" y2="316.7" stroke="#1a1a1a" stroke-width="1.2"/>
<rect x="41.5" y="312.5" width="9" height="2.6" fill="#188a3e"/>
<line x1="62.0" y1="311.2" x2="62.0" y2="320.3" stroke="#1a1a1a" stroke-width="1.2"/>
@@ -972,7 +971,7 @@ urmat de o *flamură*: un canal îngust, cu laturi paralele, înclinat ușor
<text x="222.0" y="160.3" fill="#555" text-anchor="middle" style="font-weight:bold">B</text>
<text x="366.0" y="278.6" fill="#b06000" text-anchor="middle" style="font-weight:bold">C = aici era by the dip</text>
<text x="414.0" y="171.6" fill="#188a3e" text-anchor="middle" style="font-weight:bold">breakout cu volum</text>
<text x="24" y="446" fill="#555">Exemplu construit (fără ticker), la scară: lecția nu rostește nicio cifră. Regula de măsurare e a cursului.</text>
<text x="24" y="446" fill="#555">Exemplu construit (fără ticker), la scară. Portocaliu punctat: SMA-20. Regula de măsurare e a cursului.</text>
<line x1="222.0" y1="190.3" x2="430.0" y2="232.6" stroke="#1a5fb4" stroke-width="1.6"/>
<line x1="222.0" y1="229.3" x2="270.0" y2="239.1" stroke="#1a5fb4" stroke-width="1.2" stroke-dasharray="4 3"/>
<line x1="270.0" y1="239.1" x2="414.0" y2="268.3" stroke="#1a5fb4" stroke-width="1.6"/>