diff --git a/gen/az_executie.py b/gen/az_executie.py new file mode 100644 index 0000000..d3c089e --- /dev/null +++ b/gen/az_executie.py @@ -0,0 +1,544 @@ +"""Diagramele pentru summaries/08_ANALIZA_ZILNICA/08_executie_si_risc.md. + +Toate prețurile sunt construite (fără ticker). Rulează: + .venv/bin/python gen/az_executie.py +Înlocuiește în .md fiecare bloc ... cu output-ul +generatorului (inclusiv tabelul eșantionului, ca totalul să vină din calcul). + +`PChart` e copiat din gen/az_pivoti.py: etichetele nivelurilor stau în marginea +dreaptă și se împing singure în jos când sunt apropiate. Adăugat aici: `hist`, +close-uri dinaintea primei bare desenate, ca SMA-200 să fie calculată pe 200 de +bare reale, nu pe cele 45 vizibile. +""" +import math +import re +import sys +from dataclasses import dataclass, field +from pathlib import Path + +sys.path.insert(0, "/workspace/atm-curs-dl") +from svg_candles import Chart, Level, Mark, MA, from_closes # noqa: E402 + +MD = Path("/workspace/atm-curs-dl/summaries/08_ANALIZA_ZILNICA/08_executie_si_risc.md") +GRAY, RED, GREEN, BLUE, ORANGE, PURPLE = "#777", "#c00", "#188a3e", "#1a5fb4", "#b06000", "#6a3d9a" +STYLE = dict(gap=15, body_w=9, left=44, width=620) +RISC = 25.0 +svgs = {} + + +@dataclass +class Seg: + """nivel valabil doar pe barele i0..i1""" + i0: int + i1: int + price: float + text: str + color: str = ORANGE + label_at: str = "out" # "out" marginea dreaptă | "lm" marginea stângă | "left"/"right" pe linie + dy: float = -5.0 + dash: str = "" + + +def spread(items, gap=14): + """[(y, ...)] -> aceleași, cu y-urile împinse ca două etichete să nu se atingă""" + items = sorted(items, key=lambda t: t[0]) + out = [] + for it in items: + y = it[0] if not out else max(it[0], out[-1][0] + gap) + out.append((y,) + tuple(it[1:])) + return out + + +@dataclass +class PChart(Chart): + segs: list = field(default_factory=list) + seps: list = field(default_factory=list) + pad_px: float = 24.0 + lm: int = 104 + pad_bot_px: float = 0.0 + hist: list = field(default_factory=list) # close-uri înainte de bara 0, doar pentru medii + + def ma_vals(self, period): + full = self.hist + [c.c for c in self.candles] + h = len(self.hist) + return [sum(full[h + i + 1 - period:h + i + 1]) / period if h + i + 1 >= period else None + for i in range(len(self.candles))] + + def render(self) -> str: + n = len(self.candles) + self.left = self.lm if any(s.label_at == "lm" for s in self.segs) else self.left + segs = list(self.segs) + [Seg(0, n - 1, lv.price, lv.text, lv.color, "out", dash="4 3") + for lv in self.levels] + saved_lv, saved_ma = list(self.levels), list(self.mas) + longest = max([len(s.text) for s in segs if s.label_at == "out"] + [len(m.text) for m in saved_ma] + [0]) + self.width = max(self.width, int(self._cx(n - 1) + self.gap / 2 + 6 + longest * 6.2 + 8)) + ma_prices = [v for m in saved_ma for v in self.ma_vals(m.period) if v is not None] + top_price = max([c.h for c in self.candles] + [s.price for s in segs] + ma_prices) + self.levels = [Level(s.price, "", "none") for s in segs] + [Level(p, "", "none") for p in ma_prices] + self.levels.append(Level(top_price + self.pad_px / self.scale, "", "none")) + if self.pad_bot_px: + low_price = min([c.l for c in self.candles] + [s.price for s in segs]) + self.levels.append(Level(low_price - self.pad_bot_px / self.scale, "", "none")) + self.mas = [] # mediile le desenăm noi, cu `hist` + svg = self.render_base() + self.levels, self.mas = saved_lv, saved_ma + parts = svg.split("\n ") + extra = [] + for k in self.seps: + x = self._cx(k) - self.gap / 2 + extra.append(f'') + for m in saved_ma: + pts = [f"{self._cx(i):.1f},{self._y(v):.1f}" for i, v in enumerate(self.ma_vals(m.period)) if v is not None] + dash = f' stroke-dasharray="{m.dash}"' if m.dash else "" + extra.append(f'') + xr = self._cx(n - 1) + self.gap / 2 + 6 + out_lab = [(self._y(s.price) + 4, s) for s in segs if s.label_at == "out" and s.text] + ma_lab = [(self._y(self.ma_vals(m.period)[-1]) + 4, Seg(0, 0, 0, m.text, m.color)) for m in saved_ma if m.text] + placed = {id(s): y for y, s in spread(out_lab + ma_lab)} + placed.update({id(s): y for y, s in spread([(self._y(s.price) + 4, s) for s in segs if s.label_at == "lm"])}) + for s in segs: + x0, x1, y = self._cx(s.i0) - self.gap / 2, self._cx(s.i1) + self.gap / 2, self._y(s.price) + dash = f' stroke-dasharray="{s.dash}"' if s.dash else "" + extra.append(f'') + if not s.text: + continue + if s.label_at == "out": + extra.append(f'{s.text}') + elif s.label_at == "lm": + extra.append(f'{s.text}') + elif s.label_at == "left": + extra.append(f'{s.text}') + else: + extra.append(f'{s.text}') + for _, s in ma_lab: + extra.append(f'{s.text}') + k = 2 if self.title else 1 + return "\n ".join(parts[:k] + extra + parts[k:]) + + def render_base(self): + svg = Chart.render(self) + svg = re.sub(r'\n ]*stroke="none"[^>]*/>\n ]*fill="none"[^>]*>', "", svg) + prices = [p for c in self.candles for p in (c.o, c.h, c.l, c.c)] + [lv.price for lv in self.levels] + self._body_bottom = self.top + (max(prices) - min(prices)) * self.scale + return svg + + +def f2(x): + return f"{x:.2f}" + + +def rpx(ch, entry, sl, tp): + """câți R e `tp`, măsurat în pixeli pe desen""" + return (ch._y(entry) - ch._y(tp)) / (ch._y(sl) - ch._y(entry)) + + +def first(cds, a, cond): + return next(i for i in range(a, len(cds)) if cond(cds[i])) + + +def shares(risk_per_share): + return math.floor(RISC / risk_per_share + 1e-9) + + +# ================================================================ 1. risc fix 25 $ la 1:4 — long +cl1 = [101.55, 101.40, 101.48, 101.25, 101.05, 101.12, 100.90, 100.72, 100.80, 100.62, 100.50, 100.46, 100.52, + 100.47, 100.60, # 14 trigger + 100.70, 100.62, 100.78, 100.90, 100.84, 101.00, 101.12, 101.05, 101.22, 101.35, 101.28, 101.45, 101.58, + 101.66, 101.55, 101.60, 101.48, 101.52, 101.40] +cds = from_closes(cl1, wick=0.06, start=101.60) +T = 14 +entry = cds[T].c +sl = round(entry - 0.25, 2) +tp = round(entry + 4 * (entry - sl), 2) +n1 = shares(entry - sl) +assert sl < min(c.l for c in cds[T - 3:T + 1]), "stopul trebuie să stea sub low-urile bazei" +assert n1 == 100 and abs(n1 * (entry - sl) - 25) < 1e-6 and abs(n1 * (tp - entry) - 100) < 1e-6 +hit = first(cds, T + 1, lambda c: c.h >= tp) +assert min(c.l for c in cds[T + 1:hit + 1]) > sl, "stopul nu trebuie atins înainte de țintă" +top0 = max(range(T), key=lambda i: cds[i].h) +assert abs(cds[top0].h - tp) < 0.15, "ținta 4R trebuie să cadă lângă vârful de unde a plecat pullback-ul" +print(f"D1 entry {f2(entry)} SL {f2(sl)} TP {f2(tp)} {n1} acțiuni; vârf anterior {f2(cds[top0].h)}; TP atins la {hit}") +L1 = dict(entry=entry, sl=sl, tp=tp, n=n1, hit=hit - T, top=cds[top0].h) +ch = PChart(candles=cds, + segs=[Seg(T, len(cds) - 1, tp, f"TP {f2(tp)} = 4R = +100 $", BLUE, dash="4 3"), + Seg(T, len(cds) - 1, entry, f"intrare {f2(entry)} ({n1} acțiuni)", GREEN), + Seg(T, len(cds) - 1, sl, f"SL {f2(sl)} = 1R = −25 $", RED)], + marks=[Mark(3, "pullback", GRAY, "below", dy=30), + Mark(T, "trigger", GREEN, "below", dy=4), + Mark(hit, "4R", BLUE, "above", dy=-2)], + scale=130, title="Exemplu construit (fără ticker) — 5 min", + caption=f"Risc 0.25 $/acțiune × {n1} acțiuni = 25 $. Ținta e de 4 ori mai departe decât stopul.", **STYLE) +svg_ = ch.render() +assert abs(rpx(ch, entry, sl, tp) - 4.0) < 0.01, "4R nu e desenat la 4x stopul" +svgs["risc_long"] = svg_ + +# ================================================================ 2. aceeași aritmetică pe short +cl2 = [180.60 - c for c in cl1] +cds = from_closes(cl2, wick=0.06, start=180.60 - 101.60) +entry = cds[T].c +sl = round(entry + 0.25, 2) +tp = round(entry - 4 * (sl - entry), 2) +n2 = shares(sl - entry) +assert sl > max(c.h for c in cds[T - 3:T + 1]) and n2 == 100 +hit = first(cds, T + 1, lambda c: c.l <= tp) +assert max(c.h for c in cds[T + 1:hit + 1]) < sl +print(f"D2 short entry {f2(entry)} SL {f2(sl)} TP {f2(tp)} atins la {hit}") +S2 = dict(entry=entry, sl=sl, tp=tp) +ch = PChart(candles=cds, + segs=[Seg(T, len(cds) - 1, sl, f"SL {f2(sl)} = 1R = −25 $", RED), + Seg(T, len(cds) - 1, entry, f"intrare short {f2(entry)} ({n2} acțiuni)", GREEN), + Seg(T, len(cds) - 1, tp, f"TP {f2(tp)} = 4R = +100 $", BLUE, dash="4 3")], + marks=[Mark(3, "raliu", GRAY, "above", dy=-30), + Mark(T, "trigger", RED, "above", dy=-4), + Mark(hit, "4R", BLUE, "below", dy=2)], + scale=130, title="Exemplu construit (fără ticker) — 5 min", + caption="Short: stopul deasupra, ținta dedesubt, tot 0.25 $ contra 1.00 $.", **STYLE) +svg_ = ch.render() +assert abs(rpx(ch, entry, sl, tp) - 4.0) < 0.01 +svgs["risc_short"] = svg_ + +# ================================================================ 3-4. break-even: DA și NU +base = [25.90, 25.78, 25.82, 25.66, 25.55, 25.60, 25.46, 25.35, 25.40, 25.28, 25.24, 25.26, 25.22, 25.28, + 25.40, # 14 trigger + 25.48, 25.58, 25.70, 25.76, 25.68] # 17: +1R -> stop la break-even +be_da = [25.60, 25.55, 25.66, 25.80, 25.74, 25.92, 26.05, 25.98, 26.15, 26.28, 26.22, 26.36, 26.45, 26.38, 26.42] +be_nu = [25.58, 25.43, 25.52, 25.66, 25.80, 25.74, 25.92, 26.05, 25.98, 26.15, 26.28, 26.22, 26.36, 26.45, 26.38] + + +def be_chart(tail, name, nu): + cds = from_closes(base + tail, wick=0.04, start=26.00) + entry = cds[T].c + sl = round(entry - 0.25, 2) + r1 = round(entry + 0.25, 2) + tp = round(entry + 1.00, 2) + assert sl < min(c.l for c in cds[T - 3:T + 1]) + mv = first(cds, T + 1, lambda c: c.h >= r1) + assert mv == 17, mv + hit = first(cds, mv + 1, lambda c: c.h >= tp) + out = next((i for i in range(mv + 1, hit) if cds[i].l <= entry), None) + assert min(c.l for c in cds[T + 1:]) > sl, "stopul inițial nu e atins niciodată" + assert (out is not None) == nu, "NU: scos la break-even înainte de țintă; DA: nu" + n = len(cds) + end = out if nu else hit + segs = [Seg(T, n - 1, tp, f"TP {f2(tp)} = 4R", BLUE, dash="4 3"), + Seg(T, mv, sl, f"SL inițial {f2(sl)} = −1R", RED), + Seg(mv, end, entry, f"SL mutat la intrare {f2(entry)} = 0", ORANGE), + Seg(T, mv, entry, "", GREEN), + Seg(mv, n - 1, r1, f"+1R {f2(r1)}: aici muți stopul", GRAY, dash="2 3")] + marks = [Mark(T, "intrare", GREEN, "below", dy=4), Mark(mv, "+1R", GRAY, "above", dy=-2)] + if nu: + marks += [Mark(out, "scos la 0", ORANGE, "below", dy=4), Mark(hit, "4R, fără tine", BLUE, "above", dy=-2)] + cap = "Codița coboară până la intrare (25.39): ieși pe zero, apoi prețul merge la țintă." + else: + marks += [Mark(hit, "4R", BLUE, "above", dy=-2)] + cap = "Pullback-ul se oprește deasupra intrării: stopul la zero nu se atinge, ținta da." + ch = PChart(candles=cds, segs=segs, marks=marks, scale=150, + title="Exemplu construit (fără ticker) — 5 min", caption=cap, **STYLE) + svg_ = ch.render() + assert abs(rpx(ch, entry, sl, tp) - 4.0) < 0.01 and abs(rpx(ch, entry, sl, r1) - 1.0) < 0.01 + svgs[name] = svg_ + low_pb = min(c.l for c in cds[mv + 1:hit]) + print(f"D{'4' if nu else '3'} entry {f2(entry)} SL {f2(sl)} +1R {f2(r1)} la {mv} TP {f2(tp)} la {hit}; " + f"low pullback {f2(low_pb)}; scos la {out}") + return dict(entry=entry, sl=sl, r1=r1, tp=tp, low=low_pb) + + +BE_DA = be_chart(be_da, "be_da", False) +BE_NU = be_chart(be_nu, "be_nu", True) + +# ================================================================ 5. trei poziții: TP1 / TP2 / trail +cl5 = [41.80, 41.50, 41.60, 41.10, 40.70, 40.85, 40.40, 40.10, 40.20, 39.80, 39.75, 39.70, + 40.00, # 12 buy doji + 40.20, 40.10, 40.35, 40.55, 40.45, 40.70, 40.90, 40.80, 41.05, 41.30, 41.20, 41.55, 41.85, 41.70, + 42.05, 42.30, 42.10, 41.90, 41.80, 41.30, 41.10, 40.90, 41.00] +cds = from_closes(cl5, wick=0.10, start=42.00) +T = 12 +entry = cds[T].c +sl = round(entry - 0.50, 2) +tp1, tp2 = round(entry + 0.50, 2), round(entry + 1.00, 2) +n5 = shares(entry - sl) // 3 * 3 +per = n5 // 3 +assert sl < min(c.l for c in cds[T - 3:T + 1]) and n5 == 48 +h1 = first(cds, T + 1, lambda c: c.h >= tp1) +h2 = first(cds, h1 + 1, lambda c: c.h >= tp2) +assert min(c.l for c in cds[T + 1:h1 + 1]) > sl and min(c.l for c in cds[h1 + 1:]) > entry, "BE nu e atins" +# trail: linia = low-ul ultimei candele care a închis peste high-ul precedentei; urcă doar; ieși la close sub ea +trail, steps, ex = None, [], None +for i in range(h1 + 1, len(cds)): + if trail is not None and cds[i].c < trail: + ex = i + break + if cds[i].c > cds[i - 1].h and (trail is None or cds[i].l > trail): + trail = cds[i].l + steps.append((i, trail)) +assert ex is not None and ex > h2 +x_price = cds[ex].c +pnl = [per * (tp1 - entry), per * (tp2 - entry), per * (x_price - entry)] +R_tot = sum(pnl) / (n5 * (entry - sl)) +print(f"D5 entry {f2(entry)} SL {f2(sl)} {n5}={per}x3; TP1 {f2(tp1)} la {h1}, TP2 {f2(tp2)} la {h2}; trail " + f"{[(i, f2(p)) for i, p in steps]}; ieșire {ex} la {f2(x_price)}; P&L {[f2(p) for p in pnl]} = {f2(sum(pnl))} " + f"({R_tot:.2f}R pe riscul de {f2(n5 * (entry - sl))})") +TP3 = dict(entry=entry, sl=sl, tp1=tp1, tp2=tp2, n=n5, per=per, x=x_price, pnl=pnl, R=R_tot, steps=steps, + risk=n5 * (entry - sl), h1=h1 - T, h2=h2 - T, ex=ex - T) +segs = [Seg(T, h1, sl, f"SL {f2(sl)} (toate 3)", RED), + Seg(T, len(cds) - 1, entry, f"intrare {f2(entry)}; după TP1 = stop la zero", GREEN), + Seg(T, h1, tp1, f"TP1 {f2(tp1)} = 1R: poziția 1", BLUE, dash="4 3"), + Seg(T, h2, tp2, f"TP2 {f2(tp2)} = 2R: poziția 2", PURPLE, dash="4 3")] +for k, (i, p) in enumerate(steps): + i1 = steps[k + 1][0] - 1 if k + 1 < len(steps) else ex + segs.append(Seg(i, i1, p, f"trail final {f2(p)}: poziția 3" if k + 1 == len(steps) else "", ORANGE)) +ch = PChart(candles=cds, segs=segs, + marks=[Mark(T, "buy doji", GREEN, "below", dy=4), + Mark(h1, "TP1", BLUE, "above", dy=-2), + Mark(h2, "TP2", PURPLE, "above", dy=-2), + Mark(ex, "ieșire: close sub trail", ORANGE, "above", dy=-40)], + scale=90, title="Exemplu construit (fără ticker) — daily", + caption=f"{n5} acțiuni = 3 × {per}. Fiecare poziție iese altfel; stopul comun e 0.50 $ sub intrare.", **STYLE) +svg_ = ch.render() +assert abs(rpx(ch, entry, sl, tp1) - 1.0) < 0.01 and abs(rpx(ch, entry, sl, tp2) - 2.0) < 0.01 +assert abs(rpx(ch, entry, sl, steps[-1][1]) - (steps[-1][1] - entry) / (entry - sl)) < 0.01 +svgs["trei_pozitii"] = svg_ + +# ================================================================ 6-7. ținta realistă 1/2 vs ținta lacomă +cl6 = [63.20, 64.00, 64.90, 65.80, 65.30, 64.60, 64.90, 64.00, 63.20, 63.50, 62.60, 61.80, 62.10, 61.20, 60.50, + 60.35, 60.40, + 60.70, # 17 trigger + 60.90, 61.50, 61.30, 62.00, 62.60, 62.30, 63.00, 63.50, 63.90, 64.20, 63.70, 63.00, 62.40, 61.60, 61.00, + 60.30, 59.80, 59.50, 59.90] +w6 = [(0.2, 0.2)] * 15 + [(0.15, 0.35), (0.25, 0.25)] + [(0.2, 0.2)] * 20 +w6[3] = (0.2, 0.2) +cds = from_closes(cl6, wicks=w6, start=62.60) +T, SUP = 17, 60.00 +entry = cds[T].c +top = max(range(T), key=lambda i: cds[i].h) +hi = cds[top].h +sl = round(min(c.l for c in cds[T - 3:T + 1]) - 0.10, 2) +risk = entry - sl +half = round(entry + (hi - entry) / 2, 2) +assert abs(min(c.l for c in cds[T - 3:T + 1]) - SUP) < 0.01, "low-ul bazei stă exact pe confluență" +hh = first(cds, T + 1, lambda c: c.h >= half) +peak = max(c.h for c in cds[T + 1:]) +stop_i = first(cds, T + 1, lambda c: c.l <= sl) +assert hh < stop_i and peak < hi, "1/2 se atinge înainte de stop; vârful nu se atinge deloc" +Rh, Rg = (half - entry) / risk, (hi - entry) / risk +print(f"D6 vârf {f2(hi)} entry {f2(entry)} SL {f2(sl)} risc {f2(risk)} 1/2 {f2(half)} ({Rh:.2f}R) la {hh}; " + f"max după {f2(peak)}; stop la {stop_i}; lacom {Rg:.2f}R") +HALF = dict(hi=hi, entry=entry, sl=sl, risk=risk, half=half, Rh=Rh, Rg=Rg, peak=peak, hh=hh - T, + covered=(peak - entry) / (hi - entry)) +n = len(cds) +common = [Seg(0, n - 1, SUP, f"confluență S2 + suport monthly {SUP:.2f}", PURPLE, dash="2 3"), + Seg(T, n - 1, entry, f"intrare {f2(entry)}", GREEN), + Seg(T, n - 1, sl, f"SL {f2(sl)} = −1R", RED)] +ch = PChart(candles=cds, + segs=common + [Seg(top, n - 1, hi, f"vârf anterior {f2(hi)}", GRAY, dash="4 3"), + Seg(T, n - 1, half, f"TP = 1/2 din distanță {f2(half)} = {Rh:.1f}R", BLUE, dash="4 3")], + marks=[Mark(top, "vârf", GRAY, "above", dy=-2), Mark(T, "intrare", GREEN, "below", dy=6), + Mark(hh, "TP atins", BLUE, "above", dy=-2)], + scale=26, title="Exemplu construit (fără ticker) — daily", + caption="DA: ținta e jumătate din drumul până la vârf. Atinsă în 8 zile, înainte de întoarcere.", **STYLE) +svg_ = ch.render() +assert abs(rpx(ch, entry, sl, half) - Rh) < 0.01 +svgs["jumatate_da"] = svg_ +ch = PChart(candles=cds, + segs=common + [Seg(top, n - 1, hi, f"TP lacom = vârful {f2(hi)} = {Rg:.1f}R", RED, dash="4 3")], + marks=[Mark(top, "vârf", GRAY, "above", dy=-2), Mark(T, "intrare", GREEN, "below", dy=6), + Mark(first(cds, T + 1, lambda c: c.h >= peak), "se întoarce", GRAY, "above", dy=-2), + Mark(stop_i, "stop: −1R", RED, "below", dy=4)], + scale=26, title="Exemplu construit (fără ticker) — daily", + caption="NU: aceeași serie, ținta la vârf. Prețul acoperă 70% din drum, se întoarce și ia stopul.", **STYLE) +svg_ = ch.render() +assert abs(rpx(ch, entry, sl, hi) - Rg) < 0.01 +assert abs(HALF["covered"] - 0.70) < 0.02, HALF["covered"] +svgs["lacom_nu"] = svg_ + +# ================================================================ 8. reintrare după stop, cu același risc +cl8 = [30.60, 30.48, 30.52, 30.36, 30.22, 30.26, 30.10, + 30.20, # 7 intrarea 1 + 30.14, 30.05, 29.92, 29.80, 29.70, 29.74, + 29.84, # 14 intrarea 2 + 29.78, 29.70, 29.58, 29.46, 29.40, 29.44, + 29.56, # 21 intrarea 3 + 29.62, 29.55, 29.72, 29.86, 29.80, 29.98, 30.12, 30.06, 30.24, 30.38, 30.32, 30.50, 30.60, 30.52, 30.58] +cds = from_closes(cl8, wick=0.03, start=30.70) +E = [(7, 0.25), (14, 0.20), (21, 0.25)] +trades = [] +for k, (i, r) in enumerate(E): + e = cds[i].c + s = round(e - r, 2) + tp = round(e + 4 * r, 2) + ns = shares(r) + assert s < min(c.l for c in cds[i - 2:i + 1]), f"stopul intrării {k + 1} nu e sub structură" + st = next((j for j in range(i + 1, len(cds)) if cds[j].l <= s), 10 ** 6) + th = next((j for j in range(i + 1, len(cds)) if cds[j].h >= tp), 10 ** 6) + trades.append(dict(i=i, e=e, s=s, tp=tp, n=ns, stop=st if st < th else None, hit=th if th < st else None)) + assert abs(ns * r - RISC) < 1e-6, "fiecare intrare riscă exact 25 $" +assert trades[0]["stop"] and trades[1]["stop"] and trades[2]["hit"], trades +assert trades[0]["stop"] < trades[1]["i"] and trades[1]["stop"] < trades[2]["i"] +net = -RISC - RISC + trades[2]["n"] * (trades[2]["tp"] - trades[2]["e"]) +assert abs(net - 50) < 1e-6 +print("D8", [(t["i"], f2(t["e"]), f2(t["s"]), t["n"], t["stop"], t["hit"]) for t in trades], "net", net) +REIN = dict(trades=trades, net=net) +t1, t2, t3 = trades +n = len(cds) +ch = PChart(candles=cds, + segs=[Seg(t3["i"], n - 1, t3["tp"], f"#3 TP {f2(t3['tp'])} = 4R = +100 $", BLUE, dash="4 3"), + Seg(t1["i"], t1["stop"], t1["e"], f"#1 intrare {f2(t1['e'])} ({t1['n']} acț.)", GREEN), + Seg(t1["i"], t1["stop"], t1["s"], f"#1 SL {f2(t1['s'])}: −25 $", RED), + Seg(t2["i"], t2["stop"], t2["e"], f"#2 intrare {f2(t2['e'])} ({t2['n']} acț.)", GREEN), + Seg(t2["i"], t2["stop"], t2["s"], f"#2 SL {f2(t2['s'])}: −25 $", RED), + Seg(t3["i"], t3["hit"], t3["e"], f"#3 intrare {f2(t3['e'])} ({t3['n']} acț.)", GREEN), + Seg(t3["i"], t3["hit"], t3["s"], f"#3 SL {f2(t3['s'])}", RED)], + marks=[Mark(t1["i"], "#1", GREEN, "above", dy=-2), Mark(t1["stop"], "stop", RED, "below", dy=4), + Mark(t2["i"], "#2", GREEN, "above", dy=-2), Mark(t2["stop"], "stop", RED, "below", dy=4), + Mark(t3["i"], "#3", GREEN, "above", dy=-4), Mark(t3["hit"], "4R", BLUE, "above", dy=-2)], + scale=170, title="Exemplu construit (fără ticker) — 5 min", + caption="Două stopuri de câte 25 $, a treia intrare cu același risc: −25 −25 +100 = +50 $.", **STYLE) +svg_ = ch.render() +for t in trades: + assert abs(rpx(ch, t["e"], t["s"], t["tp"]) - 4.0) < 0.01 +svgs["reintrare"] = svg_ + +# ================================================================ 9. tranșe de 1/4 la acțiuni scumpe +cl9 = [450, 462, 468, 460, 448, 452, 438, 426, 430, 414, 400, 394, 398, 410, 422, 430, 436, 428, 420, 412, + 406, # 20 higher low + 418, # 21 confirmare = tranșa 1 + 426, 432, 428, 425, 420, 416, 424, 432, 438, 435, 444, 452, 448, 458, 466, 471, 465, 468] +cds = from_closes(cl9, wick=2.0, start=445) +HL, CF, SH = 20, 21, 23 +prev_low = min(c.l for c in cds[:HL]) +assert cds[HL].l > prev_low and cds[CF].c > cds[HL].h, "higher low confirmat de candela din dreapta" +top = max(range(HL), key=lambda i: cds[i].h) +sh = cds[SH].h +move = sh - cds[HL].l +lv = [(CF, cds[CF].c, "confirmare")] +for frac, name in [(1 / 3, "1/3"), (1 / 2, "1/2"), (2 / 3, "2/3")]: + p = round(sh - frac * move, 2) + i = first(cds, SH + 1, lambda c, p=p: c.l <= p) + lv.append((i, p, name)) +assert [x[0] for x in lv] == [21, 25, 26, 27], lv +sl9 = cds[HL].l - 5 +per9 = 2 +avg = sum(p for _, p, _ in lv) / 4 +risk_tr = sum(per9 * (p - sl9) for _, p, _ in lv) +risk_chase = 4 * per9 * (sh - sl9) +tgt = cds[top].h +hit = first(cds, 28, lambda c: c.h >= tgt) +assert min(c.l for c in cds[CF:]) > sl9 and hit > lv[-1][0] +prof_tr = 4 * per9 * (tgt - avg) +prof_ch = 4 * per9 * (tgt - sh) +print(f"D9 low anterior {prev_low} HL {cds[HL].l} vârf {sh} mișcare {move}; tranșe {lv}; SL {sl9} medie {avg} " + f"risc {risk_tr} vs {risk_chase}; țintă {tgt} la {hit}; profit {prof_tr} vs {prof_ch}") +TR = dict(lv=lv, sl=sl9, avg=avg, risk=risk_tr, chase=risk_chase, tgt=tgt, hl=cds[HL].l, sh=sh, move=move, + prev_low=prev_low, per=per9, prof=prof_tr, prof_ch=prof_ch) +n = len(cds) +ch = PChart(candles=cds, + segs=[Seg(top, n - 1, tgt, f"țintă: vârful anterior {tgt:.0f}", BLUE, dash="4 3"), + Seg(SH, n - 1, sh, f"vârful după HL {sh:.0f} (aici NU cumperi tot)", GRAY, dash="2 3")] + + [Seg(i, n - 1, p, f"tranșa {k + 1}: {per9} acț. la {p:.0f} ({nm})", GREEN) + for k, (i, p, nm) in enumerate(lv)] + + [Seg(CF, n - 1, sl9, f"SL comun {sl9:.0f} (sub HL {cds[HL].l:.0f})", RED)], + marks=[Mark(11, "low", GRAY, "below", dy=4), Mark(HL, "HL", GREEN, "below", dy=4), + Mark(SH, "vârf", GRAY, "above", dy=-2), Mark(hit, "țintă", BLUE, "above", dy=-2)], + scale=3.4, title="Exemplu construit (fără ticker) — weekly, acțiune de ~420 $", + caption=f"4 tranșe × {per9} acțiuni, un singur stop. Preț mediu {avg:.2f}, risc total {risk_tr:.0f} $.", + **STYLE) +svg_ = ch.render() +assert abs(rpx(ch, avg, sl9, tgt) - (tgt - avg) / (avg - sl9)) < 0.01 +svgs["transe"] = svg_ + +# ================================================================ 10. ținte în trepte, cu SMA-200 desenată +hist10 = [55.1 + 4.3 * k / 199 for k in range(200)] +cl10 = [60.40, 60.10, 60.50, 60.20, + 55.20, # 4 marubozu de cădere + 55.80, 55.90, 55.40, 55.00, 54.30, 54.70, 53.60, 52.80, 53.10, 52.00, 51.20, 51.50, 50.40, 49.60, 49.90, + 49.10, 48.60, 48.90, + 48.85, # 23 doji + 49.60, # 24 buy doji + 50.20, 49.90, 50.70, 51.30, 51.00, 51.80, 52.60, 52.20, 53.00, 53.80, 53.40, 54.30, 55.00, 54.60, 55.50, + 56.20, 55.90, 56.70, 57.00, 56.30] +w10 = [(0.2, 0.2)] * 4 + [(0.05, 0.05)] + [(0.2, 0.2)] * 18 + [(0.4, 0.4)] + [(0.2, 0.2)] * 21 +cds = from_closes(cl10, wicks=w10, start=60.30) +MAR, DJ, T = 4, 23, 24 +R1, R2 = 51.00, 52.50 # pivotul lunii: date, calculul e în documentul 04 +assert cds[MAR].o - cds[MAR].c >= 4.5, "marubozu mare" +assert abs(cds[DJ].o - cds[DJ].c) <= 0.1 and cds[T].c > cds[DJ].h, "buy doji" +entry = cds[T].c +sl = round(min(c.l for c in cds[T - 3:T + 1]) - 0.10, 2) +risk = entry - sl +ph_i = max(range(MAR + 1, T), key=lambda i: cds[i].h) +ph = cds[ph_i].h +half_m = round((cds[MAR].o + cds[MAR].c) / 2, 2) +sup = round(min(c.l for c in cds[:MAR]), 2) +tmp = PChart(candles=cds, hist=hist10) +sma = tmp.ma_vals(200) +hits = {} +for name, p in [("R1", R1), ("R2", R2), ("vârf", ph)]: + hits[name] = first(cds, T + 1, lambda c, p=p: c.h >= p) +hits["SMA-200"] = next(i for i in range(T + 1, len(cds)) if cds[i].h >= sma[i]) +sma_hit = sma[hits["SMA-200"]] +assert R1 < R2 < ph < sma_hit < half_m < sup, (R1, R2, ph, sma_hit, half_m, sup) +assert hits["R1"] < hits["R2"] < hits["vârf"] < hits["SMA-200"] +assert max(c.h for c in cds[T + 1:]) < half_m and min(c.l for c in cds[T + 1:]) > sl +assert cds[-1].c < sma[-1], "respins sub SMA-200" +rs = {k: (p - entry) / risk for k, p in [("R1", R1), ("R2", R2), ("vârf", ph), ("SMA-200", sma_hit), + ("1/2 marubozu", half_m), ("fost suport", sup)]} +print(f"D10 entry {f2(entry)} SL {f2(sl)} risc {f2(risk)}; R1 {R1} R2 {R2} vârf {f2(ph)} SMA-200 la atingere " + f"{f2(sma_hit)} (ultima {f2(sma[-1])}) 1/2 mar {f2(half_m)} suport {f2(sup)}; hits {hits}; " + + ", ".join(f"{k} {v:.2f}R" for k, v in rs.items())) +TREP = dict(entry=entry, sl=sl, risk=risk, ph=ph, sma=sma_hit, half=half_m, sup=sup, rs=rs, + hits={k: v - T for k, v in hits.items()}, mar_o=cds[MAR].o, mar_c=cds[MAR].c) +n = len(cds) +ch = PChart(candles=cds, hist=hist10, + segs=[Seg(0, n - 1, sup, f"6. fost suport {f2(sup)} = {rs['fost suport']:.1f}R", PURPLE, dash="4 3"), + Seg(MAR, n - 1, half_m, f"5. 1/2 marubozu {f2(half_m)} = {rs['1/2 marubozu']:.1f}R", ORANGE, dash="4 3"), + Seg(hits["SMA-200"], n - 1, sma_hit, f"4. SMA-200 (linia gri) atinsă la {f2(sma_hit)} = {rs['SMA-200']:.1f}R", GRAY, dash="2 3"), + Seg(ph_i, n - 1, ph, f"3. vârf anterior {f2(ph)} = {rs['vârf']:.1f}R", BLUE, dash="4 3"), + Seg(T, n - 1, R2, f"2. R2 {f2(R2)} = {rs['R2']:.1f}R", BLUE, dash="4 3"), + Seg(T, n - 1, R1, f"1. R1 {f2(R1)} = {rs['R1']:.1f}R", BLUE, dash="4 3"), + Seg(T, n - 1, entry, f"intrare {f2(entry)}", GREEN), + Seg(T, n - 1, sl, f"SL {f2(sl)} = −1R", RED)], + mas=[MA(200, GRAY)], + marks=[Mark(MAR, "marubozu", RED, "below", dy=4), Mark(T, "buy doji", GREEN, "below", dy=6), + Mark(hits["R1"], "1", BLUE, "above", dy=-2), Mark(hits["R2"], "2", BLUE, "above", dy=-2), + Mark(hits["vârf"], "3", BLUE, "above", dy=-2), Mark(hits["SMA-200"], "4", GRAY, "above", dy=-12)], + scale=24, title="Exemplu construit (fără ticker) — daily", + caption="Treptele 1-4 se ating în ordine; la SMA-200, sub 1/2 marubozu, prețul e respins.", **STYLE) +svg_ = ch.render() +for p, r in [(R1, rs["R1"]), (R2, rs["R2"]), (ph, rs["vârf"]), (sma_hit, rs["SMA-200"]), (half_m, rs["1/2 marubozu"]), + (sup, rs["fost suport"])]: + assert abs(rpx(ch, entry, sl, p) - r) < 0.01 +svgs["trepte"] = svg_ + +# ================================================================ 11. eșantionul de 25 de tranzacții la 1:4 +seq = "SSSSCSSSCSSSSCSSSCSSCSSSC" # S = stop (−25 $), C = țintă 4R (+100 $) +assert len(seq) == 25 +rows, eq = [], 0.0 +for k, ch_ in enumerate(seq, 1): + eq += 100 if ch_ == "C" else -RISC + rows.append((k, ch_, eq)) +wins = seq.count("C") +total = wins * 100 - (25 - wins) * RISC +assert abs(total - eq) < 1e-9 and wins == 6 and total == 125 +worst = min(r[2] for r in rows) +day1 = rows[4][2] +be_rate = 1 / (1 + 4) +print(f"D11 {wins}/25 câștigătoare, total {total}, minim {worst}, după 5 tranzacții {day1}; prag {be_rate:.0%}") +tbl = ["| # | rezultat | cumulat |", "|---|---|---|"] +for k, ch_, e in rows: + tbl.append(f"| {k} | {'țintă +100 $' if ch_ == 'C' else 'stop −25 $'} | {e:+.0f} $ |") +svgs["esantion_tabel"] = "\n".join(tbl) +SAMPLE = dict(wins=wins, total=total, worst=worst, day1=day1) + +# ---------------------------------------------------------------- substituție în .md +if MD.exists(): + md = MD.read_text(encoding="utf-8") + for name, svg in svgs.items(): + pat = re.compile(rf".*?", re.S) + assert pat.search(md), f"marcatorul {name} lipsește din .md" + md = pat.sub(lambda _m: f"\n{svg}\n", md) + MD.write_text(md, encoding="utf-8") + print("scris", MD) diff --git a/summaries/08_ANALIZA_ZILNICA/08_executie_si_risc.html b/summaries/08_ANALIZA_ZILNICA/08_executie_si_risc.html new file mode 100644 index 0000000..3c4af6a --- /dev/null +++ b/summaries/08_ANALIZA_ZILNICA/08_executie_si_risc.html @@ -0,0 +1,1563 @@ + + + + + +Analiză zilnică / #8 — Execuție și risc + + + +

