From 994ded8ffad47c0e7907166833574861beb8b3bf Mon Sep 17 00:00:00 2001 From: Claude Agent Date: Mon, 14 Sep 2026 06:08:23 +0000 Subject: [PATCH] Analiza Zilnica 09: earnings si optiuni (10 diagrame) Al saptelea document de strategie. Primul scris dintr-o singura trecere, fara agent de reparatii: promptul a primit de la start clasa PChart din az_pivoti.py pentru plasarea etichetelor, in loc sa o redescopere la final. Acoperite: earnings = gamble trade, cu perechea DA/NU pe aceeasi serie - setup format inainte de raport, cu gap de -9.6% peste stop si executie la open (-2.0R), fata de acelasi setup asteptat pana dupa raport (3.1R). Gap-ul de earnings ca tinta de pullback (DA/NU), caderea pe rezultate bune (DA/NU), raportul call/put 3-4x ca bias, pattern-ul pre-earnings pe trei trimestre. Rezerva lui la pattern-ul pre-earnings ("nu suta la suta") e pastrata in text, in caption si in tabel, iar varianta care functioneaza e marcata ca ilustrare a conditiei lui, nu ca semnal. Payoff-ul optiunilor e tabel, nu diagrama, si documentul spune de ce: payoff-ul are pretul pe orizontala si profitul pe verticala, fara timp - alt grafic decat unul de pret. Pe graficul de pret apar doar strike-urile, pentru ca sunt preturi. Reparat la citirea screenshot-urilor, pe langa suprapuneri: "higher low" era ancorat pe bara 30, dar minimul e pe bara 31; mutat, cu assert pe bara. Si o linie de TP 57.90 care se suprapunea cu open-ul de 58.00. Marcat ca adaugire proprie: tot exemplul de condor (nu are exemplu in transcrieri), strike-urile butterfly-ului, si tabelul cu fractiunea de pozitie la un gamble trade. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01MtSTyTmt6AbCL9j5ajEDm1 --- gen/az_earnings.py | 533 ++++++ .../09_earnings_si_optiuni.html | 1586 +++++++++++++++++ .../09_earnings_si_optiuni.md | 1435 +++++++++++++++ 3 files changed, 3554 insertions(+) create mode 100644 gen/az_earnings.py create mode 100644 summaries/08_ANALIZA_ZILNICA/09_earnings_si_optiuni.html create mode 100644 summaries/08_ANALIZA_ZILNICA/09_earnings_si_optiuni.md diff --git a/gen/az_earnings.py b/gen/az_earnings.py new file mode 100644 index 0000000..7213263 --- /dev/null +++ b/gen/az_earnings.py @@ -0,0 +1,533 @@ +"""Diagramele pentru summaries/08_ANALIZA_ZILNICA/09_earnings_si_optiuni.md. + +Toate prețurile sunt construite (fără ticker). Rulează: + .venv/bin/python gen/az_earnings.py +Înlocuiește în .md fiecare bloc ... cu output-ul +generatorului. Ca să schimbi o cifră, o schimbi aici și rulezi din nou. + +Excepția față de restul seriilor: bara de după raportare NU deschide la +close-ul precedentei — gap-ul de earnings e chiar subiectul. `series(..., +opens={i: open})` pune open-ul explicit doar pe barele de gap; mărimea +fiecărui gap afirmată în text are `assert`. + +`PChart` / `Seg` / `spread` sunt copiate din gen/az_pivoti.py (etichetele +nivelurilor în marginea dreaptă, împinse automat să nu se atingă). +""" +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 Candle, Chart, Level, Mark, MA # noqa: E402 + +MD = Path("/workspace/atm-curs-dl/summaries/08_ANALIZA_ZILNICA/09_earnings_si_optiuni.md") +GRAY, RED, GREEN, BLUE, ORANGE, PURPLE = "#777", "#c00", "#188a3e", "#1a5fb4", "#b06000", "#6a3d9a" +STYLE = dict(gap=15, body_w=9, left=44, width=620) +svgs = {} +FACTS = {} + + +# ---------------------------------------------------------------- layout (din az_pivoti.py) +@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" + 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 + + 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)) + top_price = max([c.h for c in self.candles] + [s.price for s in segs]) + self.levels = [Level(s.price, "", "none") for s in segs] + 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 = [MA(m.period, m.color, m.dash) for m in saved_ma] + 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'') + closes = [c.c for c in self.candles] + 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"] + out_lab += [(self._y(sum(closes[-m.period:]) / m.period) + 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)} + 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 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 y, s in out_lab: + if s.i1 == 0 and s.price == 0: + 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 + + +# ---------------------------------------------------------------- utilitare +def series(closes, start, wicks=None, opens=None, vols=None): + """ca from_closes, dar cu open explicit pe barele de gap (opens={i: open})""" + wicks, opens = wicks or {}, opens or {} + out, o = [], start + for i, c in enumerate(closes): + o = opens.get(i, o) + wu, wd = wicks.get(i, (0.3, 0.3)) + out.append(Candle(o, max(o, c) + wu, min(o, c) - wd, c, vol=(vols[i] if vols else None))) + o = c + return out + + +def px_ratio(ch, a, b, c): + """raportul (c-b)/(b-a) măsurat în pixeli, după render""" + return (ch._y(b) - ch._y(c)) / (ch._y(a) - ch._y(b)) + + +def f2(x): + return f"{x:.2f}" + + +def pct(a, b): + return (b - a) / a * 100 + + +T_D = "Exemplu construit (fără ticker) — daily" +T_W = "Exemplu construit (fără ticker) — weekly" + +# ================================================================ 1-2. gamble trade: același setup înainte vs după raportare +cl = [58.0, 57.2, 57.6, 56.5, 55.6, 56.0, 54.9, 54.0, 54.4, 53.2, 52.3, 52.7, 51.5, 50.4, # 0-13 downtrend + 49.8, # 14 picior 1 + 50.9, 51.6, 51.2, 50.5, # 15-18 + 50.7, # 19 hammer, picior 2 + 51.8, # 20 buy hammer (trigger) + 52.2, 52.0, # 21-22 (22 = raport after close) + 46.4, # 23 gap down + 46.9, 46.1, 45.5, 46.2, 46.8, 46.3, 45.9, # 24-30 + 45.95, # 31 doji (higher low) + 46.9, # 32 buy doji + 47.4, 48.1, 47.8, 48.6, 49.3, 49.0, 49.8, 50.5, 50.2, 51.0, 51.8] # 33-43 +wk = {19: (0.1, 0.95), 20: (0.2, 0.2), 23: (0.3, 0.3), 26: (0.3, 0.3), 31: (0.4, 0.45), 32: (0.2, 0.2)} +cds = series(cl, 58.6, wicks=wk, opens={23: 47.0}) +HM, TG, E, G = 19, 20, 22, 23 +assert cds[HM].c > cds[HM].o and (cds[HM].o - cds[HM].l) >= 3 * (cds[HM].c - cds[HM].o), "bara 19 nu e hammer" +assert abs(cds[14].l - cds[HM].l) <= 0.1, "double bottom: cele două picioare la același nivel" +assert cds[TG].c > cds[HM].h, "trigger: close peste high-ul hammer-ului" +entry = cds[TG].c +sl = round(min(c.l for c in cds[14:TG + 1]) - 0.10, 2) +risk = entry - sl +tp = round(entry + 2 * risk, 2) +assert cds[G].h < cds[E].l, "gap real: high-ul barei de după raport sub low-ul barei de raport" +gap_pct = pct(cds[E].c, cds[G].o) +assert -10 < gap_pct < -9, gap_pct +fill = cds[G].o # stop-ul se execută la open, nu la SL +loss_R = (entry - fill) / risk +assert fill < sl and abs(loss_R - 2.0) < 0.01, loss_R +assert max(c.h for c in cds[TG:E + 1]) < tp, "TP-ul nu e atins înainte de raport" +# fracțiunea: poziția la care pierderea în gap-ul maxim istoric (12%) rămâne 1R +HIST = 12.0 +frac = risk / (entry - cds[E].c * (1 - HIST / 100)) +assert abs(frac - 0.40) < 0.005 and abs((entry - cds[E].c * 0.88) / risk - 2.52) < 0.01, "textul: 40% din poziție, 2.5R la −12%" +FACTS["g"] = dict(entry=entry, sl=sl, risk=risk, tp=tp, gap=gap_pct, fill=fill, loss_R=loss_R, + e_close=cds[E].c, e_low=cds[E].l, g_high=cds[G].h, frac=frac) +print(f"D1 DB lows {f2(cds[14].l)}/{f2(cds[HM].l)} entry {f2(entry)} SL {f2(sl)} risc {f2(risk)} TP {f2(tp)}; " + f"raport close {f2(cds[E].c)} gap open {f2(fill)} ({gap_pct:.1f}%) -> {loss_R:.2f}R; fracție la -{HIST}%: {frac:.2f}") +ch = PChart(candles=cds[:31], + levels=[Level(tp, f"TP {f2(tp)} = 2R (neatins)", BLUE), + Level(entry, f"intrare {f2(entry)}", GREEN), + Level(sl, f"SL {f2(sl)}", RED), + Level(fill, f"executat la open {f2(fill)} = −{loss_R:.1f}R", PURPLE)], + marks=[Mark(6, "downtrend", GRAY, "above", dy=-6), + Mark(14, "picior 1", GRAY, "below", dy=2), + Mark(HM, "hammer", GRAY, "below", dy=2), + Mark(TG, "buy hammer", GREEN, "above", dy=-4), + Mark(E, "raport", ORANGE, "above", dy=-22), + Mark(G, f"gap {gap_pct:.1f}%", RED, "below", dy=4)], + scale=24, title=T_D, + caption="Setup bun, dar raportul vine peste 2 zile. Gap-ul sare peste stop: pierzi 2R, nu 1R.", **STYLE) +svg_ = ch.render() +assert abs(px_ratio(ch, sl, entry, tp) - 2.0) < 0.01 +svgs["gamble_nu"] = svg_ + +# 2. după raport: setup nou, gap-ul de deasupra devine țintă +DJ, BD = 31, 32 +hl = min(c.l for c in cds[28:BD + 1]) +low_post = min(c.l for c in cds[G:28]) +assert abs(cds[31].l - hl) < 1e-9 and hl > low_post, "higher low: minimul de după 28 peste minimul de după gap" +assert abs(cds[DJ].o - cds[DJ].c) <= 0.1 and cds[BD].c > cds[DJ].h, "buy doji" +entry2 = cds[BD].c +sl2 = round(hl - 0.10, 2) +risk2 = entry2 - sl2 +tp2 = round(cds[E].l, 2) # umplerea gap-ului: low-ul barei de raport +R2 = (tp2 - entry2) / risk2 +hit2 = next(i for i in range(BD + 1, len(cds)) if cds[i].h >= tp2) +assert min(c.l for c in cds[BD + 1:]) > sl2 +assert R2 >= 3, R2 +FACTS["g2"] = dict(entry=entry2, sl=sl2, risk=risk2, tp=tp2, R=R2, hl=hl, low=low_post, bars=hit2 - BD, + half=(cds[E].l + cds[G].h) / 2) +print(f"D2 low după gap {f2(low_post)} HL {f2(hl)} entry {f2(entry2)} SL {f2(sl2)} risc {f2(risk2)} " + f"TP gap {f2(tp2)} = {R2:.2f}R atins la {hit2} (+{hit2 - BD})") +ch = PChart(candles=cds, + levels=[Level(tp2, f"TP {f2(tp2)} = gap umplut = {R2:.1f}R", BLUE), + Level(entry2, f"intrare {f2(entry2)}", GREEN), + Level(sl2, f"SL {f2(sl2)}", RED)], + marks=[Mark(E, "raport", ORANGE, "above", dy=-4), + Mark(G, "gap", RED, "above", dy=-4), + Mark(26, "low", GRAY, "below", dy=2), + Mark(31, "higher low", GREEN, "below", dy=14), + Mark(BD, "buy doji", GREEN, "above", dy=-4), + Mark(hit2, "TP", BLUE, "above")], + scale=24, title=T_D, + caption="Același simbol. Aștepți raportul, apoi joci setup-ul format după el, cu stop care nu mai sare.", + **STYLE) +svg_ = ch.render() +assert abs(px_ratio(ch, sl2, entry2, tp2) - R2) < 0.01 +svgs["gamble_da"] = svg_ + +# ================================================================ 3-4. gap-up de earnings: pullback în gap +cl = [59.0, 59.4, 59.1, 59.8, 60.3, 60.0, 60.6, 61.1, 60.7, 61.2, 61.6, 61.2, 60.9, 61.5, 61.9, 61.6, 62.1, 61.8, # 0-17 + 62.0, # 18 raport after close + 68.2, # 19 gap up + 69.0, 69.8, 69.3, 70.4, # 20-23 continuare + 69.2, 68.0, 67.1, 66.0, 65.2, # 24-28 pullback + 65.6, # 29 hammer în gap + 66.9, # 30 trigger + 67.5, 68.4, 69.1, 68.7, 69.9, 70.8, 70.5, 71.6, 72.3, 72.0, 72.9] # 31-41 +wk = {19: (0.3, 0.3), 23: (0.3, 0.3), 28: (0.3, 0.3), 29: (0.1, 0.9), 30: (0.2, 0.2)} +vol = [40, 38, 42, 44, 41, 39, 43, 45, 40, 42, 44, 39, 37, 41, 43, 40, 45, 42, 48, + 150, 95, 88, 70, 76, 52, 47, 41, 38, 34, 44, 72, 55, 58, 50, 46, 57, 60, 48, 55, 52, 45, 50] +cds = series(cl, 58.7, wicks=wk, opens={19: 67.0}, vols=vol) +E, G, HM, TG = 18, 19, 29, 30 +gap_bot, gap_top = cds[E].h, cds[G].l +half = (gap_bot + gap_top) / 2 +gap_pct = pct(cds[E].c, cds[G].o) +assert gap_top > gap_bot and 8 < gap_pct < 8.2, gap_pct +assert vol[G] == max(vol), "gap-ul are cel mai mare volum" +assert all(vol[i] > vol[i + 1] for i in range(24, 28)), "pullback cu volum în scădere" +assert gap_bot < cds[HM].l < half, "hammer-ul intră sub jumătatea gap-ului, dar nu îl umple" +assert cds[TG].c > cds[HM].h +entry = cds[TG].c +sl = round(cds[HM].l - 0.20, 2) +risk = entry - sl +tp = round(entry + 2 * risk, 2) +peak = max(c.h for c in cds[G:HM]) +hit = next(i for i in range(TG + 1, len(cds)) if cds[i].h >= tp) +assert min(c.l for c in cds[TG + 1:]) > sl and tp > peak +FACTS["gp"] = dict(gap=gap_pct, bot=gap_bot, top=gap_top, half=half, entry=entry, sl=sl, risk=risk, tp=tp, + peak=peak, bars=hit - TG, hm=cds[HM].l, pre=cds[E].c, open=cds[G].o) +print(f"D3 raport close {f2(cds[E].c)} gap open {f2(cds[G].o)} (+{gap_pct:.2f}%) zona {f2(gap_bot)}-{f2(gap_top)} " + f"1/2 {f2(half)}; vârf {f2(peak)}; hammer low {f2(cds[HM].l)}; entry {f2(entry)} SL {f2(sl)} risc {f2(risk)} " + f"TP {f2(tp)} atins +{hit - TG}") +ch = PChart(candles=cds, + levels=[Level(tp, f"TP {f2(tp)} = 2R", BLUE), + Level(entry, f"intrare {f2(entry)}", GREEN), + Level(gap_top, f"sus gap {f2(gap_top)}", ORANGE), + Level(half, f"1/2 gap {f2(half)}", ORANGE, dash="2 3"), + Level(sl, f"SL {f2(sl)}", RED), + Level(gap_bot, f"jos gap {f2(gap_bot)}", ORANGE)], + marks=[Mark(E, "raport", ORANGE, "above", dy=-4), + Mark(G, f"gap +{gap_pct:.1f}%", GREEN, "above", dy=-34), + Mark(HM, "hammer în gap", GREEN, "below", dy=2), + Mark(hit, "TP", BLUE, "above")], + scale=18, vol_h=70, title=T_D, + caption="Nu cumperi gap-ul. Aștepți ca prețul să revină în el și să arate că e apărat.", **STYLE) +svg_ = ch.render() +assert abs(px_ratio(ch, sl, entry, tp) - 2.0) < 0.01 +svgs["gap_pullback_da"] = svg_ + +# 4. NU: cumpărat după ce „s-a dus" +CH = 23 +entry_n = cds[CH].c +sl_n = round(min(c.l for c in cds[CH - 2:CH + 1]) - 0.10, 2) +risk_n = entry_n - sl_n +stop_bar = next(i for i in range(CH + 1, len(cds)) if cds[i].l <= sl_n) +assert stop_bar - CH == 2, "textul: stop atins a doua zi după intrare" +dist_gap = pct(gap_top, entry_n) +FACTS["gpn"] = dict(entry=entry_n, sl=sl_n, risk=risk_n, dist=dist_gap, stop=stop_bar - CH) +print(f"D4 chase entry {f2(entry_n)} ({dist_gap:.1f}% peste sus gap) SL {f2(sl_n)} risc {f2(risk_n)} stop la +{stop_bar - CH}") +ch = PChart(candles=cds[:34], + levels=[Level(entry_n, f"intrare {f2(entry_n)} (după ce s-a dus)", PURPLE), + Level(sl_n, f"SL {f2(sl_n)}", RED), + Level(gap_top, f"sus gap {f2(gap_top)}", ORANGE), + Level(half, f"1/2 gap {f2(half)}", ORANGE, dash="2 3"), + Level(gap_bot, f"jos gap {f2(gap_bot)}", ORANGE)], + marks=[Mark(G, f"gap +{gap_pct:.1f}%", GREEN, "below", dy=2), + Mark(CH, "cumpărat aici", PURPLE, "above", dy=-4), + Mark(stop_bar, "stop", RED, "below", dy=2), + Mark(HM, "intrarea bună vine aici", GREEN, "below", dy=2)], + scale=18, vol_h=70, title=T_D, + caption="Același gap. Cine cumpără după 4 zile de urcare e scos de pullback-ul normal spre gap.", **STYLE) +svgs["gap_pullback_nu"] = ch.render() + +# ================================================================ 5-6. cădere pe rezultate bune +cl = [50.0, 50.8, 51.5, 51.1, 52.0, 52.8, 52.4, 53.3, 54.0, 53.6, # 0-9 uptrend + 52.9, 52.2, 51.7, # 10-12 pullback, swing low + 52.4, 53.2, 54.1, 54.8, 55.3, # 13-17 run-up pre-raport + 56.2, # 18 gap up, închide roșu + 54.8, 54.1, 53.4, 52.6, 52.0, # 19-23 cădere + 51.9, # 24 retest swing low + 52.5, 52.9, 52.3, # 25-27 + 52.1, # 28 picior 2 + 53.4, # 29 trigger peste neckline + 53.9, 54.5, 54.2, 55.0, 55.6, 55.3, 56.1, 56.6, 56.3, 57.0, 57.4, 57.9] # 30-39 +wk = {12: (0.3, 0.4), 18: (0.4, 0.3), 24: (0.2, 0.5), 26: (0.25, 0.3), 28: (0.2, 0.7), 29: (0.2, 0.2)} +vol = [40, 44, 46, 38, 45, 47, 39, 46, 48, 37, 42, 44, 45, 43, 48, 52, 55, 58, + 160, 120, 90, 80, 75, 70, 85, 55, 50, 45, 60, 80, 62, 58, 50, 60, 57, 48, 55, 52, 47, 50, 54, 51] +cds = series(cl, 49.6, wicks=wk, opens={18: 58.0}, vols=vol) +SWL, PR, G = 12, 17, 18 +gap_pct = pct(cds[PR].c, cds[G].o) +assert cds[G].l > cds[PR].h and 4.8 < gap_pct < 5.0, gap_pct +assert cds[G].c < cds[G].o, "bara de raport închide sub open: reversal în aceeași zi" +assert vol[G] == max(vol) +# NU: cumperi la open-ul gap-ului +entry_n = cds[G].o +sl_n = round(cds[PR].h - 0.10, 2) # sub high-ul de dinainte de raport: gap-ul umplut = idee moartă +risk_n = entry_n - sl_n +stop_bar = next(i for i in range(G + 1, len(cds)) if cds[i].l <= sl_n) +assert stop_bar == G + 1 +fall = pct(cds[G].h, min(c.l for c in cds[G:28])) +print(f"D5 pre close {f2(cds[PR].c)} high {f2(cds[PR].h)}; gap open {f2(entry_n)} (+{gap_pct:.2f}%) high {f2(cds[G].h)} " + f"close {f2(cds[G].c)}; SL {f2(sl_n)} risc {f2(risk_n)} stop la +1; cădere {fall:.1f}%") +swl = cds[SWL].l +ch = PChart(candles=cds[:27], + levels=[Level(entry_n, f"cumpărat la open {f2(entry_n)}", PURPLE), + Level(sl_n, f"SL {f2(sl_n)} (gap umplut)", RED), + Level(swl, f"swing low {f2(swl)}", GRAY)], + marks=[Mark(SWL, "swing low", GRAY, "below", dy=2), + Mark(G, "rezultate bune", GREEN, "above", dy=-4), + Mark(G + 1, "stop", RED, "below", dy=2), + Mark(24, "retest", GRAY, "below", dy=2)], + scale=24, vol_h=70, title=T_D, + caption=f"Gap +{gap_pct:.1f}% pe rezultate bune, închis roșu în aceeași zi. A doua zi gap-ul e umplut.", + **STYLE) +svgs["rezultate_bune_nu"] = ch.render() + +# 6. DA: retestul swing low-ului + double bottom +P2, TG = 28, 29 +neck = cds[26].h +assert abs(cds[24].l - swl) <= 0.15 and abs(cds[P2].l - cds[24].l) <= 0.15, "retest swing low + picior 2 la același nivel" +assert all(c.c <= neck for c in cds[24:TG]) and cds[TG].c > neck, "trigger: prima închidere peste neckline" +entry = cds[TG].c +sl = round(min(cds[24].l, cds[P2].l, swl) - 0.15, 2) +risk = entry - sl +tp = round(entry + 2 * risk, 2) +hit = next(i for i in range(TG + 1, len(cds)) if cds[i].h >= tp) +assert min(c.l for c in cds[TG + 1:]) > sl and tp < cds[G].o +FACTS["rb"] = dict(gap=gap_pct, open=entry_n, sl_n=sl_n, risk_n=risk_n, pre_h=cds[PR].h, g_close=cds[G].c, + g_high=cds[G].h, swl=swl, l24=cds[24].l, l28=cds[P2].l, neck=neck, entry=entry, sl=sl, + risk=risk, tp=tp, bars=hit - TG, fall=fall) +print(f"D6 swing low {f2(swl)} retest {f2(cds[24].l)} picior 2 {f2(cds[P2].l)} neck {f2(neck)} entry {f2(entry)} " + f"SL {f2(sl)} risc {f2(risk)} TP {f2(tp)} atins +{hit - TG}") +ch = PChart(candles=cds, + levels=[Level(tp, f"TP {f2(tp)} = 2R", BLUE), + Level(entry, f"intrare {f2(entry)}", GREEN), + Level(neck, f"neckline {f2(neck)}", ORANGE), + Level(sl, f"SL {f2(sl)}", RED)], + marks=[Mark(SWL, "swing low", GRAY, "below", dy=2), + Mark(G, "rezultate bune", GREEN, "above", dy=-4), + Mark(24, "picior 1", GRAY, "below", dy=2), + Mark(P2, "picior 2", GRAY, "below", dy=2), + Mark(TG, "trigger", GREEN, "above", dy=-4), + Mark(hit, "TP", BLUE, "above")], + scale=24, vol_h=70, title=T_D, + caption="Nu cumperi căderea. Aștepți retestul swing low-ului și un bottom confirmat.", **STYLE) +svg_ = ch.render() +assert abs(px_ratio(ch, sl, entry, tp) - 2.0) < 0.01 +svgs["rezultate_bune_da"] = svg_ + + +# ================================================================ 7-8. pattern-ul pre-earnings (weekly, 3 trimestre) +def quarter(base, up, drop, react): + """13 săptămâni: 9 de urcare, 3 de cădere pre-raport, raport; `react` = close după raport""" + rise = [round(base + up * (k + 1) / 9 + (0.4 if k % 3 == 1 else 0), 2) for k in range(9)] + top = rise[-1] + pre = [round(top * (1 - drop * (k + 1) / 3 / 100), 2) for k in range(3)] + return rise + pre, react + + +def pre_series(reacts): + closes, opens, E = [], {}, [] + base = 50.0 + for q, (up, drop, gp) in enumerate(reacts): + body, _ = quarter(base, up, drop, gp) + closes += body + E.append(len(closes) - 1) + if gp is None: + break + o = round(closes[-1] * (1 + gp / 100), 2) + opens[len(closes)] = o + closes.append(round(o + (0.6 if gp > 0 else -0.6), 2)) + base = closes[-1] + return series(closes, 49.6, opens=opens), E + + +reacts = [(4.0, 6.0, 9.0), (3.0, 6.0, 10.0), (3.0, 6.0, None)] +cds, E = pre_series(reacts) +assert len(cds) == 38, len(cds) +facts = [] +for q, e in enumerate(E): + drop = pct(cds[e - 3].c, cds[e].c) + assert -6.5 < drop < -5.5, drop + if q < 2: + g = pct(cds[e].c, cds[e + 1].o) + assert cds[e + 1].l > cds[e].h and g > 8, g + facts.append((drop, g)) + else: + facts.append((drop, None)) +FACTS["pre"] = facts +print("D7", [(f"{d:.1f}%", g and f"{g:.1f}%") for d, g in facts]) +ch = PChart(candles=cds, seps=[E[0] + 1, E[1] + 1], + marks=[Mark(E[0] - 2, f"{facts[0][0]:.0f}%", RED, "above", dy=-8), + Mark(E[0] + 1, f"E1 +{facts[0][1]:.0f}%", GREEN, "above", dy=-4), + Mark(E[1] - 2, f"{facts[1][0]:.0f}%", RED, "above", dy=-8), + Mark(E[1] + 1, f"E2 +{facts[1][1]:.0f}%", GREEN, "above", dy=-4), + Mark(E[2] - 2, f"{facts[2][0]:.0f}%", RED, "above", dy=-8), + Mark(E[2], "E3 ?", ORANGE, "below", dy=4)], + scale=9, title=T_W, + caption="Istoric: cădere înainte de raport, apoi gap up — de două ori. A treia oară nu e garantat.", + **STYLE) +svgs["pre_da"] = ch.render() + +reacts_n = [(4.0, 6.0, 9.0), (3.0, 6.0, -8.0), (6.0, 6.0, None)] +cds, E = pre_series(reacts_n) +fn = [] +for q, e in enumerate(E): + drop = pct(cds[e - 3].c, cds[e].c) + assert -6.5 < drop < -5.5, drop + g = pct(cds[e].c, cds[e + 1].o) if q < 2 else None + fn.append((drop, g)) +assert fn[1][1] < -7.5 and cds[E[1] + 1].h < cds[E[1]].l +FACTS["pre_n"] = fn +print("D8", [(f"{d:.1f}%", g and f"{g:.1f}%") for d, g in fn]) +ch = PChart(candles=cds, seps=[E[0] + 1, E[1] + 1], + marks=[Mark(E[0] + 1, f"E1 +{fn[0][1]:.0f}%", GREEN, "above", dy=-4), + Mark(E[1] - 2, f"{fn[1][0]:.0f}%", RED, "above", dy=-8), + Mark(E[1] + 1, f"E2 {fn[1][1]:.0f}%", RED, "below", dy=4), + Mark(E[2], "E3 ?", ORANGE, "below", dy=4)], + scale=9, title=T_W, + caption="Aceeași cădere pre-raport, dar la E2 a urmat gap down. Istoric amestecat: fără edge.", **STYLE) +svgs["pre_nu"] = ch.render() + +# ================================================================ 9. butterfly: bias din call/put, volatilitate mare +cl = [50.2, 49.8, 50.5, 50.1, 49.6, 50.3, 50.9, 50.4, 49.9, 50.6, 51.0, 50.5, 50.0, 49.7, 50.3, 50.8, 50.4, + 49.9, 50.2, 50.7, 50.3, 49.8, 50.1, 50.6, 50.2, 49.9, 50.0, # 0-26 range + 61.5, # 27 gap după raport + 62.3, 61.8, 62.6, 62.0, 62.9, 62.4] # 28-33 +cds = series(cl, 50.0, opens={27: 60.0}) +E, G = 26, 27 +K1, K2, K3 = 55.0, 60.0, 65.0 # aripa jos, corpul, aripa sus (completarea mea) +S = cds[G].c +move = pct(cds[E].c, S) +assert 22.5 < move < 23.5, move +fly = max(0.0, (K2 - K1) - abs(S - K2)) +call = max(0.0, S - K1) +assert K1 < S < K3 and abs(fly - 3.5) < 1e-9 and abs(call - 6.5) < 1e-9 +assert max(c.h for c in cds[:G]) < K1 - 3 +FACTS["fly"] = dict(pre=cds[E].c, S=S, move=move, K1=K1, K2=K2, K3=K3, fly=fly, call=call, open=cds[G].o) +print(f"D9 pre {f2(cds[E].c)} close după raport {f2(S)} (+{move:.1f}%); butterfly {K1}/{K2}/{K3} valorează {fly} din {K2 - K1}; call {K1} = {call}") +ch = PChart(candles=cds, + levels=[Level(K3, f"aripa sus {K3:.2f}", PURPLE), + Level(K2, f"corp butterfly {K2:.2f}", BLUE), + Level(K1, f"aripa jos {K1:.2f}", PURPLE)], + marks=[Mark(13, "range înainte de raport", GRAY, "above", dy=-8), + Mark(E, "call/put 3-4x", ORANGE, "below", dy=4), + Mark(G, f"+{move:.0f}%", GREEN, "below", dy=4)], + scale=12, pad_bot_px=20, title=T_D, + caption=f"Strike-urile sunt prețuri, deci se desenează. Payoff-ul nu: la {f2(S)} butterfly-ul valorează {fly:.2f} din 5.00.", + **STYLE) +svgs["butterfly"] = ch.render() + +# ================================================================ 10. condor: fără direcție, mișcare mai mică decât cea implicită +cl = [50.4, 50.9, 50.5, 49.8, 50.2, 50.8, 51.3, 50.7, 50.1, 49.6, 50.0, 50.6, 51.1, 50.6, 50.0, 49.5, 49.9, + 50.5, 51.0, 50.4, 49.9, 50.3, 50.8, 50.3, 49.8, 50.1, 50.0, # 0-26 range + 51.5, # 27 după raport + 51.2, 50.8, 51.3, 50.9, 51.4, 51.1] # 28-33 +cds = series(cl, 50.0, opens={27: 51.8}) +E, G = 26, 27 +EM = 7.0 # mișcarea implicită din prețul opțiunilor, % (completarea mea) +P_BUY, P_SELL, C_SELL, C_BUY = 44.0, 46.0, 54.0, 56.0 +move = pct(cds[E].c, cds[G].o) +assert 3.5 < move < 3.7, move +lo, hi = cds[E].c * (1 - EM / 100), cds[E].c * (1 + EM / 100) +assert P_SELL < lo < hi < C_SELL, "strike-urile vândute stau în afara mișcării implicite" +assert all(P_SELL < c.l and c.h < C_SELL for c in cds[G:]), "după raport prețul rămâne între strike-urile vândute" +FACTS["condor"] = dict(pre=cds[E].c, open=cds[G].o, move=move, EM=EM, lo=lo, hi=hi, + k=(P_BUY, P_SELL, C_SELL, C_BUY), hi_after=max(c.h for c in cds[G:])) +print(f"D10 pre {f2(cds[E].c)} open după raport {f2(cds[G].o)} (+{move:.1f}%); mișcare implicită ±{EM}% = {f2(lo)}-{f2(hi)}") +ch = PChart(candles=cds, + levels=[Level(C_BUY, f"call cumpărat {C_BUY:.2f}", PURPLE), + Level(C_SELL, f"call vândut {C_SELL:.2f}", BLUE), + Level(hi, f"+{EM:.0f}% implicit {f2(hi)}", GRAY, dash="2 3"), + Level(lo, f"−{EM:.0f}% implicit {f2(lo)}", GRAY, dash="2 3"), + Level(P_SELL, f"put vândut {P_SELL:.2f}", BLUE), + Level(P_BUY, f"put cumpărat {P_BUY:.2f}", PURPLE)], + marks=[Mark(13, "range, fără bias", GRAY, "above", dy=-8), + Mark(E, "raport", ORANGE, "above", dy=-20), + Mark(G, f"+{move:.1f}%", GREEN, "below", dy=10)], + scale=14, title=T_D, + caption=f"Piața plătea o mișcare de ±{EM:.0f}%; a venit +{move:.1f}%. Prețul rămâne între strike-urile vândute.", + **STYLE) +svgs["condor"] = ch.render() + +# ---------------------------------------------------------------- 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/09_earnings_si_optiuni.html b/summaries/08_ANALIZA_ZILNICA/09_earnings_si_optiuni.html new file mode 100644 index 0000000..afb20be --- /dev/null +++ b/summaries/08_ANALIZA_ZILNICA/09_earnings_si_optiuni.html @@ -0,0 +1,1586 @@ + + + + + +Analiză zilnică / #9 — Earnings și opțiuni + + + +

