From 84f933bcfa8056f742509f9cb5eb99b95aea51e5 Mon Sep 17 00:00:00 2001 From: Claude Agent Date: Fri, 2 Oct 2026 06:12:32 +0000 Subject: [PATCH] svg_candles: cautarea nivelurilor, scoasa in functie comuna; 11 generatoare reparate Unsprezece generatoare nu mai rulau deloc la HEAD: cautau 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 Claude-Session: https://claude.ai/code/session_01ThN7ixZrowca8aTGrK1MUJ --- gen/strategii/atmi_ansamblu.svg | 8 +- gen/strategii/atmi_corectie.svg | 6 +- gen/strategii/atmi_exemplu.svg | 4 +- gen/strategii/atmi_pivoti.svg | 4 +- gen/strategii/atmi_risc.svg | 8 +- gen/strategii/buy_doji_ansamblu.py | 7 +- gen/strategii/buy_doji_ansamblu.svg | 12 +- gen/strategii/buy_doji_aplus.svg | 6 +- gen/strategii/buy_doji_iesire.py | 4 +- gen/strategii/buy_doji_iesire.svg | 12 +- gen/strategii/buy_doji_labu.svg | 18 +-- gen/strategii/buy_doji_sell.svg | 6 +- gen/strategii/buy_doji_transe.py | 5 +- gen/strategii/buy_doji_transe.svg | 10 +- gen/strategii/hammer_mbt10_bh_ansamblu.svg | 8 +- gen/strategii/hammer_mbt10_bh_iesire.py | 4 +- gen/strategii/hammer_mbt10_bh_iesire.svg | 12 +- gen/strategii/hammer_mbt10_bh_sell.svg | 8 +- gen/strategii/hammer_mbt10_bh_stop.py | 4 +- gen/strategii/hammer_mbt10_bh_stop.svg | 8 +- gen/strategii/hammer_mbt10_mbt_ansamblu.svg | 10 +- gen/strategii/hammer_mbt10_mbt_close.svg | 6 +- gen/strategii/hammer_mbt10_mbt_tesla.svg | 6 +- gen/strategii/intrarea_cazul_lui.py | 23 +++- gen/strategii/intrarea_cazul_lui.svg | 14 +- gen/strategii/intrarea_doua_variante.py | 13 +- gen/strategii/intrarea_doua_variante.svg | 16 +-- gen/strategii/intrarea_retest_ratat.svg | 8 +- gen/strategii/m2d_exemplu.svg | 8 +- gen/strategii/mbp_context.svg | 10 +- gen/strategii/mbp_samecandle.svg | 4 +- gen/strategii/mbp_stop.svg | 14 +- gen/strategii/mbp_trigger.svg | 24 ++-- gen/strategii/mdsrt_ansamblu.svg | 10 +- gen/strategii/mdsrt_iesire.svg | 12 +- gen/strategii/mdsrt_picior.svg | 8 +- gen/strategii/mdsrt_trigger.py | 4 +- gen/strategii/mdsrt_trigger.svg | 14 +- gen/strategii/mp2_ansamblu.svg | 14 +- gen/strategii/mp2_bottom.svg | 12 +- gen/strategii/mp2_crossing.svg | 4 +- gen/strategii/mp2_iesire.svg | 14 +- gen/strategii/mp2_pivoti.svg | 2 +- gen/strategii/mp2_serie.py | 5 +- gen/strategii/mp2_stop.svg | 8 +- gen/strategii/mp2_trigger.svg | 2 +- gen/strategii/selectia_ansamblu.py | 7 +- gen/strategii/selectia_ansamblu.svg | 6 +- gen/strategii/selectia_exemplu.svg | 12 +- gen/strategii/selectia_proximitate.py | 11 +- gen/strategii/selectia_proximitate.svg | 6 +- summaries/17_STRATEGII/01_buy_doji.html | 64 +++++----- summaries/17_STRATEGII/01_buy_doji.md | 64 +++++----- summaries/17_STRATEGII/04_selectia.html | 24 ++-- summaries/17_STRATEGII/04_selectia.md | 24 ++-- summaries/17_STRATEGII/06_hammer_mbt10.html | 134 ++++++++++---------- summaries/17_STRATEGII/06_hammer_mbt10.md | 58 ++++----- summaries/17_STRATEGII/A3_intrarea.html | 38 +++--- summaries/17_STRATEGII/A3_intrarea.md | 38 +++--- svg_candles.py | 44 +++++++ 60 files changed, 505 insertions(+), 444 deletions(-) diff --git a/gen/strategii/atmi_ansamblu.svg b/gen/strategii/atmi_ansamblu.svg index a246a8d..94e0e68 100644 --- a/gen/strategii/atmi_ansamblu.svg +++ b/gen/strategii/atmi_ansamblu.svg @@ -2,11 +2,11 @@ zona PPQ 95.80 — aici cumperi fără stop-loss standard — nicio linie sub intrare SPY — daily: corecție ≥4 % → zona PPQ → BIM + verde → intrare → TP +10 % - - 100.00 — swing high recent - + + 100.00 — swing high recent + intrare 96.00 - + TP +10 % = 105.60 diff --git a/gen/strategii/atmi_corectie.svg b/gen/strategii/atmi_corectie.svg index 546ccf3..11407c7 100644 --- a/gen/strategii/atmi_corectie.svg +++ b/gen/strategii/atmi_corectie.svg @@ -1,11 +1,11 @@ SPY — daily: aceeași corecție, 4.0 % (DA) vs. 3.9 % (NU) - + 100.00 — swing high - + 96.00 = 4.0 % — DA, intri - + TP +10 % = 105.60 diff --git a/gen/strategii/atmi_exemplu.svg b/gen/strategii/atmi_exemplu.svg index 031c7b6..641e667 100644 --- a/gen/strategii/atmi_exemplu.svg +++ b/gen/strategii/atmi_exemplu.svg @@ -1,8 +1,8 @@ SPY — monthly: intrare ianuarie 2005 la 117.43 → TP1 +10 % = 129.17 - + intrare 117.43 - + TP1 129.17 (+10 %) diff --git a/gen/strategii/atmi_pivoti.svg b/gen/strategii/atmi_pivoti.svg index 1db9a99..8bcb5af 100644 --- a/gen/strategii/atmi_pivoti.svg +++ b/gen/strategii/atmi_pivoti.svg @@ -8,9 +8,9 @@ R1 = 2 x PP - L = 2 x 95.80 - 90.40 = 101.20 - + PPQ 95.80 — zona 1 - + SQ 90.80 — zona 2 diff --git a/gen/strategii/atmi_risc.svg b/gen/strategii/atmi_risc.svg index f2dbdb4..44de985 100644 --- a/gen/strategii/atmi_risc.svg +++ b/gen/strategii/atmi_risc.svg @@ -6,12 +6,12 @@ ETF simplu (SPY): -20 % ETF cu levier 2x: -40 % ETF cu levier 3x (SPXL): -60 % - + TP +10 % = 105.60 - + intrare 96.00 - - fund 76.80 = -20 % pe poziție + + fund 76.80 = -20 % pe poziție diff --git a/gen/strategii/buy_doji_ansamblu.py b/gen/strategii/buy_doji_ansamblu.py index dce1759..5550616 100644 --- a/gen/strategii/buy_doji_ansamblu.py +++ b/gen/strategii/buy_doji_ansamblu.py @@ -12,7 +12,8 @@ date explicit: 21 și 27 deschid cu GAP (low peste high-ul precedentei), fiindcă regula de trail din curs se sprijină exact pe barele astea. """ import sys; sys.path.insert(0, "/workspace/atm-curs-dl") -from svg_candles import Candle, Chart, Level, MA, Zone, Arrow, from_closes +from svg_candles import (Candle, Chart, Level, MA, Zone, Arrow, from_closes, + offset_render) OUT = "/workspace/atm-curs-dl/gen/strategii/buy_doji_ansamblu.svg" @@ -135,9 +136,7 @@ if __name__ == "__main__": svg = ch.render() # render() mută `top` intern (titlu, săgeți) și îl restaurează: ch._y() de aici # e mai sus cu atâta. Offsetul se citește din prima linie de Level desenată. - import re as _re - OFF = (float(_re.search(r'3. confirmarea 4. ieșirea: o treime la țintă, restul pe trail - - ținta 1: 51.60 - - intrare 50.40 - - stop 49.20 + + ținta 1: 51.60 + + intrare 50.40 + + stop 49.20 MA(20) diff --git a/gen/strategii/buy_doji_aplus.svg b/gen/strategii/buy_doji_aplus.svg index 23e0664..24c8eb9 100644 --- a/gen/strategii/buy_doji_aplus.svg +++ b/gen/strategii/buy_doji_aplus.svg @@ -1,8 +1,8 @@ Setup A+ vs. setup mediocru (două panouri, exemple construite) A+ — doji la suport, volum în acumulare - - suport 42.00 + + suport 42.00 @@ -88,7 +88,7 @@ volum în creștere = acumulare Mediocru — gap-up în rezistență, volum varză - + rezistență 78.50 diff --git a/gen/strategii/buy_doji_iesire.py b/gen/strategii/buy_doji_iesire.py index f3ac053..c4bee64 100644 --- a/gen/strategii/buy_doji_iesire.py +++ b/gen/strategii/buy_doji_iesire.py @@ -18,7 +18,7 @@ from pathlib import Path sys.path.insert(0, "/workspace/atm-curs-dl") sys.path.insert(0, str(Path(__file__).parent)) -from svg_candles import Chart, Level, Zone, Arrow, from_closes # noqa: E402 +from svg_candles import Chart, Level, Zone, Arrow, from_closes, offset_render # noqa: E402 from buy_doji_ansamblu import serie, CONF, ENTRY, SL, TP1, R, trail # noqa: E402 OUT = Path(__file__).with_suffix(".svg") @@ -104,7 +104,7 @@ def panou(ch, sus_de=0.0): h = float(re.search(r'viewBox="0 0 [\d.]+ ([\d.]+)"', svg).group(1)) # render() mută `top`/`left` intern și le restaurează: tot ce desenăm noi # după randare trebuie deplasat cu aceiași pixeli - off_y = float(re.search(r']*stroke="#1a1a1a"', svg).group(1)) - ch._cx(0) return svg[svg.index(">") + 1:svg.rindex("")].strip(), h, off_x, off_y diff --git a/gen/strategii/buy_doji_iesire.svg b/gen/strategii/buy_doji_iesire.svg index 03f2590..de9624e 100644 --- a/gen/strategii/buy_doji_iesire.svg +++ b/gen/strategii/buy_doji_iesire.svg @@ -2,11 +2,11 @@ A — prima treime la țintă, a doua pe trailing stop - + ținta 1: 51.60 (= 1R) - + intrarea: 50.40 - + stopul: 49.20 @@ -70,11 +70,11 @@ B — limita de 8 candele: nici ținta, nici stopul - + ținta 1: 51.60 — neatinsă - + intrarea: 50.40 - + stopul: 49.20 — neatins diff --git a/gen/strategii/buy_doji_labu.svg b/gen/strategii/buy_doji_labu.svg index 21f664f..9e1b026 100644 --- a/gen/strategii/buy_doji_labu.svg +++ b/gen/strategii/buy_doji_labu.svg @@ -10,16 +10,16 @@ 3. trendul pornește 4. ținta - - pivot lunar 86.00 - - stop 81.45 = 9 % sub intrare (procent real) - + + pivot lunar 86.00 + + stop 81.45 = 9 % sub intrare (procent real) + intrare 89.50 - - ținta 1:1 97.55 - - 116.35 = +30 % față de intrare (procent real) + + ținta 1:1 97.55 + + 116.35 = +30 % față de intrare (procent real) SMA-20 diff --git a/gen/strategii/buy_doji_sell.svg b/gen/strategii/buy_doji_sell.svg index 7a7872e..21ec012 100644 --- a/gen/strategii/buy_doji_sell.svg +++ b/gen/strategii/buy_doji_sell.svg @@ -7,11 +7,11 @@ - + stop 100.15 - + intrare short 99.00 - + ținta 97.85 diff --git a/gen/strategii/buy_doji_transe.py b/gen/strategii/buy_doji_transe.py index 9007d16..6ea9b0c 100644 --- a/gen/strategii/buy_doji_transe.py +++ b/gen/strategii/buy_doji_transe.py @@ -15,7 +15,7 @@ from pathlib import Path sys.path.insert(0, "/workspace/atm-curs-dl") sys.path.insert(0, str(Path(__file__).parent)) -from svg_candles import Chart, Level, Zone, Arrow # noqa: E402 +from svg_candles import Chart, Level, Zone, Arrow, offset_render # noqa: E402 from buy_doji_ansamblu import serie, DOJI, CONF, DOJI_L, ENTRY, SL, TP1, R # noqa: E402 OUT = Path(__file__).with_suffix(".svg") @@ -73,8 +73,7 @@ ch = Chart( title="Intrarea în trei tranșe — același trade (doji 50.10 / 49.25)", ) svg = ch.render() -OFF = (float(re.search(r' Intrarea în trei tranșe — același trade (doji 50.10 / 49.25) - + ținta 1: 51.60 = 1R față de close - + ținta 1: 51.32 = 1R față de prețul mediu 50.26 - + intrarea (close-ul de confirmare): 50.40 - - stopul: 49.20 + + stopul: 49.20 diff --git a/gen/strategii/hammer_mbt10_bh_ansamblu.svg b/gen/strategii/hammer_mbt10_bh_ansamblu.svg index acc868b..c51c1f0 100644 --- a/gen/strategii/hammer_mbt10_bh_ansamblu.svg +++ b/gen/strategii/hammer_mbt10_bh_ansamblu.svg @@ -1,10 +1,10 @@ Buy hammer — daily (ticker ilustrativ XYZ, din lecția de pattern) - - SL 62.05 — sub low-ul hammer-ului - + + SL 62.05 — sub low-ul hammer-ului + intrare 63.35 - + TP 65.95 = 2R diff --git a/gen/strategii/hammer_mbt10_bh_iesire.py b/gen/strategii/hammer_mbt10_bh_iesire.py index 4426a2d..09e19e6 100644 --- a/gen/strategii/hammer_mbt10_bh_iesire.py +++ b/gen/strategii/hammer_mbt10_bh_iesire.py @@ -16,7 +16,7 @@ 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_bh_ansamblu import serie -from svg_candles import Arrow, Candle, Chart, Level, Zone +from svg_candles import Arrow, Candle, Chart, Level, Zone, offset_render OUT = Path(__file__).with_suffix(".svg") GREEN, RED, BLUE, ORANGE, GREY = "#188a3e", "#c00", "#1a5fb4", "#b06000", "#555" @@ -102,7 +102,7 @@ ch = Chart( 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' pullback - + 65.95 = 2R — ținta din exemplul lecției - + 64.65 = 1:1 — prima jumătate - - intrare 63.35 - - SL inițial 62.05 + + intrare 63.35 + + SL inițial 62.05 diff --git a/gen/strategii/hammer_mbt10_bh_sell.svg b/gen/strategii/hammer_mbt10_bh_sell.svg index 5d015c9..9702108 100644 --- a/gen/strategii/hammer_mbt10_bh_sell.svg +++ b/gen/strategii/hammer_mbt10_bh_sell.svg @@ -1,10 +1,10 @@ Sell hammer — oglinda pe short (daily, exemplu construit) - + SL 100.25 — peste high-ul sell hammer-ului - - intrare short 98.95 - + + intrare short 98.95 + TP 96.35 = 2R diff --git a/gen/strategii/hammer_mbt10_bh_stop.py b/gen/strategii/hammer_mbt10_bh_stop.py index dd8ddf8..22ba8af 100644 --- a/gen/strategii/hammer_mbt10_bh_stop.py +++ b/gen/strategii/hammer_mbt10_bh_stop.py @@ -14,7 +14,7 @@ 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_bh_ansamblu import serie -from svg_candles import Arrow, Chart, Level, Zone +from svg_candles import Arrow, Chart, Level, Zone, offset_render OUT = Path(__file__).with_suffix(".svg") GREEN, RED, BLUE, ORANGE, GREY = "#188a3e", "#c00", "#1a5fb4", "#b06000", "#555" @@ -60,7 +60,7 @@ m = re.search(r'viewBox="0 0 (\d+) (\d+)"', svg) W, H = int(m.group(1)), int(m.group(2)) # paranteza de risc, desenată de mână: stop -> intrare, cu textul în dreapta -OFF = (float(re.search(r'Buy hammer — stopul și mărimea poziției (daily, ticker ilustrativ XYZ) cele două bare care dau stopul - - intrare 63.35 (close-ul confirmării) - - SL 62.05 + + intrare 63.35 (close-ul confirmării) + + SL 62.05 diff --git a/gen/strategii/hammer_mbt10_mbt_ansamblu.svg b/gen/strategii/hammer_mbt10_mbt_ansamblu.svg index 57b9463..f0ccf4f 100644 --- a/gen/strategii/hammer_mbt10_mbt_ansamblu.svg +++ b/gen/strategii/hammer_mbt10_mbt_ansamblu.svg @@ -1,12 +1,12 @@ MBT-10 — pullback în locul crimei + hammer, închidere la 54.60 (exemplu construit) - - locul crimei 52.10 (fost vârf spart) - + + locul crimei 52.10 (fost vârf spart) + SL 52.00 — sub codița hammer-ului - + intrare 54.60 (close în MBT-10) - + TP 58.90 = 1.65R diff --git a/gen/strategii/hammer_mbt10_mbt_close.svg b/gen/strategii/hammer_mbt10_mbt_close.svg index ed0df98..5585eec 100644 --- a/gen/strategii/hammer_mbt10_mbt_close.svg +++ b/gen/strategii/hammer_mbt10_mbt_close.svg @@ -2,10 +2,10 @@ 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 + + locul crimei 52.10 — structura ideii diff --git a/gen/strategii/hammer_mbt10_mbt_tesla.svg b/gen/strategii/hammer_mbt10_mbt_tesla.svg index 08aedde..6043f82 100644 --- a/gen/strategii/hammer_mbt10_mbt_tesla.svg +++ b/gen/strategii/hammer_mbt10_mbt_tesla.svg @@ -1,8 +1,8 @@ Tesla — daily: trigger MBT-10, intrare 311.21 → 333.00 = +7.0 % în 6 zile - - intrare 311.21 (close) - + + intrare 311.21 (close) + rezultat 333.00 = +7.0 % în 6 zile diff --git a/gen/strategii/intrarea_cazul_lui.py b/gen/strategii/intrarea_cazul_lui.py index f377d7c..acf9788 100644 --- a/gen/strategii/intrarea_cazul_lui.py +++ b/gen/strategii/intrarea_cazul_lui.py @@ -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'▲ roșie mare: −0.68R flotant', f'ieși aici: 102.60 = +0.23R', f'', - f'SL 99.90 (low 4 candele)', - f'' + f'y2="{Y(cds[19].h) - 3:.1f}" stroke="{ORANGE}" stroke-width="1"/>', + f'SL 99.90 (low 4 candele)', + f'' f'── SMA 5 / - - SMA 10 ilustrative', ] legend = [ diff --git a/gen/strategii/intrarea_cazul_lui.svg b/gen/strategii/intrarea_cazul_lui.svg index 9ba4798..29c6b63 100644 --- a/gen/strategii/intrarea_cazul_lui.svg +++ b/gen/strategii/intrarea_cazul_lui.svg @@ -1,14 +1,14 @@ Exemplu construit (fără ticker) — 15 min, suport weekly - - TP1 104.30 (1:1) - + + TP1 104.30 (1:1) + intrare la close 102.10 - + 1/2 = 101.20 (B s-ar fi umplut aici) - - suport weekly 100.00 - + + suport weekly 100.00 + diff --git a/gen/strategii/intrarea_doua_variante.py b/gen/strategii/intrarea_doua_variante.py index 97b7ad5..1f04ca6 100644 --- a/gen/strategii/intrarea_doua_variante.py +++ b/gen/strategii/intrarea_doua_variante.py @@ -19,7 +19,7 @@ import sys from pathlib import Path sys.path.insert(0, "/workspace/atm-curs-dl") -from svg_candles import Chart, Level, Mark, from_closes # noqa: E402 +from svg_candles import Chart, Level, Mark, from_closes, offset_render # noqa: E402 OUT = Path(__file__).resolve().parent / "intrarea_doua_variante.svg" GRI, ROSU, VERDE, PORT, ALB = "#777", "#c00", "#188a3e", "#b06000", "#1a5fb4" @@ -82,7 +82,16 @@ ch = Chart(candles=cds, levels=levels, title="Exemplu construit (fără ticker) — 15 min") svg = ch.render() svg = re.sub(r'\s*]*>', "", svg) # eticheta goală a SL-ului -y, cx = ch._y, ch._cx +# render() ridică `top` pentru titlu și îl pune la loc: ch._y() de aici e cu +# OFF mai sus decât desenul (aceeași capcană ca în intrarea_cazul_lui) +OFF = offset_render(svg, ch) + + +def y(p): + return ch._y(p) + OFF + + +cx = ch._cx ySL = y(SL) extra = [] diff --git a/gen/strategii/intrarea_doua_variante.svg b/gen/strategii/intrarea_doua_variante.svg index 293de8f..c53dcf6 100644 --- a/gen/strategii/intrarea_doua_variante.svg +++ b/gen/strategii/intrarea_doua_variante.svg @@ -1,19 +1,19 @@ Exemplu construit (fără ticker) — 15 min - + suport 100.00 - - + + A: intrare la close 102.15 - + B: 1/3 = 101.55 - + B: 1/2 = 101.25 - + TP1 A 104.40 - + TP1 B (1/2) 102.60 - + TP1 B (1/3) 103.20 diff --git a/gen/strategii/intrarea_retest_ratat.svg b/gen/strategii/intrarea_retest_ratat.svg index 8d3f251..e879c2d 100644 --- a/gen/strategii/intrarea_retest_ratat.svg +++ b/gen/strategii/intrarea_retest_ratat.svg @@ -1,12 +1,12 @@ Exemplu construit (fără ticker) — 15 min - + SL 99.90 - + ordin 1/3 101.55 — neumplut - + ordin 1/2 101.25 — neumplut - + A: close 102.15 diff --git a/gen/strategii/m2d_exemplu.svg b/gen/strategii/m2d_exemplu.svg index cb030b1..4398f98 100644 --- a/gen/strategii/m2d_exemplu.svg +++ b/gen/strategii/m2d_exemplu.svg @@ -1,12 +1,12 @@ RIOT — 3 min (TF mare 15 min în Sell) - + SL 100.85 = +0.85% - + intrare 100.00 (trigger Sell) - + TP1 99.15 = 1:1 - + ieșire 95.45 = +4.55% ≈ 1:5.3 diff --git a/gen/strategii/mbp_context.svg b/gen/strategii/mbp_context.svg index eb10296..cca9024 100644 --- a/gen/strategii/mbp_context.svg +++ b/gen/strategii/mbp_context.svg @@ -5,9 +5,9 @@ - - - + + + @@ -72,8 +72,8 @@ - - + + diff --git a/gen/strategii/mbp_samecandle.svg b/gen/strategii/mbp_samecandle.svg index fa27641..6a313f3 100644 --- a/gen/strategii/mbp_samecandle.svg +++ b/gen/strategii/mbp_samecandle.svg @@ -1,5 +1,5 @@ - + bandă 623.90 @@ -31,7 +31,7 @@ M: TICUS -1150 (sub -1000) M: close 623.87 < bandă 623.90 - + bandă 623.90 diff --git a/gen/strategii/mbp_stop.svg b/gen/strategii/mbp_stop.svg index 8012dfd..4bc8461 100644 --- a/gen/strategii/mbp_stop.svg +++ b/gen/strategii/mbp_stop.svg @@ -2,14 +2,14 @@ SPY — 15 min: de unde iese stopul (fereastra de 4 candele) 4 candele: trigger-ul și cele 3 dinaintea lui - - banda inferioară 623.90 - + + banda inferioară 623.90 + intrare 623.95 = close-ul trigger-ului - - SL 623.60 - - + + SL 623.60 + + diff --git a/gen/strategii/mbp_trigger.svg b/gen/strategii/mbp_trigger.svg index 1289183..da9f13b 100644 --- a/gen/strategii/mbp_trigger.svg +++ b/gen/strategii/mbp_trigger.svg @@ -3,12 +3,12 @@ DA — candelă de moment după M NU — M valid, dar fără trigger - - bandă inferioară 623.90 - - SL 623.60 - - + + bandă inferioară 623.90 + + SL 623.60 + + @@ -48,12 +48,12 @@ 3 candele fără trigger - - bandă inferioară 623.90 - - stopul ar fi fost 623.60 - - + + bandă inferioară 623.90 + + stopul ar fi fost 623.60 + + diff --git a/gen/strategii/mdsrt_ansamblu.svg b/gen/strategii/mdsrt_ansamblu.svg index 95f498c..cf7da61 100644 --- a/gen/strategii/mdsrt_ansamblu.svg +++ b/gen/strategii/mdsrt_ansamblu.svg @@ -3,12 +3,12 @@ cifrele planului nu vin din curs) M (zonă + divergență) → A (trigger) → P (plan) - - pivot daily 590.00 — zona (M) - + + pivot daily 590.00 — zona (M) + SL 589.40 = 0.10 sub piciorul 2 (risc 0.80) - - TP1 591.00 = 1:1 + + TP1 591.00 = 1:1 SMA-20 diff --git a/gen/strategii/mdsrt_iesire.svg b/gen/strategii/mdsrt_iesire.svg index 88dd9c3..21024cb 100644 --- a/gen/strategii/mdsrt_iesire.svg +++ b/gen/strategii/mdsrt_iesire.svg @@ -2,12 +2,12 @@ Pasul 6 — ieșirea: ținta 1:1, breakeven, restul pe trail (SPY 5 min, construit) de aici stopul stă la breakeven - - TP1 591.00 = 1:1 - - intrare 590.20 = breakeven - - SL inițial 589.40 (risc 0.80 = 1R) + + TP1 591.00 = 1:1 + + intrare 590.20 = breakeven + + SL inițial 589.40 (risc 0.80 = 1R) diff --git a/gen/strategii/mdsrt_picior.svg b/gen/strategii/mdsrt_picior.svg index 6b48209..b090c30 100644 --- a/gen/strategii/mdsrt_picior.svg +++ b/gen/strategii/mdsrt_picior.svg @@ -2,10 +2,10 @@ Pasul 2 — al doilea picior, sub nivel (SPY 5 min, exemplu construit) aici se schimbă mâna - - pivot daily 590.00 - - SL 589.40 + + pivot daily 590.00 + + SL 589.40 diff --git a/gen/strategii/mdsrt_trigger.py b/gen/strategii/mdsrt_trigger.py index 9857d1d..245dc0c 100644 --- a/gen/strategii/mdsrt_trigger.py +++ b/gen/strategii/mdsrt_trigger.py @@ -18,7 +18,7 @@ from pathlib import Path sys.path.insert(0, "/workspace/atm-curs-dl") sys.path.insert(0, str(Path(__file__).parent)) -from svg_candles import Chart, Level, Zone, Arrow, from_closes # noqa: E402 +from svg_candles import Chart, Level, Zone, Arrow, from_closes, offset_render # noqa: E402 from mdsrt_ansamblu import serie, SUPORT, TRIG, CONF, ENTRY, SL, MARJA # noqa: E402 OUT = Path(__file__).with_suffix(".svg") @@ -92,7 +92,7 @@ def panou(ch, sus_de=0.0): ch.top += sus_de svg = ch.render() h = float(re.search(r'viewBox="0 0 [\d.]+ ([\d.]+)"', svg).group(1)) - off = float(re.search(r'") + 1:svg.rindex("")].strip(), h diff --git a/gen/strategii/mdsrt_trigger.svg b/gen/strategii/mdsrt_trigger.svg index 2c72b16..0f34a26 100644 --- a/gen/strategii/mdsrt_trigger.svg +++ b/gen/strategii/mdsrt_trigger.svg @@ -2,11 +2,11 @@ DA — trigger valid: candela apare după ce M e complet M complet: preț în zonă + divergență acolo - - pivot daily 590.00 - + + pivot daily 590.00 + intrare 590.20 - + SL 589.40 @@ -46,9 +46,9 @@ NU — trigger prematur: aceeași candelă, dar deasupra zonei doji corect ca formă - - pivot daily 590.00 — zona e abia aici - + + pivot daily 590.00 — zona e abia aici + stopul pus sub doji: 592.05 diff --git a/gen/strategii/mp2_ansamblu.svg b/gen/strategii/mp2_ansamblu.svg index 52c528d..469a53b 100644 --- a/gen/strategii/mp2_ansamblu.svg +++ b/gen/strategii/mp2_ansamblu.svg @@ -6,13 +6,13 @@ Exemplu construit — bare de 60 de minute, 5 ședințe ziua a 4-a: pivotul mic e deja peste cel mare - - TP1 598.00 — poziția 1 - - intrarea 592.00 - - stopul 586.00 - + + TP1 598.00 — poziția 1 + + intrarea 592.00 + + stopul 586.00 + pivot weekly (mare) 584.00 diff --git a/gen/strategii/mp2_bottom.svg b/gen/strategii/mp2_bottom.svg index 22245f3..2736748 100644 --- a/gen/strategii/mp2_bottom.svg +++ b/gen/strategii/mp2_bottom.svg @@ -4,12 +4,12 @@ pivot weekly (mic) pivot monthly (mare) NVDA — weekly (pre-split 1:10) - - entry ~13.80 (după M+A) - - SL swing low absolut 10.63, −23% - - TP ~+25% (17.25), ~9 săpt. + + entry ~13.80 (după M+A) + + SL swing low absolut 10.63, −23% + + TP ~+25% (17.25), ~9 săpt. diff --git a/gen/strategii/mp2_crossing.svg b/gen/strategii/mp2_crossing.svg index 7506a78..f7ca8a9 100644 --- a/gen/strategii/mp2_crossing.svg +++ b/gen/strategii/mp2_crossing.svg @@ -3,7 +3,7 @@ pivot daily (cel MIC) DA — crossing (+2) - + pivot weekly (cel MARE) 62.00 crossing: 61.70 → 62.20 @@ -57,7 +57,7 @@ pivot daily (cel MIC) NU — continuare/buy the dip (+1) - + pivot weekly (cel MARE) 62.00 diff --git a/gen/strategii/mp2_iesire.svg b/gen/strategii/mp2_iesire.svg index 5b734d3..9eb3587 100644 --- a/gen/strategii/mp2_iesire.svg +++ b/gen/strategii/mp2_iesire.svg @@ -3,13 +3,13 @@ stopul urcă la break-even Pasul 6 — o jumătate la țintă fixă, cealaltă pe trail - - TP1 598.00 = intrarea + 1R - - 595.60 = 60 % din drum - - intrarea 592.00 - + + TP1 598.00 = intrarea + 1R + + 595.60 = 60 % din drum + + intrarea 592.00 + stopul inițial 586.00 diff --git a/gen/strategii/mp2_pivoti.svg b/gen/strategii/mp2_pivoti.svg index 6a33e4a..6485054 100644 --- a/gen/strategii/mp2_pivoti.svg +++ b/gen/strategii/mp2_pivoti.svg @@ -7,7 +7,7 @@ pivotul mic e SUB cel mare: M neîndeplinit, nu cauți long pivotul mic e PESTE cel mare: M îndeplinit - + pivot weekly (mare) 584.00 — nu se mișcă toată săptămâna diff --git a/gen/strategii/mp2_serie.py b/gen/strategii/mp2_serie.py index 58df7d9..65d98e8 100644 --- a/gen/strategii/mp2_serie.py +++ b/gen/strategii/mp2_serie.py @@ -30,7 +30,7 @@ import re import sys sys.path.insert(0, "/workspace/atm-curs-dl") -from svg_candles import Candle, from_closes # noqa: E402 +from svg_candles import Candle, from_closes, offset_render # noqa: E402 BARE_ZI = 7 # bare de 60 min într-o ședință ZILE = 5 @@ -223,8 +223,7 @@ def offset(svg, ch): prima linie de Level desenată, ca ce injectăm pe urmă să cadă exact peste candele (bug real: liniile de pivot cu 22 px mai sus decât candelele). """ - y = float(re.search(r'Pasul 5 — numeri 4 bare înapoi de la trigger și iei cea mai joasă cele 4 bare pe care le numeri - + intrarea 592.00 - - stopul din regulă 586.00 — 1R = 6.00 - + + stopul din regulă 586.00 — 1R = 6.00 + swing low absolut 580.00 diff --git a/gen/strategii/mp2_trigger.svg b/gen/strategii/mp2_trigger.svg index 1cb927f..1de8599 100644 --- a/gen/strategii/mp2_trigger.svg +++ b/gen/strategii/mp2_trigger.svg @@ -3,7 +3,7 @@ pivot daily (mic) 587.13 pivot daily (mic) 583.20 Pasul 4 — aceeași linie de pivot, trei bare, un singur trigger - + pivot weekly (mare) 584.00 diff --git a/gen/strategii/selectia_ansamblu.py b/gen/strategii/selectia_ansamblu.py index 8b39fa5..21849c6 100644 --- a/gen/strategii/selectia_ansamblu.py +++ b/gen/strategii/selectia_ansamblu.py @@ -21,7 +21,8 @@ import sys from pathlib import Path sys.path.insert(0, "/workspace/atm-curs-dl") -from svg_candles import Chart, Level, Arrow, Zone, MA, from_closes # noqa: E402 +from svg_candles import (Chart, Level, Arrow, Zone, MA, from_closes, # noqa: E402 + offset_render) OUT = Path(__file__).resolve().parent / "selectia_ansamblu.svg" @@ -128,9 +129,7 @@ svg = ch.render() # ---------------------------------------------------------------- linia verticală de predare # offsetul intern al randării, citit din prima linie de Level desenată -m_off = re.search(r']*fill="' + RED + r'"', svg) assert m_dx, "nu găsesc dreptunghiul primei zone, din care citesc offsetul pe x" diff --git a/gen/strategii/selectia_ansamblu.svg b/gen/strategii/selectia_ansamblu.svg index 9c9cdfd..03c4a41 100644 --- a/gen/strategii/selectia_ansamblu.svg +++ b/gen/strategii/selectia_ansamblu.svg @@ -3,9 +3,9 @@ 1. downtrend — de asta apare în scaner - - suport monthly 355.48 - + + suport monthly 355.48 + pivot monthly 383.74 SMA-20 diff --git a/gen/strategii/selectia_exemplu.svg b/gen/strategii/selectia_exemplu.svg index b66faa5..51ff519 100644 --- a/gen/strategii/selectia_exemplu.svg +++ b/gen/strategii/selectia_exemplu.svg @@ -2,14 +2,14 @@ HIG — daily (Sell Doji + Bear Reversal, RVOL 200%) ce l-a scos în față din cele 16 rezultate - + rezistenta 84.50 - + SL 82.00 - - intrare short 78.10 - - TP 72.00 + + intrare short 78.10 + + TP 72.00 SMA-20 diff --git a/gen/strategii/selectia_proximitate.py b/gen/strategii/selectia_proximitate.py index d16310f..09c8fff 100644 --- a/gen/strategii/selectia_proximitate.py +++ b/gen/strategii/selectia_proximitate.py @@ -21,7 +21,8 @@ import sys from pathlib import Path sys.path.insert(0, "/workspace/atm-curs-dl") -from svg_candles import Chart, Level, Arrow, Zone, MA, from_closes # noqa: E402 +from svg_candles import (Chart, Level, Arrow, Zone, MA, from_closes, # noqa: E402 + y_niveluri) OUT = Path(__file__).resolve().parent / "selectia_proximitate.svg" @@ -112,8 +113,8 @@ ch = Chart( svg = ch.render() # eticheta benzii, pusă în interiorul ei, în stânga -m_band = re.findall(r' y_banda_sus, "banda e desenată invers" svg = svg.replace("", f'SMA-20)', assert n == 1, f"eticheta SMA-20: {n} potriviri" # liniile nu au voie să cadă pe marginea cadrului -m_sup = re.findall(r' Cât de aproape de suport e prețul — daily, exemplu construit - - suport monthly 48.00 - + + suport monthly 48.00 + suport + 3 % = 49.44 SMA-20 diff --git a/summaries/17_STRATEGII/01_buy_doji.html b/summaries/17_STRATEGII/01_buy_doji.html index 2bb2278..e717b24 100644 --- a/summaries/17_STRATEGII/01_buy_doji.html +++ b/summaries/17_STRATEGII/01_buy_doji.html @@ -123,12 +123,12 @@ De aceea stopul e obligatoriu.

