From c564bf1be53113c84a620ef889ec547fa43a81a0 Mon Sep 17 00:00:00 2001 From: Claude Agent Date: Tue, 22 Sep 2026 20:08:48 +0000 Subject: [PATCH] diagrame: trei desene care aratau altceva decat spune regula m2d_exemplu (Riot): eticheta zicea 'close peste bear trail = iesi' pe o bara care se inchidea SUB linie - doar fitilul trecea, adica exact cazul pe care capitolul il interzice de trei ori. Seria refacuta, cu assert care recalculeaza trail-ul din serie si cere ca bara de iesire sa inchida peste el. mbp_exemplu: candela M se inchidea la 660.50 sub banda de 660.90, iar generatorul chiar afirma relatia inversa ('assert BAND > c'); desenul arata un setup invalid ca valid. Plus stopul 662.71, care plutea 1.71 deasupra extremei celor 4 bare - exact marja pe care capitolul o declara absenta la MBP. Ambele reparate, cu assert pe fiecare. atmi_orizont: trei etichete purtau 'fisier:linie' in desen. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01ThN7ixZrowca8aTGrK1MUJ --- gen/strategii/atmi_orizont.py | 20 ++-- gen/strategii/atmi_orizont.svg | 6 +- gen/strategii/m2d_exemplu.py | 111 ++++++++++++++++++-- gen/strategii/m2d_exemplu.spec.txt | 27 ++++- gen/strategii/m2d_exemplu.svg | 156 +++++++++++++++++------------ gen/strategii/mbp_exemplu.py | 34 ++++--- gen/strategii/mbp_exemplu.svg | 22 ++-- 7 files changed, 265 insertions(+), 111 deletions(-) diff --git a/gen/strategii/atmi_orizont.py b/gen/strategii/atmi_orizont.py index d74836c..c93eca0 100644 --- a/gen/strategii/atmi_orizont.py +++ b/gen/strategii/atmi_orizont.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 """Orizontul de ținere al ATMI — două descrieri incompatibile, pe aceeași axă. -Pentru `strategii/03_atmi.md`, marcajul ``. +Pentru `strategii/05_atmi.md`, marcajul ``. Nu e grafic de preț, e o linie de timp comparativă: SVG scris de mână, doar stdlib — nu se folosește svg_candles / pchart. @@ -19,6 +19,7 @@ Barele sunt pe o axă comună 0 → 1 an, ca diferența să fie vizibilă; bara Rulare: python3 gen/strategii/atmi_orizont.py -> gen/strategii/atmi_orizont.svg """ +import re from pathlib import Path from xml.sax.saxutils import escape @@ -102,8 +103,7 @@ def build(): p.append(line(AX_X1, 164, AX_X1, 226, BLUE, 1.2, "4 3")) p.append(txt(AX_X1, 244, "TP1 atins — aproximativ un an mai târziu", 13, "400", BLUE, "end")) - p.append(txt(AX_X0, 262, "Sursă: 04_MODUL_3/03_strategia_2_atmi.md:26-29; " - ":358-363", 11, "400", GRAY, "start")) + p.append(txt(AX_X0, 262, "Sursă: lecția de ATMI", 11, "400", GRAY, "start")) # ------- bara de jos: adaptarea pentru prop p.append(txt(AX_X0, 282, "ATMI ca adaptare pentru prop — Q&A 11.06.2025", @@ -127,7 +127,7 @@ def build(): "„Ai nevoie de 3 transacții să califici propul.”", 13, "400", BLACK)) p.append(txt(CARD_X + CARD_W / 2, 382, - "Sursă: 09_QA/26_2025-06-11.md:225-227", 11, "400", GRAY)) + "Sursă: Q&A 11.06.2025", 11, "400", GRAY)) # ------- cutia de anotare p.append(f'„fără stop-loss, poziția ținută luni/ani” TP1 atins — aproximativ un an mai târziu -Sursă: 04_MODUL_3/03_strategia_2_atmi.md:26-29; :358-363 +Sursă: lecția de ATMI ATMI ca adaptare pentru prop — Q&A 11.06.2025 @@ -35,12 +35,12 @@ „aștepți o corecție și intri pe ATMI la suport quarterly, swing, 2 săptămâni în poziție” „Ai nevoie de 3 transacții să califici propul.” -Sursă: 09_QA/26_2025-06-11.md:225-227 +Sursă: Q&A 11.06.2025 Anotare separată — mecanismul care face diferența Pe prop, limita zilnică se calculează și pe pozițiile deschise, iar la atingere pozițiile se pot închide — chiar în profit. -Sursă: 09_QA/26_2025-06-11.md:216-222 +Sursă: Q&A 11.06.2025 Notă: cele două descrieri nu se rezolvă aici — de clarificat cu autorul. Fără axe de preț și fără să alegem una dintre variante. Bara de 2 săptămâni e scurtă exact pentru că atât ține, pe aceeași scară. diff --git a/gen/strategii/m2d_exemplu.py b/gen/strategii/m2d_exemplu.py index e1df47b..e508a62 100644 --- a/gen/strategii/m2d_exemplu.py +++ b/gen/strategii/m2d_exemplu.py @@ -13,6 +13,12 @@ Legenda spune explicit lucrul ăsta. Serie continuă de 30 de candele din lista de close-uri din specificație, open = close-ul precedentului, wick-uri alese ca să scoată exact nivelurile (candela 13: high 100.85 = SL), panou de volum dedesubt. + +Bear trail-ul e calculat din serie cu regula capitolului (linia sare pe +high-ul barei care se închide sub low-ul precedentei; violare = o bară care +se închide PESTE linie) și desenat ca scară portocalie. Seria e construită +astfel încât fitilele să atingă linia de trei ori (barele 16, 20, 24) fără +s-o violeze, iar ieșirea să vină abia la bara 29, care închide peste linie. """ import re import sys @@ -34,22 +40,36 @@ closes = [ 97.6, 97.1, 96.7, 96.3, 95.9, 95.6, 95.9, # 0-6 coborâre 96.4, 96.9, 97.5, 98.2, 99.0, 99.7, 100.3, # 7-13 pullback Buy (M) 100.00, # 14 trigger Sell (A) - 99.5, 99.0, 98.5, 98.0, 97.6, 97.2, 96.9, 96.6, 96.3, 96.1, - 95.8, 95.5, 95.2, 95.35, 95.45, # 15-29 bear trail + 99.45, 99.80, 98.58, 98.10, 97.60, 97.95, 97.40, 96.90, 96.40, 96.75, + 96.20, 95.70, 95.20, 95.00, 95.45, # 15-29 bear trail ] assert len(closes) == 30, len(closes) # wick-uri: candela 13 are nevoie de un wick sus până la 100.85 (SL-ul de 4 -# candele); restul sunt mici, ca seria să arate ca un grafic real. +# candele); barele 16, 20 și 24 sunt retestări ale liniei de trail, deci au +# fitil lung în sus care atinge linia, dar se închid sub ea. Restul sunt mici, +# ca seria să arate ca un grafic real. wicks = [ (0.15, 0.20), (0.12, 0.18), (0.15, 0.15), (0.10, 0.20), (0.12, 0.25), (0.10, 0.30), (0.25, 0.15), (0.20, 0.15), (0.15, 0.20), (0.20, 0.15), (0.20, 0.20), (0.20, 0.18), (0.25, 0.15), (SL - 100.3, 0.15), # 13: high = 100.85 (0.15, 0.25), # 14: trigger Sell - (0.15, 0.20), (0.15, 0.18), (0.12, 0.20), (0.15, 0.18), (0.15, 0.20), - (0.12, 0.18), (0.15, 0.20), (0.12, 0.18), (0.15, 0.20), (0.12, 0.18), - (0.15, 0.20), (0.12, 0.18), (0.15, 0.20), (0.20, 0.15), (0.30, 0.10), + (0.15, 0.15), # 15 + (0.45, 0.10), # 16 retest trail + (0.15, 0.15), # 17 + (0.15, 0.15), # 18 + (0.15, 0.15), # 19 + (0.40, 0.10), # 20 retest trail + (0.15, 0.15), # 21 + (0.15, 0.15), # 22 + (0.15, 0.15), # 23 + (0.40, 0.10), # 24 retest trail + (0.15, 0.15), # 25 + (0.15, 0.15), # 26 + (0.15, 0.15), # 27 + (0.05, 0.05), # 28: coboară trail-ul + (0.20, 0.10), # 29: close peste trail ] assert len(wicks) == 30, len(wicks) @@ -95,6 +115,53 @@ for a, b in zip(cds, cds[1:]): assert cds[14].c < cds[13].c, (cds[13].c, cds[14].c) assert any(cds[i].c > cds[i].o for i in range(7, 14)), "pullback Buy absent" +# 10. bara 17 e la 1.42% profit (procentul real din curs) +assert abs((ENTRY - cds[17].c) / ENTRY - 0.0142) < 1e-4, cds[17].c + + +# ── bear trail, recalculat din serie cu regula capitolului ───────────────── +# Linia sare pe high-ul fiecărei bare care se închide sub low-ul precedentei; +# violarea = prima bară care se închide PESTE linie (fitilul singur nu scoate). +def bear_trail(candles, trig): + """linie[i] = nivelul trail-ului în vigoare la începutul barei i (None până + se formează linia); iesire = prima bară închisă peste linie.""" + linie, linie_la, iesire = None, [], None + for i, c in enumerate(candles): + linie_la.append(linie) + if i > trig and linie is not None and c.c > linie: + iesire = i + break + if i > trig: + p = candles[i - 1] + if c.c < p.l: + linie = c.h + while len(linie_la) < len(candles): + linie_la.append(linie) + return linie_la, iesire + + +LINIE, EXIT_BAR = bear_trail(cds, 14) + +# 11. ieșirea e pe bara 29, care se închide PESTE linia de trail (nu doar fitilul) +assert EXIT_BAR == 29, f"ieșirea trebuie să fie pe bara 29, nu {EXIT_BAR}" +TRAIL_EXIT = LINIE[29] +assert TRAIL_EXIT is not None and cds[29].c > TRAIL_EXIT, (cds[29].c, TRAIL_EXIT) + +# 12. linia nu urcă niciodată (e trail, nu nivel fix) +pas = [v for v in LINIE[15:30] if v is not None] +assert all(b <= a + 1e-9 for a, b in zip(pas, pas[1:])), pas + +# 13. nicio bară dinainte de ieșire nu închide peste linie +for i in range(15, 29): + if LINIE[i] is not None: + assert cds[i].c < LINIE[i], (i, cds[i].c, LINIE[i]) + +# 14. fitilele au atins linia de mai multe ori fără s-o violeze pe close +atingeri = [i for i in range(15, 29) if LINIE[i] is not None + and cds[i].h >= LINIE[i] - 1e-9 and cds[i].c < LINIE[i]] +assert len(atingeri) >= 2, f"fitilele ating linia doar la barele {atingeri}" +assert set(atingeri) >= {16, 20, 24}, f"retestările lipsesc: {atingeri}" + # ── geometria, ca să așez marks-urile „below" fără suprapunere ───────────── SCALE = 42 levels = [ @@ -177,8 +244,11 @@ definiții = [ def natural_y(i: int, where: str) -> float: + # „below": sub candelă, dar înainte de panoul de volum. Plafonul e cu 1 px + # sub limita de jos a candidaților, altfel când bara i are chiar minimul + # seriei nu mai rămâne niciun y întreg de testat și plasarea pică. return (y(cds[i].h) - 10 if where == "above" - else min(y(cds[i].l) + 20, body_bottom + 14)) + else min(y(cds[i].l) + 20, body_bottom + 13)) # candidați: toate y-urile care nu ating niciun corp de candelă, ordonate @@ -239,6 +309,33 @@ ch = Chart( svg = ch.render() assert "') + if prev_y is not None and abs(prev_y - yv) > 1e-9: + trail_parts.append( + f'') + prev_y = yv +trail_parts.append( + f'bear trail') +svg = svg.replace("\n", "\n " + "\n ".join(trail_parts) + "\n") + # ── verificare: fiecare etichetă e în pânză și nu se suprapune alta ──────── m = re.search(r'viewBox="0 0 (\d+) (\d+)"', svg) W, H = int(m.group(1)), int(m.group(2)) diff --git a/gen/strategii/m2d_exemplu.spec.txt b/gen/strategii/m2d_exemplu.spec.txt index 2d605ff..61f49a0 100644 --- a/gen/strategii/m2d_exemplu.spec.txt +++ b/gen/strategii/m2d_exemplu.spec.txt @@ -34,9 +34,21 @@ Faza 2, candelele 7-13 — pullback în sus = Buy Momentum pe TF mic (M): Faza 3, candela 14 — primul Sell după pullback = trigger (A): open 100.30 (close-ul candelei 13), close 100.00. Faza 4, candelele 15-29 — coborâre cu bear trail: - close-uri: 99.5, 99.0, 98.5, 98.0, 97.6, 97.2, 96.9, 96.6, 96.3, 96.1, - 95.8, 95.5, 95.2, 95.35, 95.45 - candela 29 (close 95.45) e ieșirea pe violarea bear trail-ului. + close-uri: 99.45, 99.80, 98.58, 98.10, 97.60, 97.95, 97.40, 96.90, 96.40, + 96.75, 96.20, 95.70, 95.20, 95.00, 95.45 + barele 16, 20 și 24 sunt retestări: fitil lung în sus care atinge linia de + trail, dar se închide sub ea (nu o violează). Candela 29 (close 95.45) e + ieșirea: se închide PESTE linia de trail (95.25), deci violarea e reală. + +BEAR TRAIL (linia de trail, desenată ca scară portocalie) +--------------------------------------------------------- +Regula capitolului: linia sare pe high-ul fiecărei bare care se închide sub +low-ul precedentei; violarea = prima bară care se închide PESTE linie. +Linia NU urcă niciodată. Seria e construită astfel încât fitilele barelor +16/20/24 să atingă linia fără s-o violeze, iar ieșirea să vină abia la bara +29, care închide peste linie (nu doar cu fitilul). Linia se desenează ca +scară (un palier pe bară, conector vertical între paliere), etichetă +„bear trail" lângă primul palier. NIVELURI (Level) — exact acestea -------------------------------- @@ -73,6 +85,15 @@ ASSERT-URI OBLIGATORII ÎN GENERATOR 8. Fiecare open == close-ul barei anterioare. 9. Candela 14 închide în jos față de candela 13 (trigger Sell după pullback Buy); există cel puțin o candelă din 7-13 care închide în sus (pullback-ul Buy). +10. Bara 17 e la exact 1.42% profit față de intrare (procentul real din curs). +11. Bear trail recalculat din serie: ieșirea e pe bara 29, iar close-ul ei + (95.45) e PESTE linia de trail (95.25) — nu doar fitilul. (Pe seria veche + close-ul 95.45 era sub linia 95.65 și nu exista nicio ieșire.) +12. Linia de trail nu urcă niciodată (e trail, nu nivel fix). +13. Nicio bară dinainte de 29 nu închide peste linie (altfel ieșeai mai devreme). +14. Fitilele au atins linia de mai multe ori fără s-o violeze: barele 16, 20 + și 24 au high ≥ linia în vigoare și close < ea. (Pe seria veche, pe + barele 15-28 niciun high nu ajungea la linie.) SURSA CIFRELOR -------------- diff --git a/gen/strategii/m2d_exemplu.svg b/gen/strategii/m2d_exemplu.svg index a01467b..cb030b1 100644 --- a/gen/strategii/m2d_exemplu.svg +++ b/gen/strategii/m2d_exemplu.svg @@ -1,4 +1,4 @@ - + RIOT — 3 min (TF mare 15 min în Sell) SL 100.85 = +0.85% @@ -39,71 +39,97 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - volum + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + volum TF mare (15 min) în Sell M: Buy Momentum (pullback) A: primul Sell = trigger, intri short - deja peste TP1 (1.42% din curs) - close peste bear trail = ieși - Axa de preț e construită (intrarea = 100.00); procentele sunt reale din curs. + deja peste TP1 (1.42% din curs) + close peste bear trail = ieși + Axa de preț e construită (intrarea = 100.00); procentele sunt reale din curs. + + + + + + + + + + + + + + + + + + + + + + + + + + bear trail \ No newline at end of file diff --git a/gen/strategii/mbp_exemplu.py b/gen/strategii/mbp_exemplu.py index 0af6719..e6c53ff 100644 --- a/gen/strategii/mbp_exemplu.py +++ b/gen/strategii/mbp_exemplu.py @@ -1,10 +1,11 @@ """Diagrama din `gen/strategii/mbp_exemplu.spec.txt` (TIP: PRET). Trade-ul short complet din material (SPY, 15 min, 25.11.2025): ~12 candele -de urcare violentă spre vârful ~661, candela M (verde, peste bandă + TICUS -≥ +1000), trigger Sell Momentum → intrare short 660.00, SL 662.71 -(risc 0.41 %), TP1 657.29 (1:1) atins în prima candelă, apoi trail pe 7 -candele de 15 min până la ieșirea la 646.80 = 2 % = ~4.9R. +de urcare violentă spre vârful 662.71, candela M (verde, close 660.50 peste +banda superioară + TICUS ≥ +1000), trigger Sell Momentum → intrare short +660.00, SL 662.71 = chiar maximul ultimelor 4 candele (risc 0.41 %), TP1 +657.29 (1:1) atins în prima candelă, apoi trail pe 7 candele de 15 min până +la ieșirea la 646.80 = 2 % = ~4.9R. Serie continuă de 32 de candele (`from_closes`, open = close anterior), cu context înainte de urcare, panou TICUS dedesubt (bar ilustrativ la candela M) @@ -28,7 +29,7 @@ ENTRY = 660.00 # 09_QA/11_2025-11-25.md:565, 632-636 SL = 662.71 # risc 0.41 % → (sl-entry)/entry*100 TP1 = 657.29 # entry - (sl - entry) = 1:1 EXIT = 646.80 # ieșire pe trail = 2 % = ~4.9R -BAND = 660.90 # bandă superioară schematică (peste close-ul lui M) +BAND = 660.20 # bandă superioară schematică (sub close-ul lui M) W, GAP, BODY_W, LEFT = 660, 15, 9, 40 SCALE = 20.0 @@ -54,7 +55,7 @@ assert len(closes) == 32, len(closes) wicks = [(0.35, 0.35)] * 12 # context wicks += [(0.30, 0.25)] * (M_I - 12) # urcarea (idx 12..22) -wicks += [(0.50, 0.20)] # M: high = 661.00 (vârful) +wicks += [(SL - closes[M_I], 0.20)] # M: high = 662.71 = SL (vârful) wicks += [(0.20, 0.40), # trigger (0.25, 0.51), # TP1: low = 657.80-0.51 = 657.29 (0.30, 0.30), (0.30, 0.30), (0.30, 0.30), @@ -80,7 +81,14 @@ assert abs((entry - exit_) / entry * 100 - 2.0) < 0.05, (entry - exit_) / entry assert abs((entry - exit_) / (sl - entry) - 4.9) < 0.1, (entry - exit_) / (sl - entry) assert EXIT_I - E_I == 7, EXIT_I - E_I assert sl > entry > tp1, "short: SL deasupra intrării, TP1 sub intrare" -assert BAND > cds[M_I].c, "banda schematică nu e deasupra close-ului lui M" +assert cds[M_I].c > BAND, "candela M nu se închide peste banda superioară" + +# stopul stă FIX pe cel mai înalt high al ultimelor 4 candele (trigger inclus) +FEREASTRA = cds[E_I - 3:E_I + 1] +assert len(FEREASTRA) == 4 and FEREASTRA[-1] is cds[E_I], "fereastra de stop nu are 4 bare" +assert abs(max(c.h for c in FEREASTRA) - sl) < 1e-9, \ + f"stopul {sl:.2f} nu e fix pe maximul celor 4 bare " \ + f"({max(c.h for c in FEREASTRA):.2f})" # structura care susține afirmațiile din text assert cds[M_I].c > cds[M_I].o, "candela M trebuie să fie verde" @@ -96,13 +104,13 @@ assert all(cds[i].c > cds[i - 1].c for i in range(13, M_I + 1)), "urcarea nu e m levels = [ Level(SL, "SL 662.71 (risc 0.41 %)", "#c00", label_at="right"), Level(ENTRY, "intrare short 660.00", "#188a3e", label_at="left"), - Level(BAND, "bandă superioară (schematic)", "#777", dash="2 4", label_at="left"), + Level(BAND, "bandă superioară (schematic)", "#777", dash="2 4", label_at="right"), Level(TP1, "TP1 657.29 (1:1)", "#1a5fb4", label_at="left"), Level(EXIT, "ieșire trail 646.80 = 2 % = ~4.9R", "#1a5fb4", label_at="left"), ] marks = [ - Mark(M_I, "M: candelă verde peste bandă + TICUS ≥ +1000", "#188a3e", "above"), + Mark(M_I, "M: close peste bandă", "#188a3e", "above"), ] cds[M_I].note = ("M: valori exacte NEACOPERIT în material (bandă + TICUS); " @@ -118,7 +126,7 @@ ch = Chart( marks=marks, mas=[MA(20, "#b06000", dash="4 3", text="SMA-20")], scale=SCALE, width=W, gap=GAP, body_w=BODY_W, left=LEFT, - title="SPY — 15 min: MBAP short 25.11.2025 (risc 0.41 % → ieșire 4.9R)", + title="SPY — 15 min: MBAP short 25.11.2025", caption="", ) price_svg = ch.render() @@ -158,14 +166,14 @@ ticus = [ ] # ── legenda (cifrele/sursele) ─────────────────────────────────────────────── +# Fără trimiteri „fișier:linie" în etichetele SVG: sursele trăiesc doar în +# fisa capitolului (STYLE.md, secțiunea Referințe). legend = [ "Legendă: procentele (risc 0.41 %, ieșire 2 %) sunt ale instructorului.", - "Prețurile absolute (660.00 / 662.71 / 657.29 / 646.80) sunt construite de sumarizator —", - "09_QA/11_2025-11-25.md:716-719.", + "Prețurile absolute (660.00 / 662.71 / 657.29 / 646.80) sunt construite de sumarizator.", "Structura de reținut: risc mic → TP1 (1:1) atins imediat → trail lung (7 candele de 15 min).", "Valoarea exactă a benzii și a TICUS la candela M nu e dată în sesiune; bara ~+1000 e ilustrativă.", "„Taurii urcă pe scări, urșii sar de la etaj\" — de ce short-ul se consumă în ore.", - "(09_QA/11_2025-11-25.md:643-648).", ] cap_top = Y0 + TICUS_H + 20 H = cap_top + 16 * (len(legend) - 1) + 14 diff --git a/gen/strategii/mbp_exemplu.svg b/gen/strategii/mbp_exemplu.svg index 525a83a..88af375 100644 --- a/gen/strategii/mbp_exemplu.svg +++ b/gen/strategii/mbp_exemplu.svg @@ -1,12 +1,12 @@ - + - SPY — 15 min: MBAP short 25.11.2025 (risc 0.41 % → ieșire 4.9R) + SPY — 15 min: MBAP short 25.11.2025 SL 662.71 (risc 0.41 %) intrare short 660.00 - - bandă superioară (schematic) + + bandă superioară (schematic) TP1 657.29 (1:1) @@ -59,7 +59,7 @@ - + @@ -77,7 +77,7 @@ - M: candelă verde peste bandă + TICUS ≥ +1000 + M: close peste bandă M: valori exacte NEACOPERIT în material (bandă + TICUS); bara ~+1000 din panou e ilustrativă trigger Sell Momentum → intrare short 660.00 (risc 0.41 % = 2.71) TP1 657.29 (1:1) atins în prima candelă după intrare @@ -92,10 +92,8 @@ ilustrativ candela M Legendă: procentele (risc 0.41 %, ieșire 2 %) sunt ale instructorului. - Prețurile absolute (660.00 / 662.71 / 657.29 / 646.80) sunt construite de sumarizator — - 09_QA/11_2025-11-25.md:716-719. - Structura de reținut: risc mic → TP1 (1:1) atins imediat → trail lung (7 candele de 15 min). - Valoarea exactă a benzii și a TICUS la candela M nu e dată în sesiune; bara ~+1000 e ilustrativă. - „Taurii urcă pe scări, urșii sar de la etaj" — de ce short-ul se consumă în ore. - (09_QA/11_2025-11-25.md:643-648). + Prețurile absolute (660.00 / 662.71 / 657.29 / 646.80) sunt construite de sumarizator. + Structura de reținut: risc mic → TP1 (1:1) atins imediat → trail lung (7 candele de 15 min). + Valoarea exactă a benzii și a TICUS la candela M nu e dată în sesiune; bara ~+1000 e ilustrativă. + „Taurii urcă pe scări, urșii sar de la etaj" — de ce short-ul se consumă în ore. \ No newline at end of file