Analiză zilnică / #8 — Execuție și risc

+

TLDR

+
    +
  • Risc fix de 25 $ pe tranzacție, țintă 4R = 100 $ (10.09). Stopul + stabilește câte acțiuni cumperi, nu invers: 25 $ / distanța până la stop.
  • +
  • La 1:4 ai nevoie de o țintă din cinci ca să fii pe zero. Patru stopuri + la rând = −100 $, adică exact o țintă. De aici: nu judeci sistemul după o + zi, ci după 20-30 de tranzacții.
  • +
  • După stop, reintri (mai jos, la long) cu același risc de 25 $ (02.09).
  • +
  • Când tranzacția merge, muți stopul pe break-even. Costul: în + volatilitate te scoate des la zero (02.09).
  • +
  • Trei poziții: TP1, TP2 și a treia pe trailing stop.
  • +
  • Ținte în trepte (03.09): R1 → R2 → vârf anterior → SMA-200 → 1/2 + marubozu → fost suport. Unde se strâng mai multe, e zona de profit.
  • +
  • Ținta realistă a unui bounce = 1/2 din distanța până la vârf (21.08), + nu vârful.
  • +
  • Acțiuni scumpe: 4 tranșe de 1/4, cu un singur stop (10.09).
  • +
+
+

Termenii, o singură dată

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TermenCe înseamnă aici
Rriscul unei tranzacții: distanța intrare → stop, în bani. La noi 1R = 25 $
1:4 / 4Rținta e de 4 ori mai departe de intrare decât stopul; câștigul = 4 × 25 $ = 100 $
mărimea pozițieiacțiuni = 25 $ / (intrare − stop), rotunjit în jos
break-even (BE)stopul mutat exact la prețul de intrare: dacă e atins, ieși pe zero
TP1 / TP2primul și al doilea take profit, pentru câte o parte a poziției
trailing stopstop care urcă după preț (la long) și nu coboară niciodată
marubozucandelă mare, aproape fără codițe; jumătatea corpului ei e un nivel
R1 / R2rezistențele pivotului monthly (calculul: documentul 04)
eșantionnumărul de tranzacții după care rezultatul spune ceva despre sistem
+
+

