diff --git a/gen/strategii/hammer_mbt10_bh_ansamblu.py b/gen/strategii/hammer_mbt10_bh_ansamblu.py
index 52b2abd..5117b24 100644
--- a/gen/strategii/hammer_mbt10_bh_ansamblu.py
+++ b/gen/strategii/hammer_mbt10_bh_ansamblu.py
@@ -115,8 +115,8 @@ if __name__ == "__main__":
m = re.search(r'viewBox="0 0 (\d+) (\d+)"', svg)
W, H = int(m.group(1)), int(m.group(2))
legenda = [
- "Exemplu ilustrativ (XYZ) din lecția de pattern (01_MODUL_1/05_patternuri_candele.md:210-215);",
- "prețurile sunt cele ale lecției, structura barelor dintre ele e construită.",
+ "Exemplu ilustrativ (XYZ) din lecția de pattern; prețurile sunt cele ale lecției,",
+ "structura barelor dintre ele e construită.",
]
extra = 16 * len(legenda) + 6
svg = svg.replace(f'viewBox="0 0 {W} {H}"', f'viewBox="0 0 {W} {H + extra}"')
diff --git a/gen/strategii/hammer_mbt10_bh_ansamblu.svg b/gen/strategii/hammer_mbt10_bh_ansamblu.svg
index 8f1a7d0..acc868b 100644
--- a/gen/strategii/hammer_mbt10_bh_ansamblu.svg
+++ b/gen/strategii/hammer_mbt10_bh_ansamblu.svg
@@ -112,4 +112,4 @@
volumhammer 63.30 / 62.10bara 20: confirmare — close 63.35 peste high-ul hammer-ului 63.30 (intrare)
-Exemplu ilustrativ (XYZ) din lecția de pattern (01_MODUL_1/05_patternuri_candele.md:210-215);prețurile sunt cele ale lecției, structura barelor dintre ele e construită.
\ No newline at end of file
+Exemplu ilustrativ (XYZ) din lecția de pattern; prețurile sunt cele ale lecției,structura barelor dintre ele e construită.
\ No newline at end of file
diff --git a/gen/strategii/hammer_mbt10_bh_aplus.py b/gen/strategii/hammer_mbt10_bh_aplus.py
index fac805c..9a7a513 100644
--- a/gen/strategii/hammer_mbt10_bh_aplus.py
+++ b/gen/strategii/hammer_mbt10_bh_aplus.py
@@ -155,8 +155,8 @@ ch_a = Chart(
Mark(CONF_A, "acumulare", GREEN, "above", dy=-26)],
mas=[], scale=SCALE, gap=15, body_w=9, left=44, width=PW, vol_h=60,
vol_label="volum",
- title="A+ — hammer la suport monthly, volum în acumulare",
- caption="bara 13: 42.95 > high 42.90, pe volum peste medie.",
+ title="A+ — hammer la suport monthly",
+ caption="bara 13: 42.95 peste 42.90, volum bun.",
)
ch_n = Chart(
candles=cds_n,
@@ -166,8 +166,8 @@ ch_n = Chart(
Mark(CONF_N, "volum slab", RED, "above", dy=0)],
mas=[], scale=SCALE, gap=15, body_w=9, left=44, width=PW, vol_h=60,
vol_label="volum",
- title="Mediocru — hammer în mijloc de range, fără nivel",
- caption="bara 13: 45.15 > 45.10, dar pe volum slab.",
+ title="Mediocru — hammer fără nivel",
+ caption="bara 13: 45.15 peste 45.10, volum slab.",
)
# ============================================================ wrapper: două panouri alăturate
@@ -195,8 +195,8 @@ OFF_A = (PAD, PAD + TITLE_H)
OFF_N = (PAD + PW + PANEL_GAP, PAD + TITLE_H)
TOP_TITLE = "Buy hammer A+ vs. mediocru (două panouri, exemple construite)"
-FOOTER1 = ("Reguli din curs: 26_2025-06-11.md:701-703 (locația la nivel), "
- "05_patternuri_candele.md:77-80, 05_volum.md:2169.")
+FOOTER1 = ("Reguli din curs: locația la un nivel major, scăderea dinainte și volumul; "
+ "trimiterile stau în fișa de surse.")
FOOTER2 = ("Nivelurile 42.00 / 42.50 și cifrele de preț sunt construite "
"(materialul nu dă prețuri pentru acest contrast).")
FOOTER = FOOTER1 + " " + FOOTER2
@@ -270,8 +270,8 @@ for i in range(len(all_txt)):
# etichetele cerute de spec există în desen
for cheie in ("suport monthly 42.00", "hammer la nivel", "acumulare",
"fără nivel apropiat (suport 42.50 la −3,6 %)", "volum slab",
- "A+ — hammer la suport monthly, volum în acumulare",
- "Mediocru — hammer în mijloc de range, fără nivel"):
+ "A+ — hammer la suport monthly",
+ "Mediocru — hammer fără nivel"):
assert cheie in wrapper, f"lipsește din desen: {cheie!r}"
OUT.write_text(wrapper, encoding="utf-8")
diff --git a/gen/strategii/hammer_mbt10_bh_aplus.svg b/gen/strategii/hammer_mbt10_bh_aplus.svg
index eae82ef..04131cf 100644
--- a/gen/strategii/hammer_mbt10_bh_aplus.svg
+++ b/gen/strategii/hammer_mbt10_bh_aplus.svg
@@ -1,5 +1,5 @@
\ No newline at end of file
+ bara 13: 45.15 peste 45.10, volum slab.
+Reguli din curs: locația la un nivel major, scăderea dinainte și volumul; trimiterile stau în fișa de surse.Nivelurile 42.00 / 42.50 și cifrele de preț sunt construite (materialul nu dă prețuri pentru acest contrast).
\ No newline at end of file
diff --git a/gen/strategii/hammer_mbt10_bh_forma.py b/gen/strategii/hammer_mbt10_bh_forma.py
index 4f76ab5..d376e44 100644
--- a/gen/strategii/hammer_mbt10_bh_forma.py
+++ b/gen/strategii/hammer_mbt10_bh_forma.py
@@ -22,7 +22,7 @@ PRAG_SUS = L + 2 / 3 * RNG # 62.90 — corpul trebuie să stea peste el
# (nume, o, h, l, c, verdict, rânduri de etichetă sub candelă)
CANDLES = [
("A", 63.05, H, L, 63.30, "DA", ["DA: corp 0.25,", "fitil jos 0.95 = 3,8x corpul"]),
- ("B", 62.90, H, L, 63.30, "DA", ["DA, la limită: corp 0.40,", "fitil jos 0.80 = exact 2x"]),
+ ("B", 62.90, H, L, 63.30, "DA", ["DA, la limită:", "corp 0.40, fitil 0.80"]),
("C", 62.60, H, L, 63.30, "NU", ["NU: corp 0.70,", "fitil jos 0.50 = 0,7x corpul"]),
("D", 62.25, H, L, 62.45, "NU", ["NU: corpul e jos, fitilul", "lung e sus — alt pattern"]),
]
diff --git a/gen/strategii/hammer_mbt10_bh_forma.svg b/gen/strategii/hammer_mbt10_bh_forma.svg
index 4ea4eed..5ebfe3e 100644
--- a/gen/strategii/hammer_mbt10_bh_forma.svg
+++ b/gen/strategii/hammer_mbt10_bh_forma.svg
@@ -16,8 +16,8 @@
fitil jos 0.95 = 3,8x corpul
- DA, la limită: corp 0.40,
- fitil jos 0.80 = exact 2x
+ DA, la limită:
+ corp 0.40, fitil 0.80NU: corp 0.70,
diff --git a/gen/strategii/hammer_mbt10_bh_iesire.py b/gen/strategii/hammer_mbt10_bh_iesire.py
index 081cbe2..4426a2d 100644
--- a/gen/strategii/hammer_mbt10_bh_iesire.py
+++ b/gen/strategii/hammer_mbt10_bh_iesire.py
@@ -121,8 +121,8 @@ extra_svg = (f'
+
\ No newline at end of file
+linia de trailTrail-ul urcă doar sub un swing low nou — 63.05, apoi 65.10, apoi 66.00 — și nu coboară niciodată; ieși la prima închidere sub el.Lecția de pattern nu dă o țintă proprie — 1:1 vine de la strategia MBP, iar 2R e țintaexemplului din lecție. Continuarea barelor de după 33 e construită.
\ No newline at end of file
diff --git a/gen/strategii/hammer_mbt10_bh_labu.py b/gen/strategii/hammer_mbt10_bh_labu.py
index f2432c8..a8e5789 100644
--- a/gen/strategii/hammer_mbt10_bh_labu.py
+++ b/gen/strategii/hammer_mbt10_bh_labu.py
@@ -136,7 +136,7 @@ cds[0].note = ("bara 23 = hammer: o 80.80, h 80.90, l 79.60, c 80.90 — "
cds[1].note = ("bara 24 = confirmare: close 81.30 — close peste high-ul "
"hammer-ului 80.90 = intrare 81.30 (construit)")
cds[2].note = ("Procentul (+20 % în jumătate de lună) și contextul (suport "
- "monthly) sunt ale cursului (18_2025-09-23.md:721-726);")
+ "monthly) sunt ale cursului;")
svg = ch.render()
assert "\n\n" not in svg and "
\ No newline at end of file
diff --git a/gen/strategii/hammer_mbt10_bh_locatie.py b/gen/strategii/hammer_mbt10_bh_locatie.py
index 5e290ff..b7f82ee 100644
--- a/gen/strategii/hammer_mbt10_bh_locatie.py
+++ b/gen/strategii/hammer_mbt10_bh_locatie.py
@@ -90,7 +90,7 @@ def zone(px, p_top, p_bot, label, color, label_at_bottom=False):
PCT_DA, PCT_NU = f"{d_da:.2f}".replace(".", ","), f"{d_nu:.2f}".replace(".", ",")
y_bot = y(SUP_NU)
parts = [
- f'",
]
svg = "\n ".join(parts).replace("\n ", "\n")
@@ -121,4 +122,4 @@ assert "\n\n" not in svg, "linie goală în SVG"
for m in re.finditer(r']*>(.*?)', body_da):
assert float(m.group(1)) < PX[1] - 14, f"text din DA trece în NU: {m.group(2)}"
OUT.write_text(svg, encoding="utf-8")
-print(f"scris {OUT.name} ({W}x{y_bot + 66:.0f}); DA {d_da}% NU {d_nu}% (rezistență {d_rez}%)")
+print(f"scris {OUT.name} ({W}x{y_bot + 80:.0f}); DA {d_da}% NU {d_nu}% (rezistență {d_rez}%)")
diff --git a/gen/strategii/hammer_mbt10_bh_locatie.svg b/gen/strategii/hammer_mbt10_bh_locatie.svg
index 1ed3e2c..d5f3342 100644
--- a/gen/strategii/hammer_mbt10_bh_locatie.svg
+++ b/gen/strategii/hammer_mbt10_bh_locatie.svg
@@ -1,4 +1,4 @@
-")
+assert "\n\n" not in svg, "linie goală în SVG"
+OUT.write_text(svg, encoding="utf-8")
+print(f"scris {OUT.name} ({W}x{H + add})")
diff --git a/gen/strategii/hammer_mbt10_mbt_close.svg b/gen/strategii/hammer_mbt10_mbt_close.svg
new file mode 100644
index 0000000..ed0df98
--- /dev/null
+++ b/gen/strategii/hammer_mbt10_mbt_close.svg
@@ -0,0 +1,69 @@
+
+ MBT-10 — „în formare" nu e semnal (cifrele exemplului din material)
+
+ cele două zile care contează
+
+ intraday 55.30
+
+ locul crimei 52.10 — structura ideii
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ volum
+
+
+ la 55.30, în timpul zilei, semnalul
+ se vedea „în formare" — dar ziua nu se
+ terminase, deci nu exista nimic
+
+
+ s-a închis la 52.90: semnalul
+ nu s-a produs niciodată
+
+
+ a doua zi: 51.50, sub 52.10 —
+ structura a cedat, ideea a murit
+Te uiți la semnal o singură dată pe zi, la închidere. Cine a cumpărat la 55.30 a cumpărat un semnalcare nu s-a produs, și a doua zi era deja sub structura pe care se sprijinea ideea.Reale sunt 55.30, 52.90, 51.50 și faptul că 51.50 e sub locul crimei; barele din jur sunt construite.
\ No newline at end of file
diff --git a/gen/strategii/hammer_mbt10_mbt_confluente.py b/gen/strategii/hammer_mbt10_mbt_confluente.py
index 2e9f5bb..9f2a2c1 100644
--- a/gen/strategii/hammer_mbt10_mbt_confluente.py
+++ b/gen/strategii/hammer_mbt10_mbt_confluente.py
@@ -26,9 +26,10 @@ SUP_W, PPD = 87.50, 89.60 # suport weekly, pivotul daily
INTRARE, SL, TP = 89.90, 87.30, 95.20
R = round(INTRARE - SL, 2)
FUND1, FUND2 = 10, 15 # cele două picioare ale double bottom-ului
+VARF = 3 # ultimul maxim înainte de coborâre: high 95.20 = ținta
CLOSE_I = 19 # bara care se închide peste pivotul daily
-CLOSES = [96.00, 95.00, 94.20, 94.60, 93.10, 92.00, 91.20, 90.10, 89.00, # 0-8
+CLOSES = [96.00, 95.00, 94.20, 95.00, 93.10, 92.00, 91.20, 90.10, 89.00, # 0-8
88.20, 87.70, 88.40, 89.10, # 9-12
88.60, 88.00, 87.65, 88.30, # 13-16
88.90, 89.40, 89.90, # 17-19
@@ -50,6 +51,9 @@ def serie():
# bara 18 atinge pivotul intraday, dar se închide sub el: contraexemplul
# de la pasul cu condiția de preț
w[CLOSE_I - 1] = (0.30, 0.25)
+ # bara de după vârf deschide chiar în el: fără fitil sus, ca vârful să
+ # rămână singurul maxim la 95.20
+ w[VARF + 1] = (0.00, 0.25)
cds = from_closes(CLOSES, wicks=w, vols=VOLS, start=96.60)
assert len(cds) == len(VOLS) == 27
for i in range(1, len(cds)):
@@ -70,6 +74,10 @@ def serie():
assert min(c.l for c in cds[CLOSE_I:]) > SL, "stopul ar fi fost atins după intrare"
prim_tp = next(i for i in range(CLOSE_I + 1, len(cds)) if cds[i].h >= TP)
assert prim_tp == 26, prim_tp
+ # ținta 95.20 nu e un număr ales: e high-ul ultimului maxim dinaintea coborârii
+ assert round(cds[VARF].h, 2) == TP, cds[VARF].h
+ assert max(c.h for c in cds[VARF + 1:CLOSE_I]) < TP, \
+ "un maxim de după vârf trece peste țintă: ținta n-ar mai fi prima structură"
return cds
diff --git a/gen/strategii/hammer_mbt10_mbt_confluente.svg b/gen/strategii/hammer_mbt10_mbt_confluente.svg
index a935ec1..6e4020a 100644
--- a/gen/strategii/hammer_mbt10_mbt_confluente.svg
+++ b/gen/strategii/hammer_mbt10_mbt_confluente.svg
@@ -10,10 +10,10 @@
-
-
-
-
+
+
+
+
diff --git a/gen/strategii/hammer_mbt10_mbt_gapdown.py b/gen/strategii/hammer_mbt10_mbt_gapdown.py
index bb3407b..3d323a5 100644
--- a/gen/strategii/hammer_mbt10_mbt_gapdown.py
+++ b/gen/strategii/hammer_mbt10_mbt_gapdown.py
@@ -166,7 +166,7 @@ W, H = int(m.group(1)), int(m.group(2))
linii = [
"MBT-10 #1: intrare 64.80 / SL 63.20 — risc 1R în bani",
"MBT-10 #2: intrare 62.20 / SL 60.40 — risc 1R în bani (mărime ajustată)",
- "Exemplu construit (02_mbt10.md:728-734): #1 și #2 au același risc în bani; "
+ "Exemplu construit: #1 și #2 au același risc în bani; "
"#2 singur dă 4.7R.",
"De aceea mărimea se împarte pe 2-3 încercări.",
]
diff --git a/gen/strategii/hammer_mbt10_mbt_gapdown.svg b/gen/strategii/hammer_mbt10_mbt_gapdown.svg
index 61ac1b4..8e7b69e 100644
--- a/gen/strategii/hammer_mbt10_mbt_gapdown.svg
+++ b/gen/strategii/hammer_mbt10_mbt_gapdown.svg
@@ -115,4 +115,4 @@
MBT-10 #1stop #1 atinsMBT-10 #2
-MBT-10 #1: intrare 64.80 / SL 63.20 — risc 1R în baniMBT-10 #2: intrare 62.20 / SL 60.40 — risc 1R în bani (mărime ajustată)Exemplu construit (02_mbt10.md:728-734): #1 și #2 au același risc în bani; #2 singur dă 4.7R.De aceea mărimea se împarte pe 2-3 încercări.
\ No newline at end of file
+MBT-10 #1: intrare 64.80 / SL 63.20 — risc 1R în baniMBT-10 #2: intrare 62.20 / SL 60.40 — risc 1R în bani (mărime ajustată)Exemplu construit: #1 și #2 au același risc în bani; #2 singur dă 4.7R.De aceea mărimea se împarte pe 2-3 încercări.
\ No newline at end of file
diff --git a/gen/strategii/hammer_mbt10_mbt_iesire.py b/gen/strategii/hammer_mbt10_mbt_iesire.py
new file mode 100644
index 0000000..5aaf068
--- /dev/null
+++ b/gen/strategii/hammer_mbt10_mbt_iesire.py
@@ -0,0 +1,69 @@
+#!/usr/bin/env python3
+"""MBT-10 — ieșirea: ținta e o structură din stânga, nu un procent.
+
+Toată seria pasului „unde" (importată), de la vârful din care a pornit
+coborârea până la atingerea lui înapoi. Ținta 95.20 nu e aleasă: e high-ul
+ultimului maxim dinaintea coborârii, verificat prin assert. Fișierul
+principal nu fixează nicio regulă proprie de take-profit — de aceea ținta e
+numită pe desen ca structură, nu ca regulă.
+
+Rulare: python3 gen/strategii/hammer_mbt10_mbt_iesire.py
+"""
+import re
+import sys; sys.path.insert(0, "/workspace/atm-curs-dl")
+sys.path.insert(0, "/workspace/atm-curs-dl/gen/strategii")
+from pathlib import Path
+from hammer_mbt10_mbt_confluente import CLOSE_I, INTRARE, SL, TP, VARF, serie
+from svg_candles import Arrow, Chart, Level, Zone
+
+OUT = Path(__file__).with_suffix(".svg")
+GREEN, RED, BLUE, ORANGE, GREY = "#188a3e", "#c00", "#1a5fb4", "#b06000", "#555"
+
+cds = serie()
+RISC = round(INTRARE - SL, 2)
+R_TINTA = round((TP - INTRARE) / RISC, 2)
+prim_tp = next(i for i in range(CLOSE_I + 1, len(cds)) if cds[i].h >= TP)
+
+# --- verificări -------------------------------------------------------------
+assert round(cds[VARF].h, 2) == TP, "ținta nu e high-ul vârfului"
+assert max(c.h for c in cds[VARF + 1:prim_tp]) < TP, "structura e depășită înainte de țintă"
+assert prim_tp == 26 and R_TINTA == 2.04, (prim_tp, R_TINTA)
+assert min(c.l for c in cds[CLOSE_I:]) > SL, "stopul ar fi fost atins înainte de țintă"
+assert cds[VARF].h > cds[CLOSE_I].c > SL, "ordinea vârf / intrare / stop e greșită"
+zile = prim_tp - CLOSE_I
+assert zile == 7, zile
+
+ch = Chart(
+ candles=cds,
+ levels=[Level(TP, "ținta 95.20 = ultimul maxim dinaintea coborârii", BLUE),
+ Level(INTRARE, "intrare 89.90", GREEN, label_at="left"),
+ Level(SL, "SL 87.30", RED, label_at="left")],
+ zones=[Zone(VARF, VARF, "de aici a pornit coborârea", ORANGE, p_top=95.9),
+ Zone(CLOSE_I, prim_tp, "drumul până la structură: 7 bare", GREEN)],
+ arrows=[
+ Arrow(prim_tp, f"ieși la 95.20 (+{R_TINTA:.2f}R):\nprima structură care a oprit\nprețul "
+ "ultima dată",
+ price=TP, where="below", color=BLUE, dx=-200, dy=54),
+ ],
+ scale=26.0, gap=17, body_w=10, left=54, width=700, top=58, vol_h=60, vol_label="volum",
+ title="MBT-10 — ieșirea la prima structură din stânga (exemplu construit)",
+)
+svg = ch.render()
+m = re.search(r'viewBox="0 0 (\d+) (\d+)"', svg)
+W, H = int(m.group(1)), int(m.group(2))
+linii = [
+ ("Materialul nu dă o regulă proprie de take-profit la MBT-10. Ce au în comun toate "
+ "exemplele lui e că", "#333"),
+ ("ținta e o structură vizibilă în stânga: un vârf anterior, ultimul maxim mai jos, sau "
+ "închiderea unui gap.", "#333"),
+ (f"Aici: 89.90 → 95.20 = {R_TINTA:.2f}R, în {zile} bare. Cifrele trade-ului sunt din "
+ "exemplul construit al materialului.", GREY),
+]
+add = 16 * len(linii) + 10
+svg = svg.replace(f'viewBox="0 0 {W} {H}"', f'viewBox="0 0 {W} {H + add}"')
+svg = svg.replace("", "".join(
+ f'{t}'
+ for i, (t, c) in enumerate(linii)) + "")
+assert "\n\n" not in svg, "linie goală în SVG"
+OUT.write_text(svg, encoding="utf-8")
+print(f"scris {OUT.name} ({W}x{H + add}); ținta atinsă la bara {prim_tp} = +{R_TINTA}R")
diff --git a/gen/strategii/hammer_mbt10_mbt_iesire.svg b/gen/strategii/hammer_mbt10_mbt_iesire.svg
new file mode 100644
index 0000000..0226adc
--- /dev/null
+++ b/gen/strategii/hammer_mbt10_mbt_iesire.svg
@@ -0,0 +1,101 @@
+
+ MBT-10 — ieșirea la prima structură din stânga (exemplu construit)
+
+ de aici a pornit coborârea
+
+ drumul până la structură: 7 bare
+
+ ținta 95.20 = ultimul maxim dinaintea coborârii
+
+ intrare 89.90
+
+ SL 87.30
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ volum
+
+
+ ieși la 95.20 (+2.04R):
+ prima structură care a oprit
+ prețul ultima dată
+Materialul nu dă o regulă proprie de take-profit la MBT-10. Ce au în comun toate exemplele lui e căținta e o structură vizibilă în stânga: un vârf anterior, ultimul maxim mai jos, sau închiderea unui gap.Aici: 89.90 → 95.20 = 2.04R, în 7 bare. Cifrele trade-ului sunt din exemplul construit al materialului.
\ No newline at end of file
diff --git a/gen/strategii/hammer_mbt10_mbt_ppd.py b/gen/strategii/hammer_mbt10_mbt_ppd.py
index 20116a6..89b8b85 100644
--- a/gen/strategii/hammer_mbt10_mbt_ppd.py
+++ b/gen/strategii/hammer_mbt10_mbt_ppd.py
@@ -33,14 +33,14 @@ ch = Chart(
candles=w,
levels=[Level(PPD, "pivotul daily 89.60", BLUE),
Level(SUP_W, "suport weekly 87.50", GREY, label_at="left")],
- zones=[Zone(sh(NU), sh(DA), "cele două zile care se compară", ORANGE)],
+ zones=[Zone(sh(NU), sh(DA), "", ORANGE, p_top=90.4)],
arrows=[
Arrow(sh(NU), "a atins 89.70 în timpul zilei,\ndar s-a închis la 89.40, sub pivot:\nnu e semnal",
where="below", color=RED, dx=-190, dy=40),
Arrow(sh(DA), "s-a închis la 89.90, peste pivot:\naici intri, la close-ul zilei",
where="above", color=GREEN, dx=-70, dy=-20),
],
- scale=44.0, gap=26, body_w=13, left=64, width=680, vol_h=60, vol_label="volum",
+ scale=44.0, gap=26, body_w=13, left=64, width=680, top=58, vol_h=60, vol_label="volum",
title="MBT-10 — condiția de preț: close peste pivotul daily (exemplu construit)",
)
svg = ch.render()
diff --git a/gen/strategii/hammer_mbt10_mbt_ppd.svg b/gen/strategii/hammer_mbt10_mbt_ppd.svg
index d1c1388..a767e17 100644
--- a/gen/strategii/hammer_mbt10_mbt_ppd.svg
+++ b/gen/strategii/hammer_mbt10_mbt_ppd.svg
@@ -1,62 +1,61 @@
-
- MBT-10 — condiția de preț: close peste pivotul daily (exemplu construit)
-
- cele două zile care se compară
-
- pivotul daily 89.60
-
- suport weekly 87.50
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- volum
-
-
- a atins 89.70 în timpul zilei,
- dar s-a închis la 89.40, sub pivot:
- nu e semnal
-
-
- s-a închis la 89.90, peste pivot:
- aici intri, la close-ul zilei
-Pivotul daily se recalculează în fiecare zi din maximul, minimul și închiderea zilei precedente;linia desenată e valoarea din ziua intrării, 89.60, nu un nivel fix.Asta e tot ce se poate verifica din MBT-10 fără indicatorul proprietar — „prima componentă" din el,cum îi spune materialul; restul formulei nu e publicat nicăieri.
\ No newline at end of file
+
+ MBT-10 — condiția de preț: close peste pivotul daily (exemplu construit)
+
+
+ pivotul daily 89.60
+
+ suport weekly 87.50
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ volum
+
+
+ a atins 89.70 în timpul zilei,
+ dar s-a închis la 89.40, sub pivot:
+ nu e semnal
+
+
+ s-a închis la 89.90, peste pivot:
+ aici intri, la close-ul zilei
+Pivotul daily se recalculează în fiecare zi din maximul, minimul și închiderea zilei precedente;linia desenată e valoarea din ziua intrării, 89.60, nu un nivel fix.Asta e tot ce se poate verifica din MBT-10 fără indicatorul proprietar — „prima componentă" din el,cum îi spune materialul; restul formulei nu e publicat nicăieri.
\ No newline at end of file
diff --git a/gen/strategii/hammer_mbt10_mbt_stop.py b/gen/strategii/hammer_mbt10_mbt_stop.py
new file mode 100644
index 0000000..6911853
--- /dev/null
+++ b/gen/strategii/hammer_mbt10_mbt_stop.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python3
+"""MBT-10 — stopul sub structură și mărimea poziției (exemplu construit).
+
+Zoom pe barele 8-21 din seria pasului „unde" (importată). Stopul 87.30 nu e
+ales la distanță, ci sub amândouă picioarele double bottom-ului și sub
+suportul weekly 87.50. Riscul iese 2.60 $ pe acțiune, iar mărimea din regula
+de 2 % pe același cont de 10.000 $ folosit în Partea A: 200 / 2.60 = 76 de
+acțiuni.
+
+Rulare: python3 gen/strategii/hammer_mbt10_mbt_stop.py
+"""
+import re
+import sys; sys.path.insert(0, "/workspace/atm-curs-dl")
+sys.path.insert(0, "/workspace/atm-curs-dl/gen/strategii")
+from pathlib import Path
+from hammer_mbt10_mbt_confluente import (CLOSE_I, FUND1, FUND2, INTRARE, SL,
+ SUP_W, serie)
+from svg_candles import Arrow, Chart, Level, Zone
+
+OUT = Path(__file__).with_suffix(".svg")
+GREEN, RED, BLUE, ORANGE, GREY = "#188a3e", "#c00", "#1a5fb4", "#b06000", "#555"
+
+cds = serie()
+I0, I1 = 8, 21
+w = cds[I0:I1 + 1]
+sh = lambda i: i - I0 # noqa: E731
+RISC = round(INTRARE - SL, 2)
+CONT, PROCENT = 10_000, 0.02
+RISC_LEI = CONT * PROCENT
+ACTIUNI = int(RISC_LEI // RISC)
+
+# --- verificări -------------------------------------------------------------
+assert RISC == 2.60, RISC
+assert ACTIUNI == 76 and ACTIUNI * RISC <= RISC_LEI, (ACTIUNI, ACTIUNI * RISC)
+assert SL < SUP_W < min(cds[FUND1].l, cds[FUND2].l), \
+ "stopul trebuie să stea sub suport, iar suportul sub amândouă picioarele"
+assert SL < min(c.l for c in w), "linia stopului trebuie să stea sub toate fitilele"
+assert round(cds[CLOSE_I].c, 2) == INTRARE
+assert I0 <= FUND1 and FUND2 <= I1 and CLOSE_I <= I1, "fereastra nu prinde tot ce trebuie"
+
+ch = Chart(
+ candles=w,
+ levels=[Level(INTRARE, "intrare 89.90 (close-ul zilei)", GREEN, label_at="left"),
+ Level(SUP_W, "suport weekly 87.50", BLUE),
+ Level(SL, "SL 87.30", RED, label_at="left")],
+ zones=[Zone(sh(FUND1), sh(FUND2), "structura care ține ideea", ORANGE)],
+ arrows=[
+ Arrow(sh(FUND2), "sub 87.30 nu mai e double bottom:\nideea de la pasul 1 a murit,\nnu mai ai ce aștepta",
+ price=SL, where="below", color=RED, dx=-40, dy=34),
+ ],
+ scale=40.0, gap=26, body_w=13, left=64, width=680, vol_h=0,
+ title="MBT-10 — stopul sub structură (exemplu construit)",
+)
+svg = ch.render()
+m = re.search(r'viewBox="0 0 (\d+) (\d+)"', svg)
+W, H = int(m.group(1)), int(m.group(2))
+OFF = (float(re.search(r''
+ f'1R = 2.60 $')
+linii = [
+ (f"Mărimea, cu aceeași regulă ca la buy hammer: 2 % dintr-un cont de 10.000 $ = 200 $;",
+ "#333"),
+ (f"200 / 2.60 = {RISC_LEI / RISC:.1f} → {ACTIUNI} de acțiuni, pierdere maximă "
+ f"{ACTIUNI * RISC:.2f} $.", "#333"),
+ ("87.30 e cifra materialului, nu marja mea de 5 cenți; suportul weekly 87.50 e construit "
+ "de mine ca stopul", GREY),
+ ("acela să aibă sub ce sta. Materialul nu dă niciun procent fix de stop pentru MBT-10.", GREY),
+]
+add = 16 * len(linii) + 10
+svg = svg.replace(f'viewBox="0 0 {W} {H}"', f'viewBox="0 0 {W} {H + add}"')
+svg = svg.replace("", brk + "".join(
+ f'{t}'
+ for i, (t, c) in enumerate(linii)) + "")
+assert "\n\n" not in svg, "linie goală în SVG"
+OUT.write_text(svg, encoding="utf-8")
+print(f"scris {OUT.name} ({W}x{H + add}); risc {RISC}, {ACTIUNI} acțiuni")
diff --git a/gen/strategii/hammer_mbt10_mbt_stop.svg b/gen/strategii/hammer_mbt10_mbt_stop.svg
new file mode 100644
index 0000000..ac2a3ad
--- /dev/null
+++ b/gen/strategii/hammer_mbt10_mbt_stop.svg
@@ -0,0 +1,44 @@
+
+ MBT-10 — stopul sub structură (exemplu construit)
+
+ structura care ține ideea
+
+ intrare 89.90 (close-ul zilei)
+
+ suport weekly 87.50
+
+ SL 87.30
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sub 87.30 nu mai e double bottom:
+ ideea de la pasul 1 a murit,
+ nu mai ai ce aștepta
+1R = 2.60 $Mărimea, cu aceeași regulă ca la buy hammer: 2 % dintr-un cont de 10.000 $ = 200 $;200 / 2.60 = 76.9 → 76 de acțiuni, pierdere maximă 197.60 $.87.30 e cifra materialului, nu marja mea de 5 cenți; suportul weekly 87.50 e construit de mine ca stopulacela să aibă sub ce sta. Materialul nu dă niciun procent fix de stop pentru MBT-10.
\ No newline at end of file
diff --git a/gen/strategii/hammer_mbt10_mbt_tesla.py b/gen/strategii/hammer_mbt10_mbt_tesla.py
index 39c7893..848817d 100644
--- a/gen/strategii/hammer_mbt10_mbt_tesla.py
+++ b/gen/strategii/hammer_mbt10_mbt_tesla.py
@@ -105,7 +105,7 @@ assert "trigger MBT-10exact 6 bare
-Cifrele 311.21 / 333.00 / +7.0 % sunt reale (03_2026-08-11.md:118-120);structura barelor dintre ele e construită.SL: materialul nu îl dă pentru acest exemplu.
\ No newline at end of file
+Cifrele 311.21 / 333.00 / +7.0 % sunt reale;structura barelor dintre ele e construită.SL: materialul nu îl dă pentru acest exemplu.
\ No newline at end of file
diff --git a/summaries/17_STRATEGII/05_atmi.html b/summaries/17_STRATEGII/05_atmi.html
index f0807ba..2c08eee 100644
--- a/summaries/17_STRATEGII/05_atmi.html
+++ b/summaries/17_STRATEGII/05_atmi.html
@@ -1257,6 +1257,6 @@ reinvestirea; cad BIM/trigger-ul proprietar, universul de indici US, levierul