Analiză zilnică / #9 — Earnings și opțiuni

+

TLDR

+
    +
  • Setup tehnic bun + earnings în zilele următoare = gamble trade. Nu îl + joci direcțional. Rezultatul nu îl știe nimeni, iar gap-ul de după raport + sare peste stop: în exemplul de mai jos, un stop de 1R se execută la −2R.
  • +
  • Dacă totuși vrei expunere, butterfly sau condor, și numai dacă ai un + edge. Un edge folosit de el: raportul call/put de 3-4x în lanțul de + opțiuni ca bias spre upside.
  • +
  • Volatilitate implicită foarte mare → nu cumperi call simplu. Plătești + o primă umflată care se dezumflă după raport. Butterfly-ul costă puțin și + are riscul limitat.
  • +
  • Gap-up de earnings: nu cumperi după ce „s-a dus". Aștepți retestul în + gap sau la jumătatea gap-ului.
  • +
  • Cădere pe rezultate bune: nu cumperi căderea. Aștepți retestul swing + low-ului anterior și un pattern de bottom.
  • +
  • Cădere înainte de earnings, apoi explozie — pattern pe care îl vede des + (Nvidia), dar „nu înseamnă neapărat că se va întâmpla așa sută la sută". + Contează numai dacă simbolul l-a repetat la raportările trecute.
  • +