1. Risc fix de 25 $ la 1:4

+

Pe intrările intraday riscă mereu aceeași sumă mică, 25 $, și cere o țintă de +4R. Mărimea poziției vine din stop:

+ + + + + + + + + + + + + + + + + + + + + +
PasCalcul
stopul e sub structurăintrare 100.60, stop 100.35 → 0.25 $/acțiune
câte acțiuni25 $ / 0.25 = 100 acțiuni
ținta 4R100.60 + 4 × 0.25 = 101.60 → 100 × 1.00 = +100 $
+ +

+ Exemplu construit (fără ticker) — 5 min + + TP 101.60 = 4R = +100 $ + + intrare 100.60 (100 acțiuni) + + SL 100.35 = 1R = −25 $ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pullback + trigger + 4R + Risc 0.25 $/acțiune × 100 acțiuni = 25 $. Ținta e de 4 ori mai departe decât stopul. +

+ + +
    +
  • Pullback de pe 101.66 într-o bază de 5 minute. Trigger la 100.60.
  • +
  • SL 100.35, sub cele trei low-uri ale bazei (cel mai jos: 100.40).
  • +
  • TP 101.60 = 4R, chiar sub vârful de unde a plecat pullback-ul. Atins + după 13 bare.
  • +
+

Dacă stopul logic ar fi fost la 0.50 $, cumperi 50 de acțiuni, nu 100. +Riscul rămâne 25 $; se schimbă doar mărimea.