3. confirmarea 4. ieșirea: o treime la țintă, restul pe trail - - ținta 1: 51.60 - - intrare 50.40 - - stop 49.20 + + ținta 1: 51.60 + + intrare 50.40 + + stop 49.20 MA(20) @@ -928,11 +928,11 @@ nici stopul, ieși oricum, la close-ul celei de-a 8-a.

A — prima treime la țintă, a doua pe trailing stop - + ținta 1: 51.60 (= 1R) - + intrarea: 50.40 - + stopul: 49.20 @@ -996,11 +996,11 @@ nici stopul, ieși oricum, la close-ul celei de-a 8-a.

B — limita de 8 candele: nici ținta, nici stopul - + ținta 1: 51.60 — neatinsă - + intrarea: 50.40 - + stopul: 49.20 — neatins @@ -1084,11 +1084,11 @@ construite. Împărțirea în trei treimi e a sumarizatorului lecției; ținta - + stop 100.15 - + intrare short 99.00 - + ținta 97.85 @@ -1241,8 +1241,8 @@ Cele două panouri din diagramă sunt alte simboluri, cu alte prețuri (42 $ și Setup A+ vs. setup mediocru (două panouri, exemple construite) A+ — doji la suport, volum în acumulare - - suport 42.00 + + suport 42.00 @@ -1328,7 +1328,7 @@ Cele două panouri din diagramă sunt alte simboluri, cu alte prețuri (42 $ și volum în creștere = acumulare Mediocru — gap-up în rezistență, volum varză - + rezistență 78.50 @@ -1902,14 +1902,14 @@ restul cu ordine limită (se execută doar la prețul dat sau mai bun) mai jos, Intrarea în trei tranșe — același trade (doji 50.10 / 49.25) - + ținta 1: 51.60 = 1R față de close - + ținta 1: 51.32 = 1R față de prețul mediu 50.26 - + intrarea (close-ul de confirmare): 50.40 - - stopul: 49.20 + + stopul: 49.20 @@ -1993,16 +1993,16 @@ prețuri calculezi ținta. Alege înainte de trade și ține-te de ea. Detalii: 3. trendul pornește 4. ținta - - pivot lunar 86.00 - - stop 81.45 = 9 % sub intrare (procent real) - + + pivot lunar 86.00 + + stop 81.45 = 9 % sub intrare (procent real) + intrare 89.50 - - ținta 1:1 97.55 - - 116.35 = +30 % față de intrare (procent real) + + ținta 1:1 97.55 + + 116.35 = +30 % față de intrare (procent real) SMA-20 diff --git a/summaries/17_STRATEGII/01_buy_doji.md b/summaries/17_STRATEGII/01_buy_doji.md index 35eaf30..cc29b17 100644 --- a/summaries/17_STRATEGII/01_buy_doji.md +++ b/summaries/17_STRATEGII/01_buy_doji.md @@ -99,12 +99,12 @@ Tot trade-ul, pe un exemplu construit: 3. confirmarea 4. ieșirea: o treime la țintă, restul pe trail - - ținta 1: 51.60 - - intrare 50.40 - - stop 49.20 + + ținta 1: 51.60 + + intrare 50.40 + + stop 49.20 MA(20) @@ -945,11 +945,11 @@ nici stopul, ieși oricum, la close-ul celei de-a 8-a. A — prima treime la țintă, a doua pe trailing stop - + ținta 1: 51.60 (= 1R) - + intrarea: 50.40 - + stopul: 49.20 @@ -1013,11 +1013,11 @@ nici stopul, ieși oricum, la close-ul celei de-a 8-a. B — limita de 8 candele: nici ținta, nici stopul - + ținta 1: 51.60 — neatinsă - + intrarea: 50.40 - + stopul: 49.20 — neatins @@ -1104,11 +1104,11 @@ Exemplul de mai jos e alt simbol, pe altă scară de preț (în jur de 99 $, nu - + stop 100.15 - + intrare short 99.00 - + ținta 97.85 @@ -1268,8 +1268,8 @@ Cele două panouri din diagramă sunt alte simboluri, cu alte prețuri (42 $ și Setup A+ vs. setup mediocru (două panouri, exemple construite) A+ — doji la suport, volum în acumulare - - suport 42.00 + + suport 42.00 @@ -1355,7 +1355,7 @@ Cele două panouri din diagramă sunt alte simboluri, cu alte prețuri (42 $ și volum în creștere = acumulare Mediocru — gap-up în rezistență, volum varză - + rezistență 78.50 @@ -1884,14 +1884,14 @@ restul cu ordine limită (se execută doar la prețul dat sau mai bun) mai jos, Intrarea în trei tranșe — același trade (doji 50.10 / 49.25) - + ținta 1: 51.60 = 1R față de close - + ținta 1: 51.32 = 1R față de prețul mediu 50.26 - + intrarea (close-ul de confirmare): 50.40 - - stopul: 49.20 + + stopul: 49.20 @@ -1976,16 +1976,16 @@ candela e înaltă. Nu alerga după preț: „poate nu mai face niciodată". 3. trendul pornește 4. ținta - - pivot lunar 86.00 - - stop 81.45 = 9 % sub intrare (procent real) - + + pivot lunar 86.00 + + stop 81.45 = 9 % sub intrare (procent real) + intrare 89.50 - - ținta 1:1 97.55 - - 116.35 = +30 % față de intrare (procent real) + + ținta 1:1 97.55 + + 116.35 = +30 % față de intrare (procent real) SMA-20 diff --git a/summaries/17_STRATEGII/04_selectia.html b/summaries/17_STRATEGII/04_selectia.html index c738cd1..363e709 100644 --- a/summaries/17_STRATEGII/04_selectia.html +++ b/summaries/17_STRATEGII/04_selectia.html @@ -118,9 +118,9 @@ apar pe desen, pentru că nu aparțin acestui capitol.

1. downtrend — de asta apare în scaner - - suport monthly 355.48 - + + suport monthly 355.48 + pivot monthly 383.74 SMA-20 @@ -625,9 +625,9 @@ calculat din perioada trecută. Condiția de apropiere:
până la 3 % Cât de aproape de suport e prețul — daily, exemplu construit - - suport monthly 48.00 - + + suport monthly 48.00 + suport + 3 % = 49.44 SMA-20 @@ -1205,14 +1205,14 @@ folosit aici ca primă țintă. Aparțin planului de intrare, nu selecției.

HIG — daily (Sell Doji + Bear Reversal, RVOL 200%) ce l-a scos în față din cele 16 rezultate - + rezistenta 84.50 - + SL 82.00 - - intrare short 78.10 - - TP 72.00 + + intrare short 78.10 + + TP 72.00 SMA-20 diff --git a/summaries/17_STRATEGII/04_selectia.md b/summaries/17_STRATEGII/04_selectia.md index efd97e5..a0f7344 100644 --- a/summaries/17_STRATEGII/04_selectia.md +++ b/summaries/17_STRATEGII/04_selectia.md @@ -96,9 +96,9 @@ apar pe desen, pentru că nu aparțin acestui capitol. 1. downtrend — de asta apare în scaner - - suport monthly 355.48 - + + suport monthly 355.48 + pivot monthly 383.74 SMA-20 @@ -634,9 +634,9 @@ calculat din perioada trecută. Condiția de apropiere: **până la 3 %**; la Cât de aproape de suport e prețul — daily, exemplu construit - - suport monthly 48.00 - + + suport monthly 48.00 + suport + 3 % = 49.44 SMA-20 @@ -1226,14 +1226,14 @@ folosit aici ca primă țintă. Aparțin planului de intrare, nu selecției. HIG — daily (Sell Doji + Bear Reversal, RVOL 200%) ce l-a scos în față din cele 16 rezultate - + rezistenta 84.50 - + SL 82.00 - - intrare short 78.10 - - TP 72.00 + + intrare short 78.10 + + TP 72.00 SMA-20 diff --git a/summaries/17_STRATEGII/06_hammer_mbt10.html b/summaries/17_STRATEGII/06_hammer_mbt10.html index c9fc26f..8c6b274 100644 --- a/summaries/17_STRATEGII/06_hammer_mbt10.html +++ b/summaries/17_STRATEGII/06_hammer_mbt10.html @@ -52,7 +52,7 @@ mecanică: buy hammer în cinci pași, Nivelul 1 — Din avion

De ce sunt două jumătăți

-

+ Același trigger de bottom, două naturi @@ -99,7 +99,7 @@ mecanică: buy hammer în cinci pași, + close peste PPD Regulile = materialul cursului (cu trimiteri); verdictul de BVB = judecata mea din secțiunea Transfer. -

+

Buy hammer e un pattern de o candelă: îl vezi cu ochiul, pe orice @@ -121,7 +121,7 @@ departe a ajuns prețul înăuntrul perioadei. Un fitil lung în jos înseamnă vânzătorii au împins prețul mult mai jos, dar nu l-au putut ține acolo: cumpărătorii l-au adus înapoi până la închidere.

-

+ Ce e un hammer și ce nu — aceeași bară, 63.30 sus și 62.10 jos hammer @@ -173,7 +173,7 @@ cumpărătorii l-au adus înapoi până la închidere.

e inverted hammer, alt pattern Hammer = fitilul de jos e cel puțin dublul corpului ȘI corpul stă în treimea de sus a barei (aici peste 62.90). Pragul „fitil ≥ 2x corpul" e al cursului; „corpul în treimea de sus" e traducerea mea a lui „corp mic sus, fitil de sus aproape inexistent". -

+

Regula de verificat, nu de ghicit din ochi: fitilul de jos trebuie să fie @@ -193,13 +193,13 @@ abia asta arată că au preluat controlul cumpărătorii. Atunci cumperi, pui stopul sub fitilul hammer-ului, vinzi o parte când prețul a urcat cât riscai și lași restul pe un stop care urcă după preț.

-

+ Buy hammer — daily (ticker ilustrativ XYZ, din lecția de pattern) - - SL 62.05 — sub low-ul hammer-ului - + + SL 62.05 — sub low-ul hammer-ului + intrare 63.35 - + TP 65.95 = 2R @@ -307,7 +307,7 @@ stopul sub fitilul hammer-ului, vinzi o parte când prețul a urcat cât riscai volum hammer 63.30 / 62.10 bara 20: confirmare — close 63.35 peste high-ul hammer-ului 63.30 (intrare) -Exemplu ilustrativ (XYZ) din lecția de pattern; 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ă.

De la stânga la dreapta: 19 zile de scădere, hammer-ul (high 63.30, low @@ -325,15 +325,15 @@ volum. Ideea spune unde ai voie să te uiți; MBT-10 spune cândînchiderea barei. Ce se vede intraday, cât timp ziua e în desfășurare, nu e semnal.

-

+ MBT-10 — pullback în locul crimei + hammer, închidere la 54.60 (exemplu construit) - - locul crimei 52.10 (fost vârf spart) - + + locul crimei 52.10 (fost vârf spart) + SL 52.00 — sub codița hammer-ului - + intrare 54.60 (close în MBT-10) - + TP 58.90 = 1.65R @@ -466,7 +466,7 @@ ziua e în desfășurare, nu e semnal.

semnalul s-a închis. Nivelurile sunt exemplul construit al sumarizatorului. bara 9 = fostul vârf 52.10 (locul crimei); bara 21 = vârful nou 58.90. bara 29 = hammer: o 52.20, h/c 53.40, l 52.10 (codița exact pe locul crimei); bara 30 = ziua închisă în MBT-10. -

+

Pe diagramă: un vârf vechi la 52.10 a fost spart, prețul a urcat la 58.90 și @@ -605,7 +605,7 @@ hammer, e hanging man, și înseamnă exact pe dos. Câte candele numer e completarea mea — lecția de hammer nu dă niciun număr, cere doar o scădere înainte; în practică eu mă uit la 8-10.

-

+ Aceeași candelă, două contexte — daily, exemplu construit DA — după o scădere: hammer NU — după o urcare: hanging man @@ -680,7 +680,7 @@ e completarea mea — lecția de hammer nu dă niciun număr, cere doar o scăde începe — nu era semnal de cumpărare Forma nu spune nimic singură: hammer-ul e pattern de întoarcere doar după o scădere. Aceeași bară după o urcare e hanging man și are sensul opus. Prețurile sunt construite; regula de context e a cursului. -

+

Cele două panouri au aceeași candelă — 63.30 sus, 62.10 jos, corp 0.25. @@ -700,7 +700,7 @@ trece regula de formă.

Tragi pe grafic suporturile și pivoții weekly, monthly sau quarterly și te uiți cât de departe e low-ul hammer-ului de cel mai apropiat dintre ei.

-

+ Hammer la un nivel vs. hammer în mijlocul range-ului — daily, exemplu construit DA — hammer pe suportul monthly NU — hammer în mijlocul range-ului @@ -780,7 +780,7 @@ uiți cât de departe e low-ul hammer-ului de cel mai apropiat dintre ei.range-ului", dar nu dă un prag numeric. Cursul dă 0,5 %, la buy doji și pe 60 de minute; 1-2 % pe daily e adaptarea mea, ca să ai ce măsura: aici 0,16 % în stânga, 7,07 % în dreapta. Distanța se împarte la nivel, nu la low-ul hammer-ului — aceeași convenție în tot capitolul. -

+

Aceeași formă, de două ori, pe aceeași scară. În stânga, low-ul hammer-ului e @@ -814,7 +814,7 @@ suport sau de un pivot weekly, monthly ori quarterly.

Notezi high-ul hammer-ului și te uiți la o singură candelă — următoarea. Intri doar dacă ea se închide peste acel high.

-

+ Trigger-ul: contează unde se închide candela următoare — daily, exemplu construit DA — închide peste high @@ -891,7 +891,7 @@ Intri doar dacă ea se închide peste acel high.

Regula e a lecției de pattern: intri la close-ul candelei următoare, dacă acea închidere e peste high-ul hammer-ului. O atingere intraday peste 63.30, urmată de o închidere sub el, nu e trigger. Prețurile sunt construite. -

+

Trei situații, cu același hammer 63.30 / 62.10:

@@ -921,14 +921,14 @@ hammer-ului. Altfel ștergi setup-ul.

Pui stopul puțin sub low-ul hammer-ului și calculezi câte acțiuni cumperi din distanța până la el.

-

+ Buy hammer — stopul și mărimea poziției (daily, ticker ilustrativ XYZ) cele două bare care dau stopul - - intrare 63.35 (close-ul confirmării) - - SL 62.05 + + intrare 63.35 (close-ul confirmării) + + SL 62.05 @@ -967,7 +967,7 @@ din distanța până la el.

riscul e distanța intrare - SL: 63.35 - 62.05 = 1.30 $ pe acțiune bara 20: confirmare — close 63.35 peste high-ul hammer-ului 63.30 (intrare) -1R = 1.30 $Mărimea poziției, cu cifrele lecției: 2 % dintr-un cont de 10.000 $ = 200 $ de risc.200 $ / 1.30 $ pe acțiune = 153.8 → 153 de acțiuni (rotunjit în jos); pierderea maximă 198.90 $.Cei 5 cenți de sub low sunt marja folosită în tot capitolul pe exemplele construite de mine;unde cifra vine din material, e spusă acolo.

+1R = 1.30 $Mărimea poziției, cu cifrele lecției: 2 % dintr-un cont de 10.000 $ = 200 $ de risc.200 $ / 1.30 $ pe acțiune = 153.8 → 153 de acțiuni (rotunjit în jos); pierderea maximă 198.90 $.Cei 5 cenți de sub low sunt marja folosită în tot capitolul pe exemplele construite de mine;unde cifra vine din material, e spusă acolo.

Stopul merge la 62.05, cu 5 cenți sub 62.10. De ce acolo: dacă prețul se @@ -991,19 +991,19 @@ acțiuni, iar pierderea maximă încape în regula ta de risc.

Pui prima țintă la aceeași distanță deasupra intrării la care e stopul dedesubt, iar după ce e atinsă muți stopul sub fiecare swing low nou.

-

+ Buy hammer — ieșirea (daily, ticker ilustrativ XYZ; barele de după 33 sunt construite) pullback - + 65.95 = 2R — ținta din exemplul lecției - + 64.65 = 1:1 — prima jumătate - - intrare 63.35 - - SL inițial 62.05 + + intrare 63.35 + + SL inițial 62.05 @@ -1062,7 +1062,7 @@ dedesubt, iar după ce e atinsă muți stopul sub fiecare swing low nou. a doua jumătate iese la 65.90 (+1,96R): prima închidere sub linia de trail -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ă.

+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ă.

Lecția de pattern nu dă o țintă proprie — spune explicit că „un pattern nu îți @@ -1085,13 +1085,13 @@ exemplu.

Oglinda — Sell Hammer, pe short

-

+ Sell hammer — oglinda pe short (daily, exemplu construit) - + SL 100.25 — peste high-ul sell hammer-ului - - intrare short 98.95 - + + intrare short 98.95 + TP 96.35 = 2R @@ -1209,7 +1209,7 @@ exemplu.

ținta 96.35: aceeași distanță ca la long, dar în jos -Totul e întors: urcare înainte, corp mic jos și fitil lung în sus, intrarea la o închidere SUBlow-ul candelei, stopul PESTE high-ul ei, ținta la aceeași distanță în jos.Completare proprie: cursul numește Sell Hammer ca simetric al lui Buy Hammer, dar nu-i scrieregulile separat. Seria e trade-ul long oglindit, deci riscul e tot 1.30.

+Totul e întors: urcare înainte, corp mic jos și fitil lung în sus, intrarea la o închidere SUBlow-ul candelei, stopul PESTE high-ul ei, ținta la aceeași distanță în jos.Completare proprie: cursul numește Sell Hammer ca simetric al lui Buy Hammer, dar nu-i scrieregulile separat. Seria e trade-ul long oglindit, deci riscul e tot 1.30.

Diagrama e chiar trade-ul de mai sus, oglindit: hammer-ul 63.30 / 62.10 devine @@ -1246,7 +1246,7 @@ azi în MBT-10 — te uiți la o listă de bare oarecare.

exact acolo: un suport, locul crimei, un double bottom, un buy doji sau o divergență de volum.

-

+ MBT-10, pasul „unde" — suport weekly testat de trei ori, pe 60 de minute @@ -1313,7 +1313,7 @@ divergență de volum.

test 1 test 2 test 3 -Aici nu intri încă: diagrama arată doar ideea de bottom. MBT-10 e ultima piesă, și vine abia la close-ul unei bare.Suportul 88.00 ține de trei ori, iar între teste vârfurile scad — 89.50, apoi 89.10: compresie.Exemplul e al materialului și e pe 60 de minute: suport 88.00, intrare 89.90, SL 87.30, țintă 95.20.Nu e double bottom și nu e divergență de volum — alea sunt din alt exemplu al lui (gap up, picioarele 32.10 / 30.90).Forma exactă a barelor și volumul sunt ale mele; la fel pivotul daily 89.60, pus ca să aibă ce verifica pasul B3.

+Aici nu intri încă: diagrama arată doar ideea de bottom. MBT-10 e ultima piesă, și vine abia la close-ul unei bare.Suportul 88.00 ține de trei ori, iar între teste vârfurile scad — 89.50, apoi 89.10: compresie.Exemplul e al materialului și e pe 60 de minute: suport 88.00, intrare 89.90, SL 87.30, țintă 95.20.Nu e double bottom și nu e divergență de volum — alea sunt din alt exemplu al lui (gap up, picioarele 32.10 / 30.90).Forma exactă a barelor și volumul sunt ale mele; la fel pivotul daily 89.60, pus ca să aibă ce verifica pasul B3.

Pe diagramă e motivul din exemplul materialului, și e un singur motiv: prețul @@ -1343,14 +1343,14 @@ prețul acolo, arătând cu degetul pe grafic.

Te uiți la semnal o singură dată pe zi: la închidere. Ce arată sistemul în timpul zilei nu contează.

-

+ 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 + + locul crimei 52.10 — structura ideii @@ -1411,7 +1411,7 @@ timpul zilei nu contează.

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.

+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.

Exemplul din material: în timpul zilei prețul era la 55.30 și semnalul se @@ -1428,7 +1428,7 @@ timp.

Verifici singurul lucru din MBT-10 pe care îl poți calcula fără indicator: ziua s-a închis peste pivotul daily?

-

+ MBT-10 — condiția de preț: close peste pivotul daily (60 de minute) @@ -1486,7 +1486,7 @@ ziua s-a închis peste pivotul daily?

s-a închis la 89.90, peste pivot: aici intri, la close-ul barei -pivotul daily al zilei deintrare: 89.60 (ieri, altul) →Pivotul daily se recalculează în fiecare zi din maximul, minimul și închiderea zilei precedente.Pe 60 de minute e același nivel pentru toate barele unei zile, așa că e desenat doar între cele douălinii subțiri care taie ziua intrării — nu peste tot graficul.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.

+pivotul daily al zilei deintrare: 89.60 (ieri, altul) →Pivotul daily se recalculează în fiecare zi din maximul, minimul și închiderea zilei precedente.Pe 60 de minute e același nivel pentru toate barele unei zile, așa că e desenat doar între cele douălinii subțiri care taie ziua intrării — nu peste tot graficul.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.

Pivotul daily se calculează din maximul, minimul și închiderea zilei @@ -1510,7 +1510,7 @@ ai platforma autorului, dacă semnalul chiar s-a aprins la close).

de tine, și dimensionezi pentru două-trei încercări dacă vii după un gap down.

-

+ MBT-10 — stopul sub structură, pe 60 de minute @@ -1552,7 +1552,7 @@ down.

sub 87.30 nu mai ține suportul weekly: 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 și suportul weekly 88.00 sunt cifrele materialului, pe exemplul lui de 60 de minute —nu marja mea de 5 cenți. Materialul nu dă niciun procent fix de stop pentru MBT-10:stopul numește structura de sub el.

+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 și suportul weekly 88.00 sunt cifrele materialului, pe exemplul lui de 60 de minute —nu marja mea de 5 cenți. Materialul nu dă niciun procent fix de stop pentru MBT-10:stopul numește structura de sub el.

Stopul stă sub ce ar invalida ideea de la pasul B1. Aici ideea era suportul @@ -1578,7 +1578,7 @@ la fiecare, în loc să pui tot pe prima. Diagrama e la

Ieși la prima structură din stânga care a oprit prețul ultima dată, pentru că MBT-10 nu are o țintă proprie.

-

+ MBT-10 — ieșirea la prima structură din stânga (60 de minute) de aici a pornit coborârea @@ -1678,7 +1678,7 @@ că MBT-10 nu are o țintă proprie.

ieși la 95.20 (+2.0R): 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.0R, în 7 bare de 60 de minute. Cifrele trade-ului sunt din exemplul materialului.

+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.0R, în 7 bare de 60 de minute. Cifrele trade-ului sunt din exemplul materialului.

Asta e o gaură reală în material, nu o simplificare a mea: fișierul principal @@ -1705,7 +1705,7 @@ stop sau pe o reintrare pe care ai decis-o înainte.

Pașii A1 și A2 sunt minimul. Cu cât ai mai multe motive independente pentru același trade, cu atât e mai bun — dar materialul nu cere o poziție mai mare.

-

Buy hammer A+ vs. mediocru (două panouri, exemple construite) +Buy hammer A+ vs. mediocru (două panouri, exemple construite) A+ — hammer la suport monthly suport monthly 42.00 @@ -1843,7 +1843,7 @@ același trade, cu atât e mai bun — dar materialul nu cere o poziție mai mar hammer în mijloc de range volum slab 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).

+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). @@ -1899,7 +1899,7 @@ vede — ci contextul din jur.

După un gap down, primul semnal e adesea prea devreme

-

+ După gap down — primul MBT-10 te scoate, al doilea merge (exemplu construit) #1 intrare 64.80 @@ -2016,7 +2016,7 @@ vede — ci contextul din jur.

MBT-10 #1stop #1 atinsMBT-10 #2: flush la 60.60, închidere 62.20 -MBT-10 #1: intrare 64.80 / SL 63.20 — risc 1R în baniMBT-10 #2: intrare 62.20 / SL 60.40, sub noul low 60.60 — 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.

+MBT-10 #1: intrare 64.80 / SL 63.20 — risc 1R în baniMBT-10 #2: intrare 62.20 / SL 60.40, sub noul low 60.60 — 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.

Ăsta e cazul care justifică împărțirea riscului de la pasul B4. @@ -2034,7 +2034,7 @@ trade, nu dacă intri.

(fundamental → monthly → weekly → daily → MBT-10). Vezi contradicția 3.

Exemplul real: LABU, buy hammer la suportul monthly

-

+ LABU — daily suport monthly 80.00 @@ -2166,7 +2166,7 @@ trade, nu dacă intri.

bara 24 = confirmare: close 81.30 — close peste high-ul hammer-ului 80.90 = intrare 81.30 (construit)Procentul (+20 % în jumătate de lună) și contextul (suport monthly) sunt ale cursului;nivelurile de preț sunt construite de sumarizator. -

+

Ce e real: doar că a fost un buy hammer la suportul monthly și că a făcut @@ -2177,11 +2177,11 @@ prețurile de pe diagramă sunt puse de mine, ca să se vadă structura.

candela următoare se închide peste high-ul lui, stopul sub low-ul lui.

Exemplul real: Tesla, trigger MBT-10

-

+ Tesla — daily: trigger MBT-10, intrare 311.21 → 333.00 = +7.0 % în 6 zile - - intrare 311.21 (close) - + + intrare 311.21 (close) + rezultat 333.00 = +7.0 % în 6 zile @@ -2235,7 +2235,7 @@ candela următoare se închide peste high-ul lui, stopul sub low-ul lui.

trigger MBT-10 exact 6 bare -Cifrele 311.21 / 333.00 / +7.0 % sunt reale;structura barelor dintre ele e construită.SL: materialul nu îl dă pentru acest exemplu.

+Cifrele 311.21 / 333.00 / +7.0 % sunt reale;structura barelor dintre ele e construită.SL: materialul nu îl dă pentru acest exemplu.

Ce e real: intrarea la închiderea zilei, 311.21, ieșirea la 333.00 diff --git a/summaries/17_STRATEGII/06_hammer_mbt10.md b/summaries/17_STRATEGII/06_hammer_mbt10.md index 4cb2c53..3368e23 100644 --- a/summaries/17_STRATEGII/06_hammer_mbt10.md +++ b/summaries/17_STRATEGII/06_hammer_mbt10.md @@ -174,11 +174,11 @@ stopul sub fitilul hammer-ului, vinzi o parte când prețul a urcat cât riscai Buy hammer — daily (ticker ilustrativ XYZ, din lecția de pattern) - - SL 62.05 — sub low-ul hammer-ului - + + SL 62.05 — sub low-ul hammer-ului + intrare 63.35 - + TP 65.95 = 2R @@ -310,13 +310,13 @@ ziua e în desfășurare, nu e semnal. MBT-10 — pullback în locul crimei + hammer, închidere la 54.60 (exemplu construit) - - locul crimei 52.10 (fost vârf spart) - + + locul crimei 52.10 (fost vârf spart) + SL 52.00 — sub codița hammer-ului - + intrare 54.60 (close în MBT-10) - + TP 58.90 = 1.65R @@ -939,10 +939,10 @@ din distanța până la el.** Buy hammer — stopul și mărimea poziției (daily, ticker ilustrativ XYZ) cele două bare care dau stopul - - intrare 63.35 (close-ul confirmării) - - SL 62.05 + + intrare 63.35 (close-ul confirmării) + + SL 62.05 @@ -1016,14 +1016,14 @@ dedesubt, iar după ce e atinsă muți stopul sub fiecare swing low nou.** pullback - + 65.95 = 2R — ținta din exemplul lecției - + 64.65 = 1:1 — prima jumătate - - intrare 63.35 - - SL inițial 62.05 + + intrare 63.35 + + SL inițial 62.05 @@ -1110,11 +1110,11 @@ exemplu. Sell hammer — oglinda pe short (daily, exemplu construit) - + SL 100.25 — peste high-ul sell hammer-ului - - intrare short 98.95 - + + intrare short 98.95 + TP 96.35 = 2R @@ -1383,10 +1383,10 @@ timpul zilei nu contează.** 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 + + locul crimei 52.10 — structura ideii @@ -2229,9 +2229,9 @@ candela următoare se închide peste high-ul lui, stopul sub low-ul lui. Tesla — daily: trigger MBT-10, intrare 311.21 → 333.00 = +7.0 % în 6 zile - - intrare 311.21 (close) - + + intrare 311.21 (close) + rezultat 333.00 = +7.0 % în 6 zile diff --git a/summaries/17_STRATEGII/A3_intrarea.html b/summaries/17_STRATEGII/A3_intrarea.html index 3d6e687..f545356 100644 --- a/summaries/17_STRATEGII/A3_intrarea.html +++ b/summaries/17_STRATEGII/A3_intrarea.html @@ -79,20 +79,20 @@ mai ales daca esti pe prop" Exemplu construit (fără ticker) — 15 min - + suport 100.00 - - + + A: intrare la close 102.15 - + B: 1/3 = 101.55 - + B: 1/2 = 101.25 - + TP1 A 104.40 - + TP1 B (1/2) 102.60 - + TP1 B (1/3) 103.20 @@ -431,15 +431,15 @@ tău.

Exemplu construit (fără ticker) — 15 min, suport weekly - - TP1 104.30 (1:1) - + + TP1 104.30 (1:1) + intrare la close 102.10 - + 1/2 = 101.20 (B s-ar fi umplut aici) - - suport weekly 100.00 - + + suport weekly 100.00 + @@ -690,13 +690,13 @@ plănuită. Nu știu care din două a fost: verifică în jurnal.

Exemplu construit (fără ticker) — 15 min - + SL 99.90 - + ordin 1/3 101.55 — neumplut - + ordin 1/2 101.25 — neumplut - + A: close 102.15 diff --git a/summaries/17_STRATEGII/A3_intrarea.md b/summaries/17_STRATEGII/A3_intrarea.md index 3125ac7..5798808 100644 --- a/summaries/17_STRATEGII/A3_intrarea.md +++ b/summaries/17_STRATEGII/A3_intrarea.md @@ -52,20 +52,20 @@ Deci ai de ales între două lucruri pe care nu le poți avea pe amândouă: Exemplu construit (fără ticker) — 15 min - + suport 100.00 - - + + A: intrare la close 102.15 - + B: 1/3 = 101.55 - + B: 1/2 = 101.25 - + TP1 A 104.40 - + TP1 B (1/2) 102.60 - + TP1 B (1/3) 103.20 @@ -346,15 +346,15 @@ tău. Exemplu construit (fără ticker) — 15 min, suport weekly - - TP1 104.30 (1:1) - + + TP1 104.30 (1:1) + intrare la close 102.10 - + 1/2 = 101.20 (B s-ar fi umplut aici) - - suport weekly 100.00 - + + suport weekly 100.00 + @@ -556,13 +556,13 @@ plănuită. Nu știu care din două a fost: verifică în jurnal. Exemplu construit (fără ticker) — 15 min - + SL 99.90 - + ordin 1/3 101.55 — neumplut - + ordin 1/2 101.25 — neumplut - + A: close 102.15 diff --git a/svg_candles.py b/svg_candles.py index 5d4faf1..1a37e17 100644 --- a/svg_candles.py +++ b/svg_candles.py @@ -409,6 +409,35 @@ class Chart: return "\n ".join(out).replace("\n ", "\n") +# --------------------------------------------------------- citit din randare +# Un generator care desenează peste graficul randat are nevoie de deplasarea +# pe care `render()` a aplicat-o (face loc titlului și săgeților, apoi +# restaurează `top`), și o citește din prima linie de Level. +# +# Nu o căuta cu `x1="24"`. Formatarea e `:.1f` de când Level are `i0` ("24.0"), +# iar cu `i0` linia nici nu mai pornește din margine. Unsprezece generatoare +# aveau fiecare copia lui `re.search(r'