+
+

De ce urmărești calendarul de earnings

+

Analiza tehnică presupune că prețul se mișcă din ordine care se adună treptat: +stop-uri, intrări la niveluri, instituționali care cumpără în tranșe. La +raportare, peste noapte, toată lumea își reevaluează compania în același timp. +Piața se deschide direct la prețul nou, fără tranzacții la prețurile dintre. +De aici vin cele trei probleme:

+
    +
  • stop-ul nu te protejează: un stop e un ordin care devine ordin la piață + când prețul îl atinge; dacă prima tranzacție a zilei e cu 10% mai jos, acolo + se execută;
  • +
  • setup-ul nu mai contează: double bottom-ul, buy hammer-ul și MBT-10 au + fost citite pe o companie care, după raport, poate fi alta;
  • +
  • opțiunile sunt scumpe: vânzătorii de opțiuni știu că vine mișcarea și + o includ în preț (volatilitatea implicită, IV).
  • +
+

Ce decizie te ajută să iei:

+
    +
  • înainte de intrare: verifici data raportului. Earnings în zilele + următoare → nu intri direcțional (10.09, Oracle; 24.08, un FVG monthly bun + pe un simbol care raporta a doua zi);
  • +
  • ora raportului: pre-market sau after-close în aceeași zi schimbă riscul + (21.08). Pre-market: gap-ul apare la open-ul aceleiași zile. After-close: + ziua de tranzacționare trece normal, iar gap-ul vine a doua zi;
  • +
  • după raport: gap-ul devine un nivel de lucru — țintă de pullback (gap + up) sau țintă de umplut (gap down).
  • +