+

Short, aceeași aritmetică:

+ +

+ Exemplu construit (fără ticker) — 5 min + + SL 80.25 = 1R = −25 $ + + intrare short 80.00 (100 acțiuni) + + TP 79.00 = 4R = +100 $ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + raliu + trigger + 4R + Short: stopul deasupra, ținta dedesubt, tot 0.25 $ contra 1.00 $. +

+ + +

Intrare short 80.00, SL 80.25 deasupra bazei, TP 79.00. Tot 100 de +acțiuni, −25 $ sau +100 $.

+
+

„după 4 ori și nu merge niciodată, pierd câte 25, înseamnă că am pierd 100."

+
+

2. De ce 1:4: eșantionul de 20-30 de tranzacții

+

La 1:4 o țintă plătește patru stopuri. Pragul de zero e deci 1 din 5 +tranzacții câștigătoare (20%). Sub el pierzi, peste el câștigi, oricât de +urât arată ziua.

+
+

„Tradingul este măsurabil doar după un eșantion reprezentativ, nu după +noroc, nu după o zi bună, după 20-30 de tranzacții."

+
+

O serie construită de 25 de tranzacții, 6 câștigătoare (24%):

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#rezultatcumulat
1stop −25 $-25 $
2stop −25 $-50 $
3stop −25 $-75 $
4stop −25 $-100 $
5țintă +100 $+0 $
6stop −25 $-25 $
7stop −25 $-50 $
8stop −25 $-75 $
9țintă +100 $+25 $
10stop −25 $+0 $
11stop −25 $-25 $
12stop −25 $-50 $
13stop −25 $-75 $
14țintă +100 $+25 $
15stop −25 $+0 $
16stop −25 $-25 $
17stop −25 $-50 $
18țintă +100 $+50 $
19stop −25 $+25 $
20stop −25 $+0 $
21țintă +100 $+100 $
22stop −25 $+75 $
23stop −25 $+50 $
24stop −25 $+25 $
25țintă +100 $+125 $
+ + +
    +
  • După primele 4 tranzacții: −100 $. Cine judecă după o zi, aici + abandonează sistemul.
  • +
  • După 20 de tranzacții (4 câștigătoare, exact 20%): 0 $.
  • +
  • După 25: +125 $ = 6 × 100 − 19 × 25.
  • +
  • Cea mai adâncă scădere din toată seria: −100 $, adică 4R. La risc fix, + asta știi dinainte.
  • +
