"""Diagramele pentru postarea autorului din 18.09.2026 (@YM, Dow futures). Sursa: trei capturi de ecran din platforma lui, in `docs/strategie/`, plus mesajele de pe WhatsApp. Recolta: `harvest/2026-09-18-autor.md`. Nivelurile sunt ale lui, citite din bara de stare a platformei si de pe axa: maxim 52.380, minim 52.147, ultimul pret 52.186, plecarea de la ~52.160. Structura barelor intre nivelurile alea e construita de mine, la scara - capturile n-au fiecare bara lizibila. Ticker real, pentru ca nivelurile sunt reale (regula din STYLE.md); legenda spune la fiecare diagrama ce e al lui si ce e construit. """ import sys; sys.path.insert(0, "/workspace/atm-curs-dl") from pathlib import Path from svg_candles import Chart, Level, Mark, MA, from_closes # ---------------------------------------------------------------- D1: ziua, pe 5 minute # urcare de la ~52.160 (03:00) la 52.380 (~10:00), apoi canal descendent pana la 52.186 closes = [52168, 52178, 52172, 52190, 52205, 52198, 52218, 52232, 52226, 52248, # urcare, volum in crestere 52262, 52255, 52274, 52290, 52284, 52302, 52316, 52309, 52328, 52340, # volum incepe sa scada 52352, 52344, 52362, 52356, 52370, 52364, 52376, 52368, 52374, 52358, # maximele noi, volum tot mai mic 52336, 52318, 52330, 52300, 52282, 52294, 52264, 52246, 52258, 52228, # canalul descendent 52210, 52222, 52196, 52186] # varfurile: maximul zilei 52.380 cade pe bara 26; minimul 52.147 pe bara 42 # tupla e (mecha de sus, mecha de jos); bara 26 e maximul zilei, 52.380 wicks = [(6, 6)] * 20 + [(7, 7), (6, 5), (6, 8), (5, 6), (6, 9), (5, 6), (4, 5), (2, 6), (4, 6), (4, 7)] \ + [(9, 5), (8, 5), (6, 8), (9, 5), (8, 5), (6, 7), (9, 4), (9, 4), (6, 7), (10, 4)] \ + [(9, 4), (6, 7), (14, 4), (9, 5)] # volumul: varf pe la barele 8-12 (07:30-08:00), apoi scade pe maximele noi = divergenta vols = [38, 42, 40, 48, 55, 52, 63, 71, 78, 84, 81, 76, 72, 68, 64, 61, 57, 54, 51, 48, 46, 43, 41, 39, 38, 36, 35, 34, 36, 44, 58, 62, 55, 68, 72, 64, 76, 81, 70, 88, 79, 71, 94, 83] cds = from_closes([float(c) for c in closes], wicks=[(float(a), float(b)) for a, b in wicks], vols=[float(v) for v in vols], start=52160.0) top = max(c.h for c in cds[20:30]) ultim = cds[-1].c vol_urcare = max(vols[5:15]) vol_varf = max(vols[22:30]) assert abs(top - 52380) < 2, top assert abs(ultim - 52186) < 2, ultim assert vol_varf < vol_urcare * 0.6, (vol_varf, vol_urcare) # 52.147 e minimul SESIUNII din bara de stare, nu al ferestrei desenate (01:30-14:30); # nu se poate plasa pe grafic din captura, deci nu apare pe el. print(f"D1 maxim {top:.0f} (al lui: 52.380), ultimul pret {ultim:.0f} (al lui: 52.186), " f"volum pe urcare {vol_urcare} -> pe maximele noi {vol_varf}") puncte = top - 52186 print(f"D1 miscare {puncte:.0f} puncte = {puncte / 52380 * 100:.2f}%, " f"{puncte * 5:.0f} $/contract la 5 $/punct; la un stop de 0.06% (~31 p) = {puncte / 31:.1f}R") d1 = Chart( candles=cds, levels=[Level(52380, "maxim 52.380", "#c00"), Level(52186, "ultimul pret 52.186", "#777")], marks=[Mark(26, "maxim nou, volum mai mic", "#c00"), Mark(38, "canal descendent", "#1a5fb4", "below")], mas=[MA(20, "#b06000", dash="4 3")], scale=1.0, gap=15, body_w=9, left=44, width=680, top=54, vol_h=70, vol_label="volum", title="@YM (Dow futures) — 5 min, 18.09.2026", caption="Ale lui: 52.380, 52.186 și citirea divergenței. Barele sunt construite de mine, la scară.") # ---------------------------------------------------------------- D2: maximul, pe 15 secunde # fereastra 09:40-10:10: maximul de 52.377, wedge-ul, ruperea, minimul de 52.330 c2 = [52362, 52366, 52361, 52369, 52364, 52371, 52367, 52373, 52369, 52375, # maximele noi 52371, 52373, 52369, 52371, 52367, 52369, 52365, 52367, 52363, 52365, # wedge: maxime tot mai jos 52361, 52355, 52358, 52349, 52342, 52346, 52338, 52333, 52336, 52330] # ruperea w2 = [(2, 1)] * 9 + [(1, 2)] + [(2, 1)] * 10 + [(3, 2), (4, 2), (2, 3), (4, 2), (5, 2), (2, 3), (4, 2), (4, 2), (2, 3), (3, 2)] v2 = [52, 48, 45, 43, 40, 38, 36, 34, 32, 30, 29, 27, 26, 24, 23, 22, 21, 20, 19, 18, 44, 51, 43, 58, 64, 49, 68, 72, 55, 61] cds2 = from_closes([float(c) for c in c2], wicks=[(float(a), float(b)) for a, b in w2], vols=[float(v) for v in v2], start=52358.0) top2 = max(c.h for c in cds2[:12]) low2 = min(c.l for c in cds2[24:]) assert abs(top2 - 52377) < 2, top2 assert abs(low2 - 52330) < 3, low2 assert v2[19] < v2[0] * 0.5, (v2[0], v2[19]) print(f"D2 maxim {top2:.0f} (al lui: 52.377), minim {low2:.0f} (al lui: ~52.330), " f"volum {v2[0]} -> {v2[19]} in wedge") d2 = Chart( candles=cds2, levels=[Level(52377, "52.377", "#c00"), Level(52330, "52.330 dupa rupere", "#1a5fb4")], marks=[Mark(20, "M2D MAPS trece pe roșu", "#6a3d9a", "below", dy=52), Mark(27, "ruperea", "#188a3e", "below")], scale=5.0, gap=15, body_w=9, left=44, width=680, top=48, vol_h=70, vol_label="volum", title="@YM — 15 secunde, 09:40-10:10, 18.09.2026", caption="Ale lui: 52.377, ruperea spre 52.330 și săgeata spre banda M2D MAPS. Barele sunt ale mele.") # ---------------------------------------------------------------- substitutie in .md import re # noqa: E402 MD = Path("/workspace/atm-curs-dl/summaries/08_ANALIZA_ZILNICA/05_volum.md") if MD.exists(): md = MD.read_text(encoding="utf-8") for name, svg in [("ym_zi", d1.render()), ("ym_15sec", d2.render())]: assert re.search(rf"", md), f"marcatorul {name} lipseste din .md" md = re.sub(rf"(?:\n)?\n", lambda _m, name=name, svg=svg: f"\n{svg}\n", md, flags=re.S) MD.write_text(md, encoding="utf-8") print("scris", MD)