+
+

Termenii, o singură dată

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TermenCe înseamnă aici
earningsraportul trimestrial de rezultate al companiei
gamble tradetranzacție al cărei rezultat depinde de un eveniment (earnings), nu de edge-ul tehnic
gapspațiu fără tranzacții între două bare: low-ul barei de azi peste high-ul de ieri (gap up) sau high-ul de azi sub low-ul de ieri (gap down)
jumătate de gap (1/2 gap)mijlocul dintre marginea de jos și cea de sus a gap-ului
call / putopțiune care câștigă dacă prețul urcă (call) sau scade (put) peste/sub un preț fixat, strike
raport call/putcâte call-uri față de câte put-uri sunt în lanțul de opțiuni; 3-4x = bias spre upside
volatilitate implicită (IV)mișcarea pe care o „plătește" prețul opțiunilor; înainte de earnings crește, după raport cade brusc
butterflystructură pe trei strike-uri: câștig maxim dacă prețul ajunge exact la strike-ul din mijloc (corp), pierdere = prima plătită
condorstructură pe patru strike-uri: câștig dacă prețul rămâne într-un interval, pierdere limitată dacă iese
peak bottomcum numește el pattern-ul de bottom căutat la retest (double bottom, inverted H&S)
swing lowminimul unei corecții, confirmat de candelele din dreapta lui
+
+

1. Gamble trade: același setup, înainte și după raport

+
+

„ăsta este un gamble trade pentru că nu se știe cum va fi la earnings. +[…] probabil un butterfly dacă face sen și vedem un edge în tranzacție."

+
+

Exemplul din sesiune (10.09): Oracle, cu double bottom, buy hammer și MBT-10. +Un setup de manual, dar raporta pe 10.09. Mai jos, aceeași situație pe o +serie construită.

+

NU: intri înainte de raport

+ +

+ Exemplu construit (fără ticker) — daily + + TP 56.60 = 2R (neatins) + + intrare 51.80 + + SL 49.40 + + executat la open 47.00 = −2.0R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + downtrend + picior 1 + hammer + buy hammer + raport + gap -9.6% + Setup bun, dar raportul vine peste 2 zile. Gap-ul sare peste stop: pierzi 2R, nu 1R. +

+ + +
    +
  • Downtrend, apoi double bottom: picior 1 la 49.50, picior 2 la + 49.55 cu hammer.
  • +
  • Buy hammer la close 51.80 → intrare. SL 49.40, sub double + bottom (risc 2.40). TP 56.60 = 2R.
  • +
  • Două zile mai târziu vine raportul, after close. Close-ul zilei de raport: + 52.00.
  • +
  • A doua zi deschide la 47.00: gap −9.6%. Stop-ul de la 49.40 nu se + execută la 49.40, ci la primul preț existent, 47.00. Pierdere: 4.80 pe + acțiune = −2.0R, dublul riscului planificat.
  • +
+

Setup-ul nu a fost greșit. Riscul nu mai era cel calculat.

+

DA: aștepți raportul, apoi joci ce se formează după

+ +

+ Exemplu construit (fără ticker) — daily + + TP 51.70 = gap umplut = 3.1R + + intrare 46.90 + + SL 45.35 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + raport + gap + low + higher low + buy doji + TP + Același simbol. Aștepți raportul, apoi joci setup-ul format după el, cu stop care nu mai sare. +

+ + +
    +
  • După gap, prețul coboară până la 45.20, apoi face un higher low la + 45.45.
  • +
  • Doji, apoi buy doji la 46.90 → intrare. SL 45.35, sub higher low + (risc 1.55).
  • +
  • TP 51.70 = gap-ul umplut (low-ul zilei de raport): 3.1R, atins după + 11 zile.
  • +
+