+

3. Reintrarea după stop, cu același risc

+

Pe 10.09 a luat live două stopuri la rând, de câte 25 $, și a intrat a +treia oară cu același risc. Pe 02.09: după stop, reintri mai jos, tot cu +riscul fix.

+
+

„Deci m-a scos până acum de 2 ori consecutiv […] Și n-am nicio greață"

+
+ +

+ Exemplu construit (fără ticker) — 5 min + + #3 TP 30.56 = 4R = +100 $ + + #1 intrare 30.20 (100 acț.) + + #1 SL 29.95: −25 $ + + #2 intrare 29.84 (125 acț.) + + #2 SL 29.64: −25 $ + + #3 intrare 29.56 (100 acț.) + + #3 SL 29.31 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #1 + stop + #2 + stop + #3 + 4R + Două stopuri de câte 25 $, a treia intrare cu același risc: −25 −25 +100 = +50 $. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#intrarestopdistanțăacțiunirezultat
130.2029.950.25100stop, −25 $
229.8429.640.20125stop, −25 $
329.5629.310.25100TP 30.56 = 4R, +100 $
+

Total +50 $. Intrarea 2 are stopul mai strâns, deci mai multe acțiuni: +riscul în bani e același. Ce nu faci: dublezi mărimea după două stopuri +ca să „recuperezi". Atunci al treilea stop costă 50 $, nu 25.

+

4. Break-even: DA și NU

+

Când tranzacția merge, muți stopul la prețul de intrare. De acolo nu mai poți +pierde, doar ieși pe zero. Aici regula e: la +1R (25.65) muți stopul.

+

DA — pullback-ul se oprește deasupra intrării:

+ +

+ Exemplu construit (fără ticker) — 5 min + + TP 26.40 = 4R + + SL inițial 25.15 = −1R + + SL mutat la intrare 25.40 = 0 + + + +1R 25.65: aici muți stopul + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + intrare + +1R + 4R + Pullback-ul se oprește deasupra intrării: stopul la zero nu se atinge, ținta da. +

+ + +

Intrare 25.40, SL 25.15, TP 26.40 = 4R. La a treia bară după +intrare prețul trece de 25.65, stopul urcă la 25.40. Pullback-ul coboară +până la 25.51, deasupra intrării. Ținta e atinsă.

+

NU — scos la zero, apoi prețul merge fără tine:

+ +

+ Exemplu construit (fără ticker) — 5 min + + TP 26.40 = 4R + + SL inițial 25.15 = −1R + + SL mutat la intrare 25.40 = 0 + + + +1R 25.65: aici muți stopul + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + intrare + +1R + scos la 0 + 4R, fără tine + Codița coboară până la intrare (25.39): ieși pe zero, apoi prețul merge la țintă. +

+ + +

Aceeași intrare, aceeași mutare. Pullback-ul coboară la 25.39, un cent +sub intrare: ieși pe 0 $. Stopul inițial (25.15) n-ar fi fost atins, iar +11 bare mai târziu prețul e la 26.40.

+
+

„M-a scos în break-even, a căzut și nou. Da, deci este o volatilitate."

+
+

Cum citești perechea: BE-ul transformă un posibil −25 $ într-un 0 $ sigur, +cu prețul unor ținte ratate. În volatilitate mare (02.09: futures în +premarket, compresie sub banda de 2 deviații standard) te scoate repetat. Nu +forțezi, cauți reintrare — secțiunea 3.

+

5. Trei poziții: TP1, TP2, trailing stop

+

Din strategia buy doji din curs +(Strategia 3): intri cu un multiplu de +3 și fiecare parte iese altfel. Aici cu 25 $ risc total:

+
    +
  • stop 0.50 $/acțiune → 25 / 0.50 = 50, rotunjit în jos la multiplu de 3 = + 48 de acțiuni = 3 × 16, risc 24 $;
  • +
  • poziția 1 iese la TP1 = 1R;
  • +
  • poziția 2 iese la TP2 = 2R;
  • +
  • poziția 3 stă pe trailing stop: linia e low-ul ultimei candele care + a închis peste high-ul precedentei; urcă doar; ieși când o candelă închide + sub ea.
  • +
  • după TP1, stopul pozițiilor 2 și 3 trece la break-even.
  • +
+ +

+ Exemplu construit (fără ticker) — daily + + SL 39.50 (toate 3) + + intrare 40.00; după TP1 = stop la zero + + TP1 40.50 = 1R: poziția 1 + + TP2 41.00 = 2R: poziția 2 + + + + + + + + + trail final 41.95: poziția 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + buy doji + TP1 + TP2 + ieșire: close sub trail + 48 acțiuni = 3 × 16. Fiecare poziție iese altfel; stopul comun e 0.50 $ sub intrare. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Pozițieieșirecalculrezultat
1TP1 40.50, a 4-a bară16 × 0.50+8.00 $
2TP2 41.00, a 7-a bară16 × 1.00+16.00 $
3close 41.90 sub trail 41.95, a 18-a bară16 × 1.90+30.40 $
total+54.40 $ = 2.27R (pe 24 $)
+

Trail-ul a urcat în 8 trepte, de la 40.35 la 41.95. Poziția 3 aduce singură +cât primele două la un loc. Fără ea, tranzacția ar fi fost 1.5R pe 2/3 din +poziție. Fără TP1 și TP2, un stop pe break-even după primul pullback ar fi +lăsat totul la zero.

+

6. Ținte în trepte

+

Pe 03.09 (CHTR, după super buy doji și buy momentum): nu pui un singur TP, +treci rezistențele de deasupra pe rând.

+
+

„după care e jumătatea acestui marabuzul […] este o zonă foarte importantă +de resistance. Dacă e să trag fostul suport, devine resistance."

+
+ +

+ Exemplu construit (fără ticker) — daily + + + 6. fost suport 59.90 = 7.9R + + 5. 1/2 marubozu 57.70 = 6.2R + + 4. SMA-200 (linia gri) atinsă la 56.78 = 5.5R + + 3. vârf anterior 56.10 = 5.0R + + 2. R2 52.50 = 2.2R + + 1. R1 51.00 = 1.1R + + intrare 49.60 + + SL 48.30 = −1R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + marubozu + buy doji + 1 + 2 + 3 + 4 + Treptele 1-4 se ating în ordine; la SMA-200, sub 1/2 marubozu, prețul e respins. +

+ + +

Context: bază pe suport la ~60, marubozu de cădere 60.20 → 55.20, lower +high la 56.10, apoi downtrend până la 48.40. Doji și buy doji la 49.60, +SL 48.30 (risc 1.30).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TreaptănivelRatinsă
1. R1 monthly51.001.1Ra 4-a zi
2. R2 monthly52.502.2Ra 7-a zi
3. vârf anterior56.105.0Ra 16-a zi
4. SMA-20056.785.5Ra 18-a zi, respins
5. 1/2 marubozu57.706.2Rnu
6. fost suport59.907.9Rnu
+

Cum folosești scara:

+
    +
  • R1 → R2 → vârful sunt locuri pentru TP1 / TP2 / mutarea stopului.
  • +
  • Vârful, SMA-200 și 1/2 marubozu stau în 1.60 $ unul de altul: acolo e + „zona foarte importantă". Aici iei grosul profitului. Prețul e respins + chiar la SMA-200.
  • +
  • Fostul suport e treapta finală, pentru poziția de pe trail, dacă zona + de mai jos se sparge.
  • +
  • Trigger NU: dacă prețul e deja lipit de o treaptă, nu mai are spațiu + până la următoarea și nu intri.
  • +
+

7. Ținta realistă: 1/2 din distanța până la vârf

+

Pe 21.08 (PNC, bănci regionale): intri pe pullback acolo unde coincid mai +multe suporturi, iar pentru bounce contezi pe jumătate din drumul până +la vârf.

+
+

„ar putea măcar jumătate din distanța asta să o acopere."

+
+

DA — ținta la jumătate:

+ +

+ Exemplu construit (fără ticker) — daily + + confluență S2 + suport monthly 60.00 + + intrare 60.70 + + SL 59.90 = −1R + + vârf anterior 66.00 + + TP = 1/2 din distanță 63.35 = 3.3R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + vârf + intrare + TP atins + DA: ținta e jumătate din drumul până la vârf. Atinsă în 8 zile, înainte de întoarcere. +

+ + +
    +
  • Pullback de pe 66.00 până la confluența S2 + suport monthly, 60.00.
  • +
  • Intrare 60.70, SL 59.90 (risc 0.80).
  • +
  • Distanța până la vârf: 66.00 − 60.70 = 5.30. Jumătate: 63.35 = 3.3R. + Atinsă în a 8-a zi.
  • +
+

NU — ținta lacomă, la vârf:

+ +

+ Exemplu construit (fără ticker) — daily + + confluență S2 + suport monthly 60.00 + + intrare 60.70 + + SL 59.90 = −1R + + TP lacom = vârful 66.00 = 6.6R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + vârf + intrare + se întoarce + stop: −1R + NU: aceeași serie, ținta la vârf. Prețul acoperă 70% din drum, se întoarce și ia stopul. +

+ + +

Aceleași candele. Ținta la 66.00 = 6.6R. Prețul urcă până la 64.40 +(70% din drum), se întoarce și ia stopul: −1R. Cu ținta de 1/2, aceeași +serie dădea +3.3R.

+

Diferența nu e că ținta lacomă e greșită o dată, ci că un bounce dintr-un +pullback se oprește des sub vârf: vânzătorii de la vârf sunt încă acolo.

+

8. Tranșe de 1/4 la acțiuni scumpe

+

La acțiuni de sute de dolari și volatile (10.09, SNDK) nu intri cu toată +poziția: 4 tranșe de câte 1/4. După higher low prețul poate retesta 1/3, +2/3 din mișcare ca să ia lichiditatea, iar tranșele cumpără exact acolo.

+
+

„Pentru că e posibil să retesteze o treime, 2 treimi, până să iau +liquiditatea de pe high-ul ăsta des și aș intra în bucăți."

+
+ +

+ Exemplu construit (fără ticker) — weekly, acțiune de ~420 $ + + țintă: vârful anterior 470 + + vârful după HL 434 (aici NU cumperi tot) + + tranșa 1: 2 acț. la 418 (confirmare) + + tranșa 2: 2 acț. la 424 (1/3) + + tranșa 3: 2 acț. la 419 (1/2) + + tranșa 4: 2 acț. la 414 (2/3) + + SL comun 399 (sub HL 404) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + low + HL + vârf + țintă + 4 tranșe × 2 acțiuni, un singur stop. Preț mediu 418.75, risc total 158 $. +

+ + +
    +
  • Low 392, higher low 404, confirmat de candela din dreapta la 418 + → tranșa 1.
  • +
  • Prețul urcă la 434 (mișcarea 404 → 434 = 30), apoi retestează: + 1/3 = 424 (tranșa 2), 1/2 = 419 (tranșa 3), 2/3 = 414 (tranșa 4).
  • +
  • Un singur stop: 399, sub higher low.
  • +
  • 4 × 2 acțiuni = 8 acțiuni, preț mediu 418.75.
  • +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
tranșetoate 8 acțiunile la vârf, 434
risc până la 3992 × (19 + 25 + 20 + 15) = 158 $8 × 35 = 280 $
profit la ținta 4708 × 51.25 = 410 $8 × 36 = 288 $
R2.6R1.0R
+

Dacă retesturile nu vin, ai doar tranșa 1 (2 acțiuni, 38 $ risc) și ratezi +restul. Accepți asta: nu alergi după preț.

+
+

„Atenție că e 400 și ceva de dolari. Adică nu e o jucărie."

+
+

Riscul total cu toate tranșele umplute (158 $) trebuie să încapă în riscul +pe care ți-l permiți pe o tranzacție; la 25 $/tranzacție, aceeași structură +înseamnă o singură acțiune în total, deci pe acțiuni scumpe cursul trimite +spre opțiuni.

+
+

Gotchas

+
    +
  • Stopul se pune înainte de intrare, apoi calculezi acțiunile. Invers + (cumperi 100 și cauți apoi unde să pui stopul) riscul nu mai e 25 $.
  • +
  • Nu mări poziția după stopuri. Diagrama de reintrare: trei intrări, trei + riscuri de 25 $. Dublarea transformă o serie normală de 4 stopuri într-una + care te scoate din joc.
  • +
  • Break-even-ul nu e gratuit. Diagrama NU: scos la 25.39 cu un cent sub + intrare, apoi 4R fără tine. În volatilitate mare lasă stopul inițial sau + caută reintrare.
  • +
  • Nu schimbi sistemul după o zi proastă. În seria de 25, primele patru + tranzacții sunt −100 $; totalul e +125 $.
  • +
  • Nu închizi toată poziția la 1R „ca să iau ceva". Pragul de zero urcă de la + 20% la 50%.
  • +
+
+

Surse

+

Din analiza zilnică (recoltele din harvest/):

+
    +
  • 21.08.2026 — intrare pe confluență de suporturi; ținta bounce-ului = + 1/2 din distanța până la vârf (PNC).
  • +
  • 25.08.2026 — primul target de profit, apoi reintrare.
  • +
  • 02.09.2026 — stop mutat pe break-even (NASDAQ futures); scos repetat + în break-even în volatilitate; după stop, reintri mai jos cu același risc.
  • +
  • 03.09.2026 — ținte în trepte R1 → R2 → vârf anterior → SMA-200 → 1/2 + marubozu → fost suport (CHTR); piața pare nedreaptă pe termen scurt.
  • +
  • 10.09.2026 — risc fix 25 $ la 1:4, două stopuri consecutive live; + eșantion de 20-30 de tranzacții; tranșe de 1/4 (SNDK); acțiunile scumpe + „nu sunt o jucărie".
  • +
+

Din curs: Strategia 3: Buy Doji / Sell Doji +(ieșirea eșalonată pe 3 poziții, trailing stop). Documente înrudite: +01 — buy doji și MICI (tranșele pe +MICI, ținte în trepte pe un exemplu), 04 — pivoți +(calculul R1 / R2).

+
+

Ce e completare a mea: toate prețurile, diagramele și tabelele sunt +construite (în transcrieri cifrele sunt nesigure). Din curs vin: riscul fix de +25 $, ținta 4R, cele două stopuri consecutive și a treia intrare, break-even-ul +și faptul că te scoate în volatilitate, reintrarea mai jos cu același risc, +ordinea țintelor în trepte, ținta de 1/2, tranșele de 1/4 și eșantionul de +20-30. Ale mele sunt: formula mărimii poziției și rotunjirea la multiplu de 3, +mutarea la break-even exact la +1R, pragul de zero de 20% și seria de 25 de +tranzacții, regula de trail folosită pe desen (low-ul ultimei candele care a +închis peste high-ul precedentei — varianta din curs cere un gol între bare, +care nu apare pe o serie fără goluri), TP1 = 1R și TP2 = 2R la cele trei +poziții, a patra tranșă la retestul de 1/2, comparația cu cumpărarea la vârf, +nota despre 25 $ la acțiuni scumpe și toate gotchas-urile. Valorile R1 / R2 +de la țintele în trepte sunt date, nu calculate pe desen. Fără link-uri +externe: nu am putut verifica niciunul din container.