Aici stop-ul chiar e 1R: nu mai există un eveniment programat care să-l +sară. Gap-ul de deasupra, care în diagrama NU era pierderea, devine +ținta (02.09: „un gap deasupra, cu buy hammer din suport, e țintă").

+

Dacă îl joci oricum: fracțiunea de poziție

+

Ideea lui e să nu îl joci direcțional. Dacă cineva vrea totuși acțiuni +înainte de raport, stop-ul nu mai poate stabili mărimea poziției: o face +mișcarea maximă la raportările trecute. În exemplu, dacă cel mai mare +gap istoric al simbolului e −12%:

+ + + + + + + + + + + + + + + + + + + + +
Poziție întreagăPoziție redusă
risc planificat (până la SL 49.40)2.40 / acțiune = 1R0.40 × 2.40 = 0.4R
pierdere la un gap de −12% de la 52.00 (open 45.76)6.04 / acțiune = 2.5R0.40 × 6.04 = 1.0R
+

La 40% din poziție, cel mai rău gap cunoscut te costă cât un stop normal. +Nu te protejează de un gap mai mare decât cel istoric. De aceea, pentru el, +varianta cu risc limitat e opțiunea (butterfly), nu acțiunea.

+
+

2. Gap-up de earnings: ținta e pullback-ul în gap

+
+

„eventual poate testează intera în GEP sau jumătate de GEP."

+
+

Exemplul din sesiune (10.09): Microsoft, gap-up la earnings — „de asta nu +m-aș arunca Microsoft acum".

+

De ce gap-ul atrage prețul înapoi: cine a vrut acțiunea înainte de raport a +cumpărat-o sub gap. Cine o vrea după raport și a ratat open-ul nu vrea să +plătească vârful, așa că pune ordine mai jos, în zona gap-ului. Când prețul +coboară acolo, găsește acei cumpărători. Dacă îi găsește, gap-ul e apărat și +ai un nivel concret pentru stop: sub zona apărată.

+

DA: retest la jumătatea gap-ului

+ +

+ Exemplu construit (fără ticker) — daily + + TP 72.50 = 2R + + intrare 66.90 + + sus gap 66.70 + + 1/2 gap 64.50 + + SL 64.10 + + jos gap 62.30 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + volum + raport + gap +8.1% + hammer în gap + TP + Nu cumperi gap-ul. Aștepți ca prețul să revină în el și să arate că e apărat. +

+ + +
    +
  • Raport after close, close 62.00. A doua zi open 67.00: gap +8.1%, + cu cel mai mare volum din serie. Gap-ul: între 62.30 (high-ul zilei de + raport) și 66.70 (low-ul zilei de gap). Jumătatea: 64.50.
  • +
  • Prețul urcă până la 70.70, apoi face pullback 5 zile, cu volum în + scădere: vânzările sunt luări de profit, nu distribuție.
  • +
  • Hammer în gap: low 64.30, sub jumătatea gap-ului, dar departe de + marginea de jos (62.30). Gap-ul nu e umplut.
  • +
  • Trigger: close 66.90, peste high-ul hammer-ului → intrare. SL 64.10, + sub hammer: dacă prețul trece sub el, jumătatea gap-ului nu mai e apărată. + Risc 2.80.
  • +
  • TP 72.50 = 2R, peste vârful de după gap (70.70). Atins după 9 zile.
  • +
+

NU: cumperi după ce „s-a dus"

+ +

+ Exemplu construit (fără ticker) — daily + + intrare 70.40 (după ce s-a dus) + + SL 68.60 + + sus gap 66.70 + + 1/2 gap 64.50 + + jos gap 62.30 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + volum + gap +8.1% + cumpărat aici + stop + intrarea bună vine aici + Același gap. Cine cumpără după 4 zile de urcare e scos de pullback-ul normal spre gap. +

+ + +

Același gap. După 4 zile de urcare, cineva cumpără la 70.40 — cu 5.5% +peste marginea de sus a gap-ului. Stop-ul logic e sub ultimele 3 bare, +68.60 (risc 1.80). Pullback-ul normal spre gap îl atinge a doua zi după +intrare. Prețul coboară apoi în gap exact cum era de așteptat, iar intrarea +bună (hammer-ul, 66.90) vine când el e deja scos.

+ + + + + + + + + + + + + + + + + + + + + +
Gap-up — DAGap-up — NU
retest în gap sau la 1/2 gappreț departe de gap („s-a dus")
pullback cu volum în scăderepullback cu volum mare: distribuție
trigger în gap (hammer, buy doji, MBT-10)gap umplut complet, close sub marginea de jos
+
+

3. Cădere pe rezultate bune

+
+

„A căzut la earnings, deși earnings-le arată bine. […] retestăm swing +low-ul ăsta de aici. Deci căutați un pattern de peak-bottom eventual."

+
+

De ce cade o acțiune când rezultatele sunt bune (explicația e a mea): +prețul de dinainte de raport conține deja așteptarea. Dacă acțiunea a urcat +în zilele dinainte, cei care au cumpărat pentru raport vând la open, oricât +de bune ar fi cifrele. La prețul gap-ului nu există destui cumpărători noi +care să le preia oferta, deci prețul coboară până îi găsește. Cei care au +cumpărat la open sunt acum în pierdere, iar stop-urile lor, puse sub gap, +se execută ca ordine de vânzare și împing prețul și mai jos.

+

NU: cumperi gap-ul

+ +

+ Exemplu construit (fără ticker) — daily + + cumpărat la open 58.00 + + SL 55.50 (gap umplut) + + swing low 51.30 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + volum + swing low + rezultate bune + stop + retest + Gap +4.9% pe rezultate bune, închis roșu în aceeași zi. A doua zi gap-ul e umplut. +

+ + +
    +
  • Uptrend cu swing low la 51.30, apoi run-up spre raport până la close + 55.30 (high 55.60).
  • +
  • Rezultate bune: open 58.00, gap +4.9%, high 58.40, dar ziua închide la + 56.20, sub open. Reversal-ul începe în aceeași zi.
  • +
  • Cine a cumpărat la open, cu SL 55.50 sub high-ul de dinainte de raport + (gap umplut = ideea moartă), e scos a doua zi: −1R.
  • +
  • De la high-ul zilei de raport până la retest, prețul cade 12%.
  • +
+

DA: retestul swing low-ului și bottom-ul

+ +

+ Exemplu construit (fără ticker) — daily + + TP 57.90 = 2R + + intrare 53.40 + + neckline 53.15 + + SL 51.15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + volum + swing low + rezultate bune + picior 1 + picior 2 + trigger + TP + Nu cumperi căderea. Aștepți retestul swing low-ului și un bottom confirmat. +

+ + +
    +
  • Căderea se oprește la 51.40, la 10 cenți de swing low-ul anterior + (51.30). Acolo sunt cumpărătorii care au apărat nivelul prima dată.
  • +
  • Revenire la 53.15 (neckline), apoi al doilea picior tot la 51.40: + double bottom.
  • +
  • Trigger: prima închidere peste neckline, 53.40 → intrare. SL 51.15, + sub ambele picioare și sub swing low: sub el, nivelul nu mai e apărat. + Risc 2.25.
  • +
  • TP 57.90 = 2R, atins după 12 zile. Deasupra, open-ul zilei de raport + (58.00) e rezistență: acolo cei prinși la open ies pe zero.
  • +
+
+

4. Cădere înainte de earnings, apoi explozie — cu rezervă

+
+

„Nvidia a picat înainte de earnings, vă spuneam că ăsta este un pattern +destul de frequent pe care îl vedem și după care e explozie, nu înseamnă +neapărat că se va întâmpla așa sută la sută"

+
+

Pe 21.08 a nuanțat: urcarea nu vine neapărat în ziua raportului, ci imediat +după. Nu e o regulă de intrare. Pe 25.08 l-a legat de un singur lucru: +simbolul trebuie să fi repetat pattern-ul la raportările anterioare. Și chiar +atunci, vorbește de o poziție pe opțiuni, nu de acțiuni.

+

DA (cu rezervă): pattern repetat la raportările trecute

+ +

+ Exemplu construit (fără ticker) — weekly + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -6% + E1 +9% + -6% + E2 +10% + -6% + E3 ? + Istoric: cădere înainte de raport, apoi gap up — de două ori. A treia oară nu e garantat. +

+ + +
    +
  • Trei trimestre pe weekly. Înainte de fiecare raport, −6% în 3 + săptămâni.
  • +
  • E1: gap +9%. E2: gap +10%.
  • +
  • Acum E3: aceeași cădere de −6%. Istoricul e de partea long-ului, dar două + trimestre nu fac o statistică. Dacă îl joci, îl joci ca gamble trade: + opțiuni cu risc limitat, sau fracțiunea de poziție din secțiunea 1.
  • +
+

NU: istoric amestecat

+ +

+ Exemplu construit (fără ticker) — weekly + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + E1 +9% + -6% + E2 -8% + E3 ? + Aceeași cădere pre-raport, dar la E2 a urmat gap down. Istoric amestecat: fără edge. +

+ + +

Aceeași cădere de −6% înainte de fiecare raport. La E1 a urmat +9%, la E2 +gap −8%. Pattern-ul nu s-a repetat, deci nu ai de ce să crezi că +funcționează la E3.

+ + + + + + + + + + + + + + + + + + + + + +
Pre-earnings — DA (cu rezervă)Pre-earnings — NU
același comportament la raportările anterioarefără istoric al pattern-ului pe simbol
cădere pre-raport acumistoric amestecat (o dată gap up, o dată gap down)
expunere cu risc limitat (opțiuni)poziție întreagă pe acțiuni înainte de raport
+
+

5. Opțiuni: butterfly și condor

+

Ce nu se poate desena aici și de ce. svg_candles desenează preț în +timp. Payoff-ul unei opțiuni (cât câștigi la fiecare preț de la expirare) e +alt grafic: pe orizontală prețul, pe verticală profitul, fără timp și fără +candele. Nu îl forțez într-o diagramă de preț. Ce se poate desena sunt +strike-urile, pentru că sunt prețuri: le pun ca niveluri pe scenariul de +preț pentru care alegi structura. Payoff-ul e dat în tabel, cu cifre.

+

Butterfly: bias din raportul call/put, volatilitate mare

+
+

„era de trei ori sau aproape de patru ori raportul col versus put. Pe +lanțul de opțiuni asta a fost și ideea pentru care am fost bias către +upside"

+
+

Exemplul din sesiune (03.09): Snowflake a urcat ~+23% după earnings. +Butterfly-ul a prins fill peste noapte. Un call simplu ar fi câștigat mai +mult, dar „m-ar fi prăjit volatilitatea": cu IV foarte mare, prima call-ului +e umflată, iar după raport IV cade. Dacă mișcarea nu e destul de mare, call-ul +pierde chiar dacă direcția a fost corectă.

+ +

+ Exemplu construit (fără ticker) — daily + + aripa sus 65.00 + + corp butterfly 60.00 + + aripa jos 55.00 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + range înainte de raport + call/put 3-4x + +23% + Strike-urile sunt prețuri, deci se desenează. Payoff-ul nu: la 61.50 butterfly-ul valorează 3.50 din 5.00. +

+ + +

Strike-urile sunt alese de mine, pe un preț construit (el nu le-a spus): +close înainte de raport 50.00, butterfly pe call-uri 55 / 60 / 65 +(cumperi un call 55, vinzi două call 60, cumperi un call 65). După raport +prețul închide la 61.50 (+23%).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
La expirare, preț 61.50Butterfly 55/60/65Call 55 simplu
valoare / acțiune65 − 61.50 = 3.50 (din maximum 5.00, atins exact la 60)61.50 − 55 = 6.50
costmic: vinzi două call-uri scumpe ca să le plătești pe cele cumpăratemare: plătești toată prima, umflată de IV
dacă IV cade după raportte afectează puțin: ai opțiuni atât cumpărate, cât și vândutepierzi o parte din primă chiar dacă prețul urcă
dacă prețul trece de 65valoare 0: pierzi primacâștig nelimitat
dacă prețul scadepierzi prima (mică)pierzi prima (mare)
+

Asta e alegerea lui: renunți la câștigul mare al call-ului și primești un +cost mic, cu risc limitat la prima plătită, pe o direcție pe care ai un +motiv s-o crezi (raportul call/put).

+

Condor: fără direcție, pariu că mișcarea e mai mică decât prețul ei

+

Pe 10.09 a pus condorul lângă butterfly, ca alternativă la un gamble trade, +fără să dea un exemplu. Varianta de mai jos e construcția mea.

+ +

+ Exemplu construit (fără ticker) — daily + + call cumpărat 56.00 + + call vândut 54.00 + + +7% implicit 53.50 + + −7% implicit 46.50 + + put vândut 46.00 + + put cumpărat 44.00 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + range, fără bias + raport + +3.6% + Piața plătea o mișcare de ±7%; a venit +3.6%. Prețul rămâne între strike-urile vândute. +

+ + +
    +
  • Range fără bias, raport după close. Prețul opțiunilor include o mișcare de + ±7%: 46.50 - 53.50. (O aproximezi din prețul straddle-ului la strike-ul + curent.)
  • +
  • Iron condor: vinzi put 46 și call 54, în afara mișcării implicite; + cumperi put 44 și call 56 ca protecție.
  • +
  • Raportul aduce +3.6% (open 51.80). Prețul rămâne între 46 și 54: ambele + opțiuni vândute expiră fără valoare, iar prima încasată rămâne a ta. IV cade + după raport, deci și înainte de expirare structura câștigă.
  • +
  • Dacă prețul trecea de 56 sau sub 44: pierdere maximă = 2.00 (lățimea + aripii) minus prima încasată. Nu mai mult, oricât de mare e gap-ul.
  • +
+

Tabel de citire

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ButterflyCondor (iron condor)Call / put simpluAcțiuni
cândai bias (call/put 3-4x) + IV foarte marenu ai bias; crezi că mișcarea va fi mai mică decât cea implicităai bias și IV normalăfără earnings în zilele următoare
ce cere de la IVmare: vinzi opțiunile scumpe din corpmare: vinzi prima umflată, care se dezumflă după raportmică: o cumperiirelevantă
câștigi dacăprețul ajunge lângă corpprețul rămâne între strike-urile vânduteprețul se mișcă mult în direcția tatrendul continuă
risc maximprima plătitălățimea aripii minus primaprima plătităgap-ul, peste stop
în exemplu3.50 din 5.00 la +23%toată prima la +3.6%6.50 la +23%−2R la gap −9.6%
+

Fără edge (raport call/put, istoric pre-earnings, mișcare implicită clar +exagerată), nicio structură nu transformă gamble trade-ul în trade: doar îi +limitează pierderea.

+
+

Gotchas

+
    +
  • Verifici data raportului înainte de setup, nu după. Un setup cu toate + confluențele (double bottom, buy hammer, MBT-10) nu contează dacă raportul + e în zilele următoare. Diagrama 1: stop de 1R, pierdere de 2R.
  • +
  • Direcția corectă nu ajunge cu IV foarte mare. Un call cumpărat scump + poate pierde chiar dacă prețul urcă. De aceea a ales butterfly, deși un call + ar fi câștigat mai mult la +23%.
    +

    „m-ar fi prăjit volatilitatea"

    +
    +
  • +
  • Nu arunca cu bani după gap. Diagrama gap-up NU: cumpărat la 70.40, + scos a doua zi; intrarea bună a venit la 66.90, în gap.
  • +
  • Pattern-ul pre-earnings rămâne pattern, nu regulă. Fără istoric pe + simbol nu există; cu istoric, rămâne gamble trade cu risc limitat.
  • +
  • Pe acțiuni scumpe sau volatile, opțiunile pot fi mai potrivite decât + acțiunile (10.09) — dar nici opțiunile nu iartă o direcție greșită: + opțiunile lui pe ON au mers prost când bottom-ul a mai făcut un picior + (04.09).
  • +
+
+

Surse

+

Din analiza zilnică (recoltele din harvest/):

+
    +
  • 21.08.2026 — earnings pre-market vs after-close; Nvidia: urcarea vine + imediat după raport, nu neapărat în ziua lui.
  • +
  • 24.08.2026 — FVG monthly bun, dar simbolul raporta a doua zi → NU.
  • +
  • 25.08.2026 — cădere înainte de earnings, apoi explozie; „nu sută la + sută"; contează istoricul simbolului.
  • +
  • 02.09.2026 — cădere la earnings deși rezultatele sunt bune → peak bottom + la retestul swing low-ului; gap-ul ca risc (sub preț) sau țintă (deasupra).
  • +
  • 03.09.2026 — raportul call/put 3-4x ca bias; butterfly în loc de call + simplu la volatilitate mare; Snowflake ~+23%.
  • +
  • 04.09.2026 — opțiunile pe ON care n-au mers: bottom-ul a mai făcut un + picior.
  • +
  • 10.09.2026 — earnings iminente = gamble trade, butterfly sau condor + doar cu edge (Oracle); pullback în gap / 1/2 gap după gap-up (Microsoft); + acțiunile scumpe se joacă în tranșe sau cu opțiuni.
  • +
+

Din curs: Volatilitatea, beta, ATR, VIX. +În același modul: Buy doji și strategia MICI +(earnings în zilele următoare scot MICI din joc), +Locul crimei și pullback.

+
+

Ce e completare a mea: toate prețurile și diagramele sunt construite. Din +curs vin regulile (gamble trade, butterfly/condor doar cu edge, call/put 3-4x, +evitarea call-ului simplu la IV mare, pullback în gap sau 1/2 gap, peak bottom +la retestul swing low-ului după căderea pe rezultate bune, pattern-ul +pre-earnings cu rezerva lui), exemplele numite (Oracle, Microsoft, Snowflake, +Nvidia, ON) și citatele. Ale mele sunt: mecanismul gap-ului peste stop și +executarea la open; calculul fracțiunii de poziție pe gap-ul istoric maxim; +stop-urile și țintele din exemple (sub hammer, gap umplut ca țintă, 2R); +explicația căderii pe rezultate bune; strike-urile butterfly-ului (55/60/65), +tot exemplul de condor, mișcarea implicită din straddle și tabelul de citire. +Varianta DA a pattern-ului pre-earnings nu e un semnal dat de el, e ilustrarea +condiției lui („a repetat la raportările anterioare").

+ + diff --git a/summaries/08_ANALIZA_ZILNICA/09_earnings_si_optiuni.md b/summaries/08_ANALIZA_ZILNICA/09_earnings_si_optiuni.md new file mode 100644 index 0000000..96e8ed5 --- /dev/null +++ b/summaries/08_ANALIZA_ZILNICA/09_earnings_si_optiuni.md @@ -0,0 +1,1435 @@ +# Analiză zilnică / #9 — Earnings și opțiuni + +## TLDR + +- **Setup tehnic bun + earnings în zilele următoare = gamble trade.** Nu îl + joci direcțional. Rezultatul nu îl știe nimeni, iar gap-ul de după raport + sare peste stop: în exemplul de mai jos, un stop de 1R se execută la −2R. +- Dacă totuși vrei expunere, **butterfly sau condor**, și numai dacă ai un + edge. Un edge folosit de el: **raportul call/put de 3-4x** în lanțul de + opțiuni ca bias spre upside. +- **Volatilitate implicită foarte mare → nu cumperi call simplu.** Plătești + o primă umflată care se dezumflă după raport. Butterfly-ul costă puțin și + are riscul limitat. +- **Gap-up de earnings:** nu cumperi după ce „s-a dus". Aștepți retestul în + gap sau la **jumătatea gap-ului**. +- **Cădere pe rezultate bune:** nu cumperi căderea. Aștepți retestul swing + low-ului anterior și un pattern de bottom. +- **Cădere înainte de earnings, apoi explozie** — pattern pe care îl vede des + (Nvidia), dar **„nu înseamnă neapărat că se va întâmpla așa sută la sută"**. + Contează numai dacă simbolul l-a repetat la raportările trecute. + +--- + +## De ce urmărești calendarul de earnings + +Analiza tehnică presupune că prețul se mișcă din ordine care se adună treptat: +stop-uri, intrări la niveluri, instituționali care cumpără în tranșe. La +raportare, peste noapte, toată lumea își reevaluează compania în același timp. +Piața se deschide direct la prețul nou, fără tranzacții la prețurile dintre. +De aici vin cele trei probleme: + +- **stop-ul nu te protejează**: un stop e un ordin care devine ordin la piață + când prețul îl atinge; dacă prima tranzacție a zilei e cu 10% mai jos, acolo + se execută; +- **setup-ul nu mai contează**: double bottom-ul, buy hammer-ul și MBT-10 au + fost citite pe o companie care, după raport, poate fi alta; +- **opțiunile sunt scumpe**: vânzătorii de opțiuni știu că vine mișcarea și + o includ în preț (volatilitatea implicită, IV). + +Ce decizie te ajută să iei: + +- **înainte de intrare**: verifici data raportului. Earnings în zilele + următoare → nu intri direcțional (10.09, Oracle; 24.08, un FVG monthly bun + pe un simbol care raporta a doua zi); +- **ora raportului**: pre-market sau after-close în aceeași zi schimbă riscul + (21.08). Pre-market: gap-ul apare la open-ul aceleiași zile. After-close: + ziua de tranzacționare trece normal, iar gap-ul vine a doua zi; +- **după raport**: gap-ul devine un nivel de lucru — țintă de pullback (gap + up) sau țintă de umplut (gap down). + +--- + +## Termenii, o singură dată + +| Termen | Ce înseamnă aici | +|---|---| +| **earnings** | raportul trimestrial de rezultate al companiei | +| **gamble trade** | tranzacție al cărei rezultat depinde de un eveniment (earnings), nu de edge-ul tehnic | +| **gap** | spațiu fără tranzacții între două bare: low-ul barei de azi peste high-ul de ieri (gap up) sau high-ul de azi sub low-ul de ieri (gap down) | +| **jumătate de gap (1/2 gap)** | mijlocul dintre marginea de jos și cea de sus a gap-ului | +| **call / put** | opțiune care câștigă dacă prețul urcă (call) sau scade (put) peste/sub un preț fixat, **strike** | +| **raport call/put** | câte call-uri față de câte put-uri sunt în lanțul de opțiuni; 3-4x = bias spre upside | +| **volatilitate implicită (IV)** | mișcarea pe care o „plătește" prețul opțiunilor; înainte de earnings crește, după raport cade brusc | +| **butterfly** | structură pe trei strike-uri: câștig maxim dacă prețul ajunge exact la strike-ul din mijloc (corp), pierdere = prima plătită | +| **condor** | structură pe patru strike-uri: câștig dacă prețul rămâne într-un interval, pierdere limitată dacă iese | +| **peak bottom** | cum numește el pattern-ul de bottom căutat la retest (double bottom, inverted H&S) | +| **swing low** | minimul unei corecții, confirmat de candelele din dreapta lui | + +--- + +## 1. Gamble trade: același setup, înainte și după raport + +> „ăsta este un gamble trade pentru că nu se știe cum va fi la earnings. +> […] probabil un butterfly dacă face sen și vedem un edge în tranzacție." + +Exemplul din sesiune (10.09): Oracle, cu double bottom, buy hammer și MBT-10. +Un setup de manual, dar raporta pe 10.09. Mai jos, aceeași situație pe o +serie construită. + +### NU: intri înainte de raport + + + + Exemplu construit (fără ticker) — daily + + TP 56.60 = 2R (neatins) + + intrare 51.80 + + SL 49.40 + + executat la open 47.00 = −2.0R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + downtrend + picior 1 + hammer + buy hammer + raport + gap -9.6% + Setup bun, dar raportul vine peste 2 zile. Gap-ul sare peste stop: pierzi 2R, nu 1R. + + + +- Downtrend, apoi **double bottom**: picior 1 la **49.50**, picior 2 la + **49.55** cu hammer. +- **Buy hammer** la close **51.80** → intrare. **SL 49.40**, sub double + bottom (risc 2.40). **TP 56.60 = 2R**. +- Două zile mai târziu vine raportul, after close. Close-ul zilei de raport: + **52.00**. +- A doua zi deschide la **47.00: gap −9.6%**. Stop-ul de la 49.40 nu se + execută la 49.40, ci la primul preț existent, **47.00**. Pierdere: 4.80 pe + acțiune = **−2.0R**, dublul riscului planificat. + +Setup-ul nu a fost greșit. Riscul nu mai era cel calculat. + +### DA: aștepți raportul, apoi joci ce se formează după + + + + Exemplu construit (fără ticker) — daily + + TP 51.70 = gap umplut = 3.1R + + intrare 46.90 + + SL 45.35 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + raport + gap + low + higher low + buy doji + TP + Același simbol. Aștepți raportul, apoi joci setup-ul format după el, cu stop care nu mai sare. + + + +- După gap, prețul coboară până la **45.20**, apoi face un **higher low la + 45.45**. +- Doji, apoi **buy doji la 46.90** → intrare. **SL 45.35**, sub higher low + (risc 1.55). +- **TP 51.70 = gap-ul umplut** (low-ul zilei de raport): **3.1R**, atins după + 11 zile. + +Aici stop-ul chiar e 1R: nu mai există un eveniment programat care să-l +sară. Gap-ul de deasupra, care în diagrama NU era pierderea, devine +**ținta** (02.09: „un gap deasupra, cu buy hammer din suport, e țintă"). + +### Dacă îl joci oricum: fracțiunea de poziție + +Ideea lui e să nu îl joci direcțional. Dacă cineva vrea totuși acțiuni +înainte de raport, stop-ul nu mai poate stabili mărimea poziției: o face +**mișcarea maximă la raportările trecute**. În exemplu, dacă cel mai mare +gap istoric al simbolului e −12%: + +| | Poziție întreagă | Poziție redusă | +|---|---|---| +| risc planificat (până la SL 49.40) | 2.40 / acțiune = 1R | 0.40 × 2.40 = 0.4R | +| pierdere la un gap de −12% de la 52.00 (open 45.76) | 6.04 / acțiune = **2.5R** | 0.40 × 6.04 = **1.0R** | + +La **40% din poziție**, cel mai rău gap cunoscut te costă cât un stop normal. +Nu te protejează de un gap mai mare decât cel istoric. De aceea, pentru el, +varianta cu risc limitat e opțiunea (butterfly), nu acțiunea. + +--- + +## 2. Gap-up de earnings: ținta e pullback-ul în gap + +> „eventual poate testează intera în GEP sau jumătate de GEP." + +Exemplul din sesiune (10.09): Microsoft, gap-up la earnings — „de asta nu +m-aș arunca Microsoft acum". + +De ce gap-ul atrage prețul înapoi: cine a vrut acțiunea înainte de raport a +cumpărat-o sub gap. Cine o vrea după raport și a ratat open-ul nu vrea să +plătească vârful, așa că pune ordine mai jos, în zona gap-ului. Când prețul +coboară acolo, găsește acei cumpărători. Dacă îi găsește, gap-ul e apărat și +ai un nivel concret pentru stop: sub zona apărată. + +### DA: retest la jumătatea gap-ului + + + + Exemplu construit (fără ticker) — daily + + TP 72.50 = 2R + + intrare 66.90 + + sus gap 66.70 + + 1/2 gap 64.50 + + SL 64.10 + + jos gap 62.30 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + volum + raport + gap +8.1% + hammer în gap + TP + Nu cumperi gap-ul. Aștepți ca prețul să revină în el și să arate că e apărat. + + + +- Raport after close, close **62.00**. A doua zi open **67.00: gap +8.1%**, + cu cel mai mare volum din serie. Gap-ul: între **62.30** (high-ul zilei de + raport) și **66.70** (low-ul zilei de gap). Jumătatea: **64.50**. +- Prețul urcă până la **70.70**, apoi face pullback 5 zile, **cu volum în + scădere**: vânzările sunt luări de profit, nu distribuție. +- **Hammer în gap**: low **64.30**, sub jumătatea gap-ului, dar departe de + marginea de jos (62.30). Gap-ul nu e umplut. +- Trigger: close **66.90**, peste high-ul hammer-ului → intrare. **SL 64.10**, + sub hammer: dacă prețul trece sub el, jumătatea gap-ului nu mai e apărată. + Risc 2.80. +- **TP 72.50 = 2R**, peste vârful de după gap (70.70). Atins după 9 zile. + +### NU: cumperi după ce „s-a dus" + + + + Exemplu construit (fără ticker) — daily + + intrare 70.40 (după ce s-a dus) + + SL 68.60 + + sus gap 66.70 + + 1/2 gap 64.50 + + jos gap 62.30 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + volum + gap +8.1% + cumpărat aici + stop + intrarea bună vine aici + Același gap. Cine cumpără după 4 zile de urcare e scos de pullback-ul normal spre gap. + + + +Același gap. După 4 zile de urcare, cineva cumpără la **70.40** — cu 5.5% +peste marginea de sus a gap-ului. Stop-ul logic e sub ultimele 3 bare, +**68.60** (risc 1.80). Pullback-ul normal spre gap îl atinge a doua zi după +intrare. Prețul coboară apoi în gap exact cum era de așteptat, iar intrarea +bună (hammer-ul, 66.90) vine când el e deja scos. + +| Gap-up — DA | Gap-up — NU | +|---|---| +| retest în gap sau la 1/2 gap | preț departe de gap („s-a dus") | +| pullback cu volum în scădere | pullback cu volum mare: distribuție | +| trigger în gap (hammer, buy doji, MBT-10) | gap umplut complet, close sub marginea de jos | + +--- + +## 3. Cădere pe rezultate bune + +> „A căzut la earnings, deși earnings-le arată bine. […] retestăm swing +> low-ul ăsta de aici. Deci căutați un pattern de peak-bottom eventual." + +De ce cade o acțiune când rezultatele sunt bune (explicația e a mea): +prețul de dinainte de raport conține deja așteptarea. Dacă acțiunea a urcat +în zilele dinainte, cei care au cumpărat pentru raport vând la open, oricât +de bune ar fi cifrele. La prețul gap-ului nu există destui cumpărători noi +care să le preia oferta, deci prețul coboară până îi găsește. Cei care au +cumpărat la open sunt acum în pierdere, iar stop-urile lor, puse sub gap, +se execută ca ordine de vânzare și împing prețul și mai jos. + +### NU: cumperi gap-ul + + + + Exemplu construit (fără ticker) — daily + + cumpărat la open 58.00 + + SL 55.50 (gap umplut) + + swing low 51.30 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + volum + swing low + rezultate bune + stop + retest + Gap +4.9% pe rezultate bune, închis roșu în aceeași zi. A doua zi gap-ul e umplut. + + + +- Uptrend cu **swing low la 51.30**, apoi run-up spre raport până la close + **55.30** (high 55.60). +- Rezultate bune: open **58.00, gap +4.9%**, high 58.40, dar ziua închide la + **56.20**, sub open. Reversal-ul începe în aceeași zi. +- Cine a cumpărat la open, cu **SL 55.50** sub high-ul de dinainte de raport + (gap umplut = ideea moartă), e scos **a doua zi**: −1R. +- De la high-ul zilei de raport până la retest, prețul cade **12%**. + +### DA: retestul swing low-ului și bottom-ul + + + + Exemplu construit (fără ticker) — daily + + TP 57.90 = 2R + + intrare 53.40 + + neckline 53.15 + + SL 51.15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + volum + swing low + rezultate bune + picior 1 + picior 2 + trigger + TP + Nu cumperi căderea. Aștepți retestul swing low-ului și un bottom confirmat. + + + +- Căderea se oprește la **51.40**, la 10 cenți de swing low-ul anterior + (51.30). Acolo sunt cumpărătorii care au apărat nivelul prima dată. +- Revenire la **53.15** (neckline), apoi al doilea picior tot la **51.40**: + double bottom. +- Trigger: prima închidere peste neckline, **53.40** → intrare. **SL 51.15**, + sub ambele picioare și sub swing low: sub el, nivelul nu mai e apărat. + Risc 2.25. +- **TP 57.90 = 2R**, atins după 12 zile. Deasupra, **open-ul zilei de raport + (58.00)** e rezistență: acolo cei prinși la open ies pe zero. + +--- + +## 4. Cădere înainte de earnings, apoi explozie — cu rezervă + +> „Nvidia a picat înainte de earnings, vă spuneam că ăsta este un pattern +> destul de frequent pe care îl vedem și după care e explozie, nu înseamnă +> neapărat că se va întâmpla așa sută la sută" + +Pe 21.08 a nuanțat: urcarea nu vine neapărat în ziua raportului, ci imediat +după. **Nu e o regulă de intrare.** Pe 25.08 l-a legat de un singur lucru: +simbolul trebuie să fi repetat pattern-ul la raportările anterioare. Și chiar +atunci, vorbește de o poziție pe opțiuni, nu de acțiuni. + +### DA (cu rezervă): pattern repetat la raportările trecute + + + + Exemplu construit (fără ticker) — weekly + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -6% + E1 +9% + -6% + E2 +10% + -6% + E3 ? + Istoric: cădere înainte de raport, apoi gap up — de două ori. A treia oară nu e garantat. + + + +- Trei trimestre pe weekly. Înainte de fiecare raport, **−6%** în 3 + săptămâni. +- E1: gap **+9%**. E2: gap **+10%**. +- Acum E3: aceeași cădere de −6%. Istoricul e de partea long-ului, **dar două + trimestre nu fac o statistică**. Dacă îl joci, îl joci ca gamble trade: + opțiuni cu risc limitat, sau fracțiunea de poziție din secțiunea 1. + +### NU: istoric amestecat + + + + Exemplu construit (fără ticker) — weekly + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + E1 +9% + -6% + E2 -8% + E3 ? + Aceeași cădere pre-raport, dar la E2 a urmat gap down. Istoric amestecat: fără edge. + + + +Aceeași cădere de −6% înainte de fiecare raport. La E1 a urmat +9%, la E2 +**gap −8%**. Pattern-ul nu s-a repetat, deci nu ai de ce să crezi că +funcționează la E3. + +| Pre-earnings — DA (cu rezervă) | Pre-earnings — NU | +|---|---| +| același comportament la raportările anterioare | fără istoric al pattern-ului pe simbol | +| cădere pre-raport acum | istoric amestecat (o dată gap up, o dată gap down) | +| expunere cu risc limitat (opțiuni) | poziție întreagă pe acțiuni înainte de raport | + +--- + +## 5. Opțiuni: butterfly și condor + +**Ce nu se poate desena aici și de ce.** `svg_candles` desenează preț în +timp. Payoff-ul unei opțiuni (cât câștigi la fiecare preț de la expirare) e +alt grafic: pe orizontală prețul, pe verticală profitul, fără timp și fără +candele. Nu îl forțez într-o diagramă de preț. Ce se poate desena sunt +**strike-urile**, pentru că sunt prețuri: le pun ca niveluri pe scenariul de +preț pentru care alegi structura. Payoff-ul e dat în tabel, cu cifre. + +### Butterfly: bias din raportul call/put, volatilitate mare + +> „era de trei ori sau aproape de patru ori raportul col versus put. Pe +> lanțul de opțiuni asta a fost și ideea pentru care am fost bias către +> upside" + +Exemplul din sesiune (03.09): Snowflake a urcat **~+23%** după earnings. +Butterfly-ul a prins fill peste noapte. Un call simplu ar fi câștigat mai +mult, dar „m-ar fi prăjit volatilitatea": cu IV foarte mare, prima call-ului +e umflată, iar după raport IV cade. Dacă mișcarea nu e destul de mare, call-ul +pierde chiar dacă direcția a fost corectă. + + + + Exemplu construit (fără ticker) — daily + + aripa sus 65.00 + + corp butterfly 60.00 + + aripa jos 55.00 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + range înainte de raport + call/put 3-4x + +23% + Strike-urile sunt prețuri, deci se desenează. Payoff-ul nu: la 61.50 butterfly-ul valorează 3.50 din 5.00. + + + +Strike-urile sunt alese de mine, pe un preț construit (el nu le-a spus): +close înainte de raport **50.00**, butterfly pe call-uri **55 / 60 / 65** +(cumperi un call 55, vinzi două call 60, cumperi un call 65). După raport +prețul închide la **61.50 (+23%)**. + +| La expirare, preț 61.50 | Butterfly 55/60/65 | Call 55 simplu | +|---|---|---| +| valoare / acțiune | 65 − 61.50 = **3.50** (din maximum 5.00, atins exact la 60) | 61.50 − 55 = **6.50** | +| cost | mic: vinzi două call-uri scumpe ca să le plătești pe cele cumpărate | mare: plătești toată prima, umflată de IV | +| dacă IV cade după raport | te afectează puțin: ai opțiuni atât cumpărate, cât și vândute | pierzi o parte din primă chiar dacă prețul urcă | +| dacă prețul trece de 65 | valoare 0: pierzi prima | câștig nelimitat | +| dacă prețul scade | pierzi prima (mică) | pierzi prima (mare) | + +Asta e alegerea lui: renunți la câștigul mare al call-ului și primești un +cost mic, cu risc limitat la prima plătită, pe o direcție pe care ai un +motiv s-o crezi (raportul call/put). + +### Condor: fără direcție, pariu că mișcarea e mai mică decât prețul ei + +Pe 10.09 a pus condorul lângă butterfly, ca alternativă la un gamble trade, +fără să dea un exemplu. Varianta de mai jos e construcția mea. + + + + Exemplu construit (fără ticker) — daily + + call cumpărat 56.00 + + call vândut 54.00 + + +7% implicit 53.50 + + −7% implicit 46.50 + + put vândut 46.00 + + put cumpărat 44.00 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + range, fără bias + raport + +3.6% + Piața plătea o mișcare de ±7%; a venit +3.6%. Prețul rămâne între strike-urile vândute. + + + +- Range fără bias, raport după close. Prețul opțiunilor include o mișcare de + **±7%**: 46.50 - 53.50. (O aproximezi din prețul straddle-ului la strike-ul + curent.) +- **Iron condor**: vinzi put 46 și call 54, **în afara** mișcării implicite; + cumperi put 44 și call 56 ca protecție. +- Raportul aduce **+3.6%** (open 51.80). Prețul rămâne între 46 și 54: ambele + opțiuni vândute expiră fără valoare, iar prima încasată rămâne a ta. IV cade + după raport, deci și înainte de expirare structura câștigă. +- Dacă prețul trecea de 56 sau sub 44: pierdere maximă = 2.00 (lățimea + aripii) minus prima încasată. Nu mai mult, oricât de mare e gap-ul. + +### Tabel de citire + +| | Butterfly | Condor (iron condor) | Call / put simplu | Acțiuni | +|---|---|---|---|---| +| **când** | ai bias (call/put 3-4x) + IV foarte mare | nu ai bias; crezi că mișcarea va fi mai mică decât cea implicită | ai bias și IV normală | fără earnings în zilele următoare | +| **ce cere de la IV** | mare: vinzi opțiunile scumpe din corp | mare: vinzi prima umflată, care se dezumflă după raport | mică: o cumperi | irelevantă | +| **câștigi dacă** | prețul ajunge lângă corp | prețul rămâne între strike-urile vândute | prețul se mișcă mult în direcția ta | trendul continuă | +| **risc maxim** | prima plătită | lățimea aripii minus prima | prima plătită | gap-ul, peste stop | +| **în exemplu** | 3.50 din 5.00 la +23% | toată prima la +3.6% | 6.50 la +23% | −2R la gap −9.6% | + +Fără edge (raport call/put, istoric pre-earnings, mișcare implicită clar +exagerată), nicio structură nu transformă gamble trade-ul în trade: doar îi +limitează pierderea. + +--- + +## Gotchas + +- **Verifici data raportului înainte de setup, nu după.** Un setup cu toate + confluențele (double bottom, buy hammer, MBT-10) nu contează dacă raportul + e în zilele următoare. Diagrama 1: stop de 1R, pierdere de 2R. +- **Direcția corectă nu ajunge cu IV foarte mare.** Un call cumpărat scump + poate pierde chiar dacă prețul urcă. De aceea a ales butterfly, deși un call + ar fi câștigat mai mult la +23%. + > „m-ar fi prăjit volatilitatea" +- **Nu arunca cu bani după gap.** Diagrama gap-up NU: cumpărat la 70.40, + scos a doua zi; intrarea bună a venit la 66.90, în gap. +- **Pattern-ul pre-earnings rămâne pattern, nu regulă.** Fără istoric pe + simbol nu există; cu istoric, rămâne gamble trade cu risc limitat. +- **Pe acțiuni scumpe sau volatile, opțiunile pot fi mai potrivite decât + acțiunile** (10.09) — dar nici opțiunile nu iartă o direcție greșită: + opțiunile lui pe ON au mers prost când bottom-ul a mai făcut un picior + (04.09). + +--- + +## Surse + +Din analiza zilnică (recoltele din `harvest/`): + +- **21.08.2026** — earnings pre-market vs after-close; Nvidia: urcarea vine + imediat după raport, nu neapărat în ziua lui. +- **24.08.2026** — FVG monthly bun, dar simbolul raporta a doua zi → NU. +- **25.08.2026** — cădere înainte de earnings, apoi explozie; „nu sută la + sută"; contează istoricul simbolului. +- **02.09.2026** — cădere la earnings deși rezultatele sunt bune → peak bottom + la retestul swing low-ului; gap-ul ca risc (sub preț) sau țintă (deasupra). +- **03.09.2026** — raportul call/put 3-4x ca bias; butterfly în loc de call + simplu la volatilitate mare; Snowflake ~+23%. +- **04.09.2026** — opțiunile pe ON care n-au mers: bottom-ul a mai făcut un + picior. +- **10.09.2026** — earnings iminente = gamble trade, butterfly sau condor + doar cu edge (Oracle); pullback în gap / 1/2 gap după gap-up (Microsoft); + acțiunile scumpe se joacă în tranșe sau cu opțiuni. + +Din curs: [Volatilitatea, beta, ATR, VIX](../03_MODUL_2/05_volatilitatea_beta_atr_vix.html). +În același modul: [Buy doji și strategia MICI](01_buy_doji_si_strategia_mici.html) +(earnings în zilele următoare scot MICI din joc), +[Locul crimei și pullback](03_locul_crimei_si_pullback.html). + +--- + +*Ce e completare a mea: toate prețurile și diagramele sunt construite. Din +curs vin regulile (gamble trade, butterfly/condor doar cu edge, call/put 3-4x, +evitarea call-ului simplu la IV mare, pullback în gap sau 1/2 gap, peak bottom +la retestul swing low-ului după căderea pe rezultate bune, pattern-ul +pre-earnings cu rezerva lui), exemplele numite (Oracle, Microsoft, Snowflake, +Nvidia, ON) și citatele. Ale mele sunt: mecanismul gap-ului peste stop și +executarea la open; calculul fracțiunii de poziție pe gap-ul istoric maxim; +stop-urile și țintele din exemple (sub hammer, gap umplut ca țintă, 2R); +explicația căderii pe rezultate bune; strike-urile butterfly-ului (55/60/65), +tot exemplul de condor, mișcarea implicită din straddle și tabelul de citire. +Varianta DA a pattern-ului pre-earnings nu e un semnal dat de el, e ilustrarea +condiției lui („a repetat la raportările anterioare").*