+ + diff --git a/summaries/08_ANALIZA_ZILNICA/08_executie_si_risc.md b/summaries/08_ANALIZA_ZILNICA/08_executie_si_risc.md new file mode 100644 index 0000000..7cd0d1e --- /dev/null +++ b/summaries/08_ANALIZA_ZILNICA/08_executie_si_risc.md @@ -0,0 +1,1284 @@ +# Analiză zilnică / #8 — Execuție și risc + +## TLDR + +- **Risc fix de 25 $ pe tranzacție, țintă 4R = 100 $** (10.09). Stopul + stabilește câte acțiuni cumperi, nu invers: 25 $ / distanța până la stop. +- La 1:4 ai nevoie de **o țintă din cinci** ca să fii pe zero. Patru stopuri + la rând = −100 $, adică exact o țintă. De aici: **nu judeci sistemul după o + zi, ci după 20-30 de tranzacții.** +- **După stop, reintri** (mai jos, la long) **cu același risc de 25 $** (02.09). +- Când tranzacția merge, **muți stopul pe break-even**. Costul: în + volatilitate te scoate des la zero (02.09). +- **Trei poziții:** TP1, TP2 și a treia pe trailing stop. +- **Ținte în trepte** (03.09): R1 → R2 → vârf anterior → SMA-200 → 1/2 + marubozu → fost suport. Unde se strâng mai multe, e zona de profit. +- **Ținta realistă a unui bounce = 1/2 din distanța până la vârf** (21.08), + nu vârful. +- **Acțiuni scumpe: 4 tranșe de 1/4**, cu un singur stop (10.09). + +--- + +## Termenii, o singură dată + +| Termen | Ce înseamnă aici | +|---|---| +| **R** | riscul unei tranzacții: distanța intrare → stop, în bani. La noi 1R = 25 $ | +| **1:4 / 4R** | ținta e de 4 ori mai departe de intrare decât stopul; câștigul = 4 × 25 $ = 100 $ | +| **mărimea poziției** | acțiuni = 25 $ / (intrare − stop), rotunjit în jos | +| **break-even (BE)** | stopul mutat exact la prețul de intrare: dacă e atins, ieși pe zero | +| **TP1 / TP2** | primul și al doilea take profit, pentru câte o parte a poziției | +| **trailing stop** | stop care urcă după preț (la long) și nu coboară niciodată | +| **marubozu** | candelă mare, aproape fără codițe; jumătatea corpului ei e un nivel | +| **R1 / R2** | rezistențele pivotului monthly (calculul: [documentul 04](04_pivoti_si_proiectii.html)) | +| **eșantion** | numărul de tranzacții după care rezultatul spune ceva despre sistem | + +--- + +## 1. Risc fix de 25 $ la 1:4 + +Pe intrările intraday riscă mereu aceeași sumă mică, 25 $, și cere o țintă de +4R. Mărimea poziției vine din stop: + +| Pas | Calcul | +|---|---| +| stopul e sub structură | intrare 100.60, stop 100.35 → 0.25 $/acțiune | +| câte acțiuni | 25 $ / 0.25 = **100 acțiuni** | +| ținta 4R | 100.60 + 4 × 0.25 = **101.60** → 100 × 1.00 = **+100 $** | + + + + Exemplu construit (fără ticker) — 5 min + + TP 101.60 = 4R = +100 $ + + intrare 100.60 (100 acțiuni) + + SL 100.35 = 1R = −25 $ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pullback + trigger + 4R + Risc 0.25 $/acțiune × 100 acțiuni = 25 $. Ținta e de 4 ori mai departe decât stopul. + + + +- Pullback de pe 101.66 într-o bază de 5 minute. Trigger la **100.60**. +- **SL 100.35**, sub cele trei low-uri ale bazei (cel mai jos: 100.40). +- **TP 101.60 = 4R**, chiar sub vârful de unde a plecat pullback-ul. Atins + după 13 bare. + +Dacă stopul logic ar fi fost la 0.50 $, cumperi 50 de acțiuni, nu 100. +Riscul rămâne 25 $; se schimbă doar mărimea. + +**Short, aceeași aritmetică:** + + + + Exemplu construit (fără ticker) — 5 min + + SL 80.25 = 1R = −25 $ + + intrare short 80.00 (100 acțiuni) + + TP 79.00 = 4R = +100 $ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + raliu + trigger + 4R + Short: stopul deasupra, ținta dedesubt, tot 0.25 $ contra 1.00 $. + + + +Intrare short **80.00**, SL **80.25** deasupra bazei, TP **79.00**. Tot 100 de +acțiuni, −25 $ sau +100 $. + +> „după 4 ori și nu merge niciodată, pierd câte 25, înseamnă că am pierd 100." + +## 2. De ce 1:4: eșantionul de 20-30 de tranzacții + +La 1:4 o țintă plătește patru stopuri. Pragul de zero e deci **1 din 5 +tranzacții câștigătoare (20%)**. Sub el pierzi, peste el câștigi, oricât de +urât arată ziua. + +> „Tradingul este măsurabil doar după un eșantion reprezentativ, nu după +> noroc, nu după o zi bună, după 20-30 de tranzacții." + +O serie construită de **25 de tranzacții, 6 câștigătoare (24%)**: + + +| # | rezultat | cumulat | +|---|---|---| +| 1 | stop −25 $ | -25 $ | +| 2 | stop −25 $ | -50 $ | +| 3 | stop −25 $ | -75 $ | +| 4 | stop −25 $ | -100 $ | +| 5 | țintă +100 $ | +0 $ | +| 6 | stop −25 $ | -25 $ | +| 7 | stop −25 $ | -50 $ | +| 8 | stop −25 $ | -75 $ | +| 9 | țintă +100 $ | +25 $ | +| 10 | stop −25 $ | +0 $ | +| 11 | stop −25 $ | -25 $ | +| 12 | stop −25 $ | -50 $ | +| 13 | stop −25 $ | -75 $ | +| 14 | țintă +100 $ | +25 $ | +| 15 | stop −25 $ | +0 $ | +| 16 | stop −25 $ | -25 $ | +| 17 | stop −25 $ | -50 $ | +| 18 | țintă +100 $ | +50 $ | +| 19 | stop −25 $ | +25 $ | +| 20 | stop −25 $ | +0 $ | +| 21 | țintă +100 $ | +100 $ | +| 22 | stop −25 $ | +75 $ | +| 23 | stop −25 $ | +50 $ | +| 24 | stop −25 $ | +25 $ | +| 25 | țintă +100 $ | +125 $ | + + +- După primele **4** tranzacții: **−100 $**. Cine judecă după o zi, aici + abandonează sistemul. +- După **20** de tranzacții (4 câștigătoare, exact 20%): **0 $**. +- După **25**: **+125 $** = 6 × 100 − 19 × 25. +- Cea mai adâncă scădere din toată seria: −100 $, adică 4R. La risc fix, + asta știi dinainte. + +## 3. Reintrarea după stop, cu același risc + +Pe 10.09 a luat live **două stopuri la rând, de câte 25 $**, și a intrat a +treia oară cu același risc. Pe 02.09: după stop, reintri mai jos, tot cu +riscul fix. + +> „Deci m-a scos până acum de 2 ori consecutiv […] Și n-am nicio greață" + + + + Exemplu construit (fără ticker) — 5 min + + #3 TP 30.56 = 4R = +100 $ + + #1 intrare 30.20 (100 acț.) + + #1 SL 29.95: −25 $ + + #2 intrare 29.84 (125 acț.) + + #2 SL 29.64: −25 $ + + #3 intrare 29.56 (100 acț.) + + #3 SL 29.31 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #1 + stop + #2 + stop + #3 + 4R + Două stopuri de câte 25 $, a treia intrare cu același risc: −25 −25 +100 = +50 $. + + + +| # | intrare | stop | distanță | acțiuni | rezultat | +|---|---|---|---|---|---| +| 1 | 30.20 | 29.95 | 0.25 | 100 | stop, −25 $ | +| 2 | 29.84 | 29.64 | 0.20 | **125** | stop, −25 $ | +| 3 | 29.56 | 29.31 | 0.25 | 100 | TP 30.56 = 4R, **+100 $** | + +Total **+50 $**. Intrarea 2 are stopul mai strâns, deci mai multe acțiuni: +riscul în bani e același. Ce **nu** faci: dublezi mărimea după două stopuri +ca să „recuperezi". Atunci al treilea stop costă 50 $, nu 25. + +## 4. Break-even: DA și NU + +Când tranzacția merge, muți stopul la prețul de intrare. De acolo nu mai poți +pierde, doar ieși pe zero. Aici regula e: la **+1R** (25.65) muți stopul. + +**DA — pullback-ul se oprește deasupra intrării:** + + + + Exemplu construit (fără ticker) — 5 min + + TP 26.40 = 4R + + SL inițial 25.15 = −1R + + SL mutat la intrare 25.40 = 0 + + + +1R 25.65: aici muți stopul + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + intrare + +1R + 4R + Pullback-ul se oprește deasupra intrării: stopul la zero nu se atinge, ținta da. + + + +Intrare **25.40**, SL **25.15**, TP **26.40** = 4R. La a treia bară după +intrare prețul trece de 25.65, stopul urcă la 25.40. Pullback-ul coboară +până la **25.51**, deasupra intrării. Ținta e atinsă. + +**NU — scos la zero, apoi prețul merge fără tine:** + + + + Exemplu construit (fără ticker) — 5 min + + TP 26.40 = 4R + + SL inițial 25.15 = −1R + + SL mutat la intrare 25.40 = 0 + + + +1R 25.65: aici muți stopul + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + intrare + +1R + scos la 0 + 4R, fără tine + Codița coboară până la intrare (25.39): ieși pe zero, apoi prețul merge la țintă. + + + +Aceeași intrare, aceeași mutare. Pullback-ul coboară la **25.39**, un cent +sub intrare: ieși pe **0 $**. Stopul inițial (25.15) n-ar fi fost atins, iar +11 bare mai târziu prețul e la 26.40. + +> „M-a scos în break-even, a căzut și nou. Da, deci este o volatilitate." + +Cum citești perechea: BE-ul transformă un posibil −25 $ într-un 0 $ sigur, +cu prețul unor ținte ratate. În volatilitate mare (02.09: futures în +premarket, compresie sub banda de 2 deviații standard) te scoate repetat. Nu +forțezi, cauți reintrare — secțiunea 3. + +## 5. Trei poziții: TP1, TP2, trailing stop + +Din strategia buy doji din curs +([Strategia 3](../03_MODUL_2/13_strategia_3_byh.html)): intri cu un multiplu de +3 și fiecare parte iese altfel. Aici cu 25 $ risc total: + +- stop 0.50 $/acțiune → 25 / 0.50 = 50, rotunjit în jos la multiplu de 3 = + **48 de acțiuni = 3 × 16**, risc **24 $**; +- **poziția 1** iese la **TP1 = 1R**; +- **poziția 2** iese la **TP2 = 2R**; +- **poziția 3** stă pe **trailing stop**: linia e low-ul ultimei candele care + a închis peste high-ul precedentei; urcă doar; ieși când o candelă închide + sub ea. +- după TP1, stopul pozițiilor 2 și 3 trece la break-even. + + + + Exemplu construit (fără ticker) — daily + + SL 39.50 (toate 3) + + intrare 40.00; după TP1 = stop la zero + + TP1 40.50 = 1R: poziția 1 + + TP2 41.00 = 2R: poziția 2 + + + + + + + + + trail final 41.95: poziția 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + buy doji + TP1 + TP2 + ieșire: close sub trail + 48 acțiuni = 3 × 16. Fiecare poziție iese altfel; stopul comun e 0.50 $ sub intrare. + + + +| Poziție | ieșire | calcul | rezultat | +|---|---|---|---| +| 1 | TP1 40.50, a 4-a bară | 16 × 0.50 | +8.00 $ | +| 2 | TP2 41.00, a 7-a bară | 16 × 1.00 | +16.00 $ | +| 3 | close 41.90 sub trail 41.95, a 18-a bară | 16 × 1.90 | +30.40 $ | +| **total** | | | **+54.40 $ = 2.27R** (pe 24 $) | + +Trail-ul a urcat în 8 trepte, de la 40.35 la 41.95. Poziția 3 aduce singură +cât primele două la un loc. Fără ea, tranzacția ar fi fost 1.5R pe 2/3 din +poziție. Fără TP1 și TP2, un stop pe break-even după primul pullback ar fi +lăsat totul la zero. + +## 6. Ținte în trepte + +Pe 03.09 (CHTR, după super buy doji și buy momentum): nu pui un singur TP, +treci rezistențele de deasupra pe rând. + +> „după care e jumătatea acestui marabuzul […] este o zonă foarte importantă +> de resistance. Dacă e să trag fostul suport, devine resistance." + + + + Exemplu construit (fără ticker) — daily + + + 6. fost suport 59.90 = 7.9R + + 5. 1/2 marubozu 57.70 = 6.2R + + 4. SMA-200 (linia gri) atinsă la 56.78 = 5.5R + + 3. vârf anterior 56.10 = 5.0R + + 2. R2 52.50 = 2.2R + + 1. R1 51.00 = 1.1R + + intrare 49.60 + + SL 48.30 = −1R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + marubozu + buy doji + 1 + 2 + 3 + 4 + Treptele 1-4 se ating în ordine; la SMA-200, sub 1/2 marubozu, prețul e respins. + + + +Context: bază pe suport la ~60, **marubozu de cădere 60.20 → 55.20**, lower +high la 56.10, apoi downtrend până la 48.40. Doji și **buy doji la 49.60**, +**SL 48.30** (risc 1.30). + +| Treaptă | nivel | R | atinsă | +|---|---|---|---| +| 1. R1 monthly | 51.00 | 1.1R | a 4-a zi | +| 2. R2 monthly | 52.50 | 2.2R | a 7-a zi | +| 3. vârf anterior | 56.10 | 5.0R | a 16-a zi | +| 4. SMA-200 | 56.78 | 5.5R | a 18-a zi, respins | +| 5. 1/2 marubozu | 57.70 | 6.2R | nu | +| 6. fost suport | 59.90 | 7.9R | nu | + +Cum folosești scara: + +- **R1 → R2 → vârful** sunt locuri pentru TP1 / TP2 / mutarea stopului. +- **Vârful, SMA-200 și 1/2 marubozu** stau în 1.60 $ unul de altul: acolo e + „zona foarte importantă". Aici iei grosul profitului. Prețul e respins + chiar la SMA-200. +- **Fostul suport** e treapta finală, pentru poziția de pe trail, dacă zona + de mai jos se sparge. +- **Trigger NU:** dacă prețul e deja lipit de o treaptă, nu mai are spațiu + până la următoarea și nu intri. + +## 7. Ținta realistă: 1/2 din distanța până la vârf + +Pe 21.08 (PNC, bănci regionale): intri pe pullback acolo unde **coincid mai +multe suporturi**, iar pentru bounce contezi **pe jumătate** din drumul până +la vârf. + +> „ar putea măcar jumătate din distanța asta să o acopere." + +**DA — ținta la jumătate:** + + + + Exemplu construit (fără ticker) — daily + + confluență S2 + suport monthly 60.00 + + intrare 60.70 + + SL 59.90 = −1R + + vârf anterior 66.00 + + TP = 1/2 din distanță 63.35 = 3.3R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + vârf + intrare + TP atins + DA: ținta e jumătate din drumul până la vârf. Atinsă în 8 zile, înainte de întoarcere. + + + +- Pullback de pe **66.00** până la confluența S2 + suport monthly, **60.00**. +- Intrare **60.70**, SL **59.90** (risc 0.80). +- Distanța până la vârf: 66.00 − 60.70 = 5.30. Jumătate: **63.35 = 3.3R**. + Atinsă în a 8-a zi. + +**NU — ținta lacomă, la vârf:** + + + + Exemplu construit (fără ticker) — daily + + confluență S2 + suport monthly 60.00 + + intrare 60.70 + + SL 59.90 = −1R + + TP lacom = vârful 66.00 = 6.6R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + vârf + intrare + se întoarce + stop: −1R + NU: aceeași serie, ținta la vârf. Prețul acoperă 70% din drum, se întoarce și ia stopul. + + + +Aceleași candele. Ținta la **66.00 = 6.6R**. Prețul urcă până la **64.40** +(70% din drum), se întoarce și ia stopul: **−1R**. Cu ținta de 1/2, aceeași +serie dădea **+3.3R**. + +Diferența nu e că ținta lacomă e greșită o dată, ci că un bounce dintr-un +pullback se oprește des sub vârf: vânzătorii de la vârf sunt încă acolo. + +## 8. Tranșe de 1/4 la acțiuni scumpe + +La acțiuni de sute de dolari și volatile (10.09, SNDK) nu intri cu toată +poziția: **4 tranșe de câte 1/4**. După higher low prețul poate retesta 1/3, +2/3 din mișcare ca să ia lichiditatea, iar tranșele cumpără exact acolo. + +> „Pentru că e posibil să retesteze o treime, 2 treimi, până să iau +> liquiditatea de pe high-ul ăsta des și aș intra în bucăți." + + + + Exemplu construit (fără ticker) — weekly, acțiune de ~420 $ + + țintă: vârful anterior 470 + + vârful după HL 434 (aici NU cumperi tot) + + tranșa 1: 2 acț. la 418 (confirmare) + + tranșa 2: 2 acț. la 424 (1/3) + + tranșa 3: 2 acț. la 419 (1/2) + + tranșa 4: 2 acț. la 414 (2/3) + + SL comun 399 (sub HL 404) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + low + HL + vârf + țintă + 4 tranșe × 2 acțiuni, un singur stop. Preț mediu 418.75, risc total 158 $. + + + +- Low **392**, higher low **404**, confirmat de candela din dreapta la **418** + → **tranșa 1**. +- Prețul urcă la **434** (mișcarea 404 → 434 = 30), apoi retestează: + 1/3 = **424** (tranșa 2), 1/2 = **419** (tranșa 3), 2/3 = **414** (tranșa 4). +- **Un singur stop: 399**, sub higher low. +- 4 × 2 acțiuni = 8 acțiuni, preț mediu **418.75**. + +| | tranșe | toate 8 acțiunile la vârf, 434 | +|---|---|---| +| risc până la 399 | 2 × (19 + 25 + 20 + 15) = **158 $** | 8 × 35 = **280 $** | +| profit la ținta 470 | 8 × 51.25 = **410 $** | 8 × 36 = **288 $** | +| R | **2.6R** | **1.0R** | + +Dacă retesturile nu vin, ai doar tranșa 1 (2 acțiuni, 38 $ risc) și ratezi +restul. Accepți asta: nu alergi după preț. + +> „Atenție că e 400 și ceva de dolari. Adică nu e o jucărie." + +Riscul total cu toate tranșele umplute (158 $) trebuie să încapă în riscul +pe care ți-l permiți pe o tranzacție; la 25 $/tranzacție, aceeași structură +înseamnă o singură acțiune în total, deci pe acțiuni scumpe cursul trimite +spre opțiuni. + +--- + +## Gotchas + +- **Stopul se pune înainte de intrare, apoi calculezi acțiunile.** Invers + (cumperi 100 și cauți apoi unde să pui stopul) riscul nu mai e 25 $. +- **Nu mări poziția după stopuri.** Diagrama de reintrare: trei intrări, trei + riscuri de 25 $. Dublarea transformă o serie normală de 4 stopuri într-una + care te scoate din joc. +- **Break-even-ul nu e gratuit.** Diagrama NU: scos la 25.39 cu un cent sub + intrare, apoi 4R fără tine. În volatilitate mare lasă stopul inițial sau + caută reintrare. +- **Nu schimbi sistemul după o zi proastă.** În seria de 25, primele patru + tranzacții sunt −100 $; totalul e +125 $. +- **Nu închizi toată poziția la 1R „ca să iau ceva".** Pragul de zero urcă de la + 20% la 50%. + +--- + +## Surse + +Din analiza zilnică (recoltele din `harvest/`): + +- **21.08.2026** — intrare pe confluență de suporturi; ținta bounce-ului = + 1/2 din distanța până la vârf (PNC). +- **25.08.2026** — primul target de profit, apoi reintrare. +- **02.09.2026** — stop mutat pe break-even (NASDAQ futures); scos repetat + în break-even în volatilitate; după stop, reintri mai jos cu același risc. +- **03.09.2026** — ținte în trepte R1 → R2 → vârf anterior → SMA-200 → 1/2 + marubozu → fost suport (CHTR); piața pare nedreaptă pe termen scurt. +- **10.09.2026** — risc fix 25 $ la 1:4, două stopuri consecutive live; + eșantion de 20-30 de tranzacții; tranșe de 1/4 (SNDK); acțiunile scumpe + „nu sunt o jucărie". + +Din curs: [Strategia 3: Buy Doji / Sell Doji](../03_MODUL_2/13_strategia_3_byh.html) +(ieșirea eșalonată pe 3 poziții, trailing stop). Documente înrudite: +[01 — buy doji și MICI](01_buy_doji_si_strategia_mici.html) (tranșele pe +MICI, ținte în trepte pe un exemplu), [04 — pivoți](04_pivoti_si_proiectii.html) +(calculul R1 / R2). + +--- + +*Ce e completare a mea: toate prețurile, diagramele și tabelele sunt +construite (în transcrieri cifrele sunt nesigure). Din curs vin: riscul fix de +25 $, ținta 4R, cele două stopuri consecutive și a treia intrare, break-even-ul +și faptul că te scoate în volatilitate, reintrarea mai jos cu același risc, +ordinea țintelor în trepte, ținta de 1/2, tranșele de 1/4 și eșantionul de +20-30. Ale mele sunt: formula mărimii poziției și rotunjirea la multiplu de 3, +mutarea la break-even exact la +1R, pragul de zero de 20% și seria de 25 de +tranzacții, regula de trail folosită pe desen (low-ul ultimei candele care a +închis peste high-ul precedentei — varianta din curs cere un gol între bare, +care nu apare pe o serie fără goluri), TP1 = 1R și TP2 = 2R la cele trei +poziții, a patra tranșă la retestul de 1/2, comparația cu cumpărarea la vârf, +nota despre 25 $ la acțiuni scumpe și toate gotchas-urile. Valorile R1 / R2 +de la țintele în trepte sunt date, nu calculate pe desen. Fără link-uri +externe: nu am putut verifica niciunul din container.*