From c198cd0a7b425248e798949412c951c575bca871 Mon Sep 17 00:00:00 2001 From: Claude Agent Date: Fri, 2 Oct 2026 02:35:51 +0000 Subject: [PATCH] MODUL 5: 24 de reparatii pe cele doua strategii, dupa verificare Opt erau blocante, adica un cititor ar fi executat gresit pe cont: - 56% era legat de o intrare la 133 care da de fapt 35,3%; cifra se propaga in dimensionarea pozitiei. Acum spune ca 56% e rostit separat si ca raportul nu se verifica. - "2/3 taie jumatate din risc" era fals (29,3% vs 35,3%). - definitia lui buy doji se contrazicea cu regula de 4 luni din acelasi document. - diagrama de trail arata stopul deasupra pretului: liniile traversau tot graficul, deci in stanga stateau peste candele. Acum fiecare porneste din swing low-ul care o declanseaza, cu cele patru swing low-uri marcate. - linia gatului era data ca "media celor doua varfuri", ceea ce nu reproduce 63.00 pe propriul desen; e din interiorul gatului. - singura regula mecanica de "nu intra" nu era desenata cu mecanismul ei: panoul de volum avea bare egale de la o baza, in loc de histograma cu semn. - "SL minim 54.17" se citea invers decat intelege textul: e pretul cel mai sus permis, nu stopul cel mai stramt. - lectura "TP2 vine inaintea lui TP1" era prezentata ca geometrie in doua diagrame, desi fraza-sursa e neinteligibila si sursa sprijina la fel de bine varianta in care se recalculeaza si TP si SL. Acum e marcata ca lectura chiar acolo unde e folosita, cu varianta alternativa alaturi. svg_candles are trei adaugiri optionale (Level.i0, Level.label_dy, Chart.vol_zero) cerute de reparatiile de mai sus; selftest-ul trece si diagramele existente nu se schimba daca nu sunt regenerate. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01ThN7ixZrowca8aTGrK1MUJ --- gen/strategia_7_micis.py | 140 +++- gen/strategia_8_dhrt.py | 82 ++- .../06_MODUL_5/04_strategia_7_micis.html | 693 +++++++++--------- summaries/06_MODUL_5/04_strategia_7_micis.md | 693 +++++++++--------- summaries/06_MODUL_5/05_strategia_8_dhrt.html | 234 +++--- summaries/06_MODUL_5/05_strategia_8_dhrt.md | 233 +++--- svg_candles.py | 54 +- 7 files changed, 1184 insertions(+), 945 deletions(-) diff --git a/gen/strategia_7_micis.py b/gen/strategia_7_micis.py index e4e8bc1..a8706c9 100644 --- a/gen/strategia_7_micis.py +++ b/gen/strategia_7_micis.py @@ -49,6 +49,28 @@ def hi(cds, a, b): return round(max(c.h for c in cds[a:b + 1]), 2) +def run_desc(cds, end): + """Câte bare consecutive, terminând cu `end`, au high-uri descrescătoare. + + Regula strategiei e „5-8 candele"; cititorul numără pe desen după + high-uri (`04_6_...txt:142`), deci eticheta zonei se calculează de aici, + nu se scrie de mână. Altfel desenul ajunge să încalce propria regulă. + """ + k = 1 + while end - k >= 0 and cds[end - k].h > cds[end - k + 1].h: + k += 1 + return k + + +def zona_downtrend(cds, end, color="#c00"): + """Zone(…) peste run-ul descrescător care se termină la bara `end`.""" + n = run_desc(cds, end) + assert 5 <= n <= 8, \ + f"downtrend-ul desenat are {n} candele cu high-uri descrescătoare, " \ + f"iar strategia cere 5-8" + return Zone(end - n + 1, end, f"downtrend {n} candele", color) + + def deco(ch, name, distante=(), intregi=()): """Randează graficul, verifică etichetele, salvează. @@ -90,8 +112,8 @@ CONSTRUIT = "Exemplu construit (fără ticker), la scară. R-urile sunt ale mele # =========================================================== seria construită # Un singur trade construit, folosit de trei diagrame (harta, pasul 1, țintele), # ca să nu se schimbe cifrele de la o secțiune la alta. -CL = ([64.00, 63.00, 62.00, 61.00, 58.50, 56.00, 54.00] # 0-6 context - + [52.00, 50.00, 48.00, 45.50, 43.00, 41.50, 39.90] # 7-13 downtrend, 7 bare +CL = ([64.00, 65.80, 64.30, 65.90, 64.20, 62.80, 64.00] # 0-6 consolidare + + [60.50, 57.00, 53.50, 50.00, 46.50, 43.00, 39.90] # 7-13 downtrend, 7 bare + [40.00] # 14 doji + [45.00] # 15 marubozu de trigger + [43.20, 42.60] # 16-17 pullback-ul @@ -112,6 +134,8 @@ assert (DOJI_LO, DOJI_HI, H_DOJI) == (38.00, 42.00, 4.00), (DOJI_LO, DOJI_HI) assert abs(CDS[14].c - CDS[14].o) <= 0.10 * H_DOJI, "candela 14 nu e doji" assert CDS[15].c > DOJI_HI, "trigger-ul nu închide peste high-ul doji-ului" assert lo(CDS, 7, 13) < lo(CDS, 0, 6), "downtrend-ul numărat nu coboară" +assert run_desc(CDS, 13) == 7, \ + f"înaintea doji-ului trebuie 7 bare cu high descrescător, sunt {run_desc(CDS, 13)}" TRIG_HI, TRIG_LO = hi(CDS, 15, 15), lo(CDS, 15, 15) H_TRIG = round(TRIG_HI - TRIG_LO, 2) # 5.00 @@ -138,17 +162,20 @@ deco(Chart( Level(E1, f"intrare 1/3 la close {E1:.2f}", "#188a3e"), Level(E2, f"limit 1/3 la {E2:.2f}", "#188a3e", label_at="left"), Level(E3, f"limit 1/3 la {E3:.2f}", "#188a3e", label_at="left"), - Level(MED, f"preț mediu {MED:.2f}", "#6a3d9a"), - Level(TP2, f"TP2 {TP2:.2f}", "#1a5fb4"), + # prețul mediu există abia după ce s-a umplut a treia tranșă: + # linia pornește de acolo, deci nu mai taie eticheta limitului + Level(MED, f"preț mediu {MED:.2f}", "#6a3d9a", i0=17), + Level(TP2, f"TP2 {TP2:.2f} — lectura mea", "#1a5fb4", i0=17), Level(TP1, f"TP1 {TP1:.2f}", "#1a5fb4")], marks=[Mark(14, "doji", "#b06000", "below", dy=14), Mark(15, "buy doji", "#188a3e", dy=-6), - Mark(17, "se umplu limiturile", "#188a3e", "below", dy=44), + Mark(5, "consolidare", "#888", "below"), + Mark(17, "se umplu limiturile", "#188a3e", "below", dy=0), Mark(23, "ieși, nu aștepți", "#1a5fb4", dy=-8)], - zones=[Zone(7, 13, "downtrend 7 candele", "#c00"), + zones=[zona_downtrend(CDS, 13), Zone(15, 17, "fereastra de intrare", "#188a3e")], - mas=[MA(20, "#b06000", dash="4 3", text="SMA-20")], - scale=18.0, gap=17, body_w=9, left=52, width=700, vol_h=70, + mas=[MA(20, "#b06000", dash="4 3")], + scale=18.0, gap=17, body_w=9, left=52, width=700, top=76, vol_h=70, vol_label="volum", title="MICIS, tot trade-ul — weekly (exemplu construit)", caption=CONSTRUIT), "harta", distante=(R1, R2, H_DOJI)) @@ -167,7 +194,7 @@ deco(Chart( levels=[Level(PIV, f"pivot quarterly {PIV:.2f}", "#b06000", label_at="left"), Level(DOJI_LO, f"low-ul doji-ului {DOJI_LO:.2f}", "#6a3d9a")], marks=[Mark(25, "doji", "#b06000", dy=-18)], - zones=[Zone(18, 24, "downtrend 7 candele", "#c00")], + zones=[zona_downtrend(cds2, 24)], mas=[MA(20, "#b06000", dash="4 3", text="SMA-20")], scale=8.0, gap=17, body_w=9, left=52, width=700, vol_h=70, vol_label="volum", title="Pasul 1, DA — doji weekly pe pivotul quarterly", @@ -179,18 +206,26 @@ cl3 = (ramp(41.00, 47.00, 6) + [46.50, 47.50] + ramp(47.50, 53.00, 6) + [52.40, 53.20] + ramp(53.20, 59.00, 6) + [58.60, 59.40, 58.80] + [59.00] + [58.40, 57.00, 55.00]) wk3 = [(0.35, 0.35)] * 25 + [(1.60, 1.50)] + [(0.40, 0.40)] * 3 -vl3 = vols(29, 48, 12, i22=38, i23=34, i24=30, i25=26, i26=34, i27=44, i28=52) +# volumul trebuie să scadă pe TOT uptrend-ul, nu doar pe ultimele bare: +# eticheta „volum în scădere" se citește peste zona verde, nu peste 4 bare +vl3 = ([50.0, 52.0, 48.0, 54.0, 50.0, 52.0] + + [62.0, 60.0, 58.0, 56.0, 54.0, 52.0, 50.0, 48.0, 46.0, 44.0, + 42.0, 40.0, 38.0, 36.0, 33.0, 30.0, 28.0, 26.0, 25.0, 24.0] + + [40.0, 56.0, 68.0]) cds3 = from_closes(cl3, wicks=wk3, vols=vl3, start=40.00) assert abs(cds3[25].c - cds3[25].o) <= 0.10 * (cds3[25].h - cds3[25].l), \ "candela 25 nu e doji" assert cds3[25].c > cds3[0].c and hi(cds3, 25, 25) == hi(cds3, 0, 28), \ "doji-ul trebuie să cadă în vârful unui uptrend" assert vl3[25] == min(vl3), "volumul trebuie să fie cel mai mic la doji" +assert all(vl3[i] > vl3[i + 1] for i in range(6, 25)), \ + "barele de volum trebuie să scadă pe toată zona de uptrend, cât ține eticheta" +assert vl3[26] < vl3[27] < vl3[28], "volumul trebuie să revină pe corecție" deco(Chart( candles=cds3, marks=[Mark(25, "doji aici: după uptrend", "#c00", dy=-10), - Mark(22, "volum în scădere", "#c00", "below", dy=24), - Mark(28, "urmează corecția", "#c00", "below", dy=14), + Mark(16, "volum în scădere pe tot uptrend-ul", "#c00", "below", dy=24), + Mark(28, "urmează corecția, cu volum", "#c00", "below", dy=14), Mark(12, "uptrend", "#188a3e", "below", dy=38)], zones=[Zone(6, 24, "", "#188a3e")], mas=[MA(20, "#b06000", dash="4 3", text="SMA-20")], @@ -222,9 +257,12 @@ assert lo(JC, 14, 14) <= J_E2 and lo(JC, 15, 15) <= J_E3, "ladder-ul nu se umple deco(Chart( candles=JC, levels=[Level(J_E1, f"intrare 1/3 la close {J_E1:.2f}", "#188a3e"), + # limiturile există abia după close-ul candelei de trigger, deci + # liniile pornesc de la ea: altfel taie eticheta de dedesubt Level(J_E2, f"limit 1/3 la {J_E2:.2f} = 1/3 din marubozu", "#188a3e", - label_at="left"), - Level(J_E3, "limit 1/3 la 1/2 din marubozu", "#6a3d9a")], + i0=13), + Level(J_E3, "limit 1/3 la 1/2 din marubozu", "#6a3d9a", + label_at="left")], marks=[Mark(12, "doji", "#b06000", "below", dy=14), Mark(13, "marubozu de trigger", "#188a3e", dy=-26), Mark(15, "pullback-ul umple ambele limituri", "#188a3e", "below", dy=38)], @@ -254,7 +292,9 @@ assert lo(AC, 16, 26) > A_E2, "ladder-ul NU trebuie să se umple pe acest desen" deco(Chart( candles=AC, levels=[Level(A_E1, f"intrare 1/3 la close {A_E1:.2f}", "#188a3e"), - Level(A_E2, f"limit 1/3 la {A_E2:.2f} — niciodată atins", "#c00", + # înălțimea candelei nu e rostită pe AMD, deci nivelul de 1/3 nu + # primește cifră — aceeași regulă ca pe JNJ + Level(A_E2, "limit 1/3 — niciodată atins", "#c00", label_at="left"), Level(180.00, "unde a ajuns: 180", "#1a5fb4")], marks=[Mark(14, "doji", "#b06000", "below", dy=14), @@ -273,7 +313,11 @@ N_CL = ([20.00, 23.50, 27.00, 25.00, 31.00, 38.00, 45.00, 42.00, 50.00, 55.00, + [100.50] # 21 doji + [133.00] # 22 marubozu de trigger + [141.00, 152.00, 164.00, 175.00, 182.00]) # 23-27 spre 182 -N_WK = ([(1.50, 1.50)] * 16 + [(3.00, 3.00)] * 5 + [(13.00, 14.50)] +# bara 16 e vârful: fitil de respingere deasupra, ca high-ul ei să fie +# cel mai sus din downtrend și numărătoarea după high-uri să dea 5, cât +# spune eticheta +N_WK = ([(1.50, 1.50)] * 16 + [(5.00, 3.00)] + [(3.00, 3.00)] * 4 + + [(13.00, 14.50)] + [(0.50, 1.50)] + [(2.00, 2.00)] * 5) N_VL = vols(28, 46, 12, i19=66, i20=78, i21=84, i22=104, i23=86, i24=80) NC = from_closes(N_CL, wicks=N_WK, vols=N_VL, start=19.00) @@ -294,7 +338,7 @@ deco(Chart( Level(182.00, "ținta rostită: 182", "#1a5fb4")], marks=[Mark(21, "doji monthly, înălțime 28", "#b06000", "below", dy=16), Mark(22, "marubozu de trigger", "#188a3e", dy=-70)], - zones=[Zone(16, 20, "downtrend 5 candele", "#c00")], + zones=[zona_downtrend(NC, 20)], mas=[MA(20, "#b06000", dash="4 3", text="SMA-20")], scale=2.4, gap=19, body_w=10, left=58, width=700, top=60, vol_h=70, vol_label="volum", title="Pasul 3, stopul — NVDA monthly", @@ -312,18 +356,18 @@ deco(Chart( candles=cds4, levels=[Level(SL, f"SL {SL:.2f}", "#c00", label_at="left"), Level(MED, f"preț mediu {MED:.2f}", "#6a3d9a"), - Level(E1, f"intrare 1 la {E1:.2f}", "#188a3e"), + Level(E1, f"intrare 1/3 la {E1:.2f}", "#188a3e"), Level(TP2, f"TP2 {TP2:.2f}", "#1a5fb4"), Level(TP1, f"TP1 {TP1:.2f}", "#1a5fb4")], arrows=[Arrow(10, f"TP2 = 1R pe medie ({R2:.2f})", price=TP2, where="left", - color="#1a5fb4", dx=-6), + color="#1a5fb4", dx=-6, dy=-16), Arrow(12, f"TP1 = 1R pe prima tranșă ({R1:.2f})", price=TP1, where="above", color="#1a5fb4", dy=-10)], mas=[MA(20, "#b06000", dash="4 3", text="SMA-20")], scale=13.0, gap=28, body_w=14, left=60, width=700, top=56, title="Pasul 4, cele două ținte — weekly (exemplu construit)", - caption="Mediind în jos, 1R se scurtează: TP2 vine înaintea lui TP1. " - "R-urile sunt ale mele."), + caption="Lectura mea: mediind în jos, TP2 vine înaintea lui TP1. " + "Fraza-sursă e neinteligibilă aici."), "pasul4_tinte", distante=(R1, R2)) # --------------------------------------------------- 8. pasul 5 — trail-ul @@ -334,23 +378,37 @@ cl5 = (ramp(44.00, 50.00, 5) + [49.20, 48.60, 49.40] # 0-7 trail 1 wk5 = [(0.40, 0.40)] * 30 vl5 = vols(30, 50, 12) cds5 = from_closes(cl5, wicks=wk5, vols=vl5, start=43.00) +# fiecare trail e declanșat de un swing low anume; linia lui pornește de la +# bara aceea, nu din marginea desenului +SW = [6, 14, 22, 29] t1, t2, t3, t4 = (lo(cds5, 5, 7), lo(cds5, 13, 15), lo(cds5, 21, 23), lo(cds5, 28, 29)) assert t1 < t2 < t3 < t4, (t1, t2, t3, t4) +# regresia de prins: o linie de trail nu are voie să treacă pe deasupra +# prețului la dreapta ei — altfel desenul arată o poziție deja stopată +for _i0, _t in zip(SW, (t1, t2, t3, t4)): + assert all(c.l >= _t - 1e-9 for c in cds5[_i0:]), \ + f"trail-ul {_t} de la bara {_i0} trece peste low-ul unei bare de după" + assert lo(cds5, max(0, _i0 - 1), min(_i0 + 1, len(cds5) - 1)) == _t, \ + f"trail-ul {_t} nu e ancorat de swing low-ul de la bara {_i0}" deco(Chart( candles=cds5, - levels=[Level(t1, f"trail 1: {t1:.2f}", "#c00", label_at="left"), - Level(t2, f"trail 2: {t2:.2f}", "#c00", label_at="left"), - Level(t3, f"trail 3: {t3:.2f}", "#c00"), - Level(t4, f"trail 4: {t4:.2f}", "#c00")], - marks=[Mark(6, "swing low", "#c00", "below", dy=14), - Mark(14, "swing low mai sus → muți stopul", "#c00", dy=-10)], - mas=[MA(20, "#b06000", dash="4 3", text="SMA-20")], + # etichetele la dreapta: la stânga ar cădea peste candele, pentru că + # fiecare linie începe acum în mijlocul desenului + levels=[Level(t1, f"trail 1: {t1:.2f}", "#c00", i0=SW[0]), + Level(t2, f"trail 2: {t2:.2f}", "#c00", i0=SW[1]), + Level(t3, f"trail 3: {t3:.2f}", "#c00", i0=SW[2]), + Level(t4, f"trail 4: {t4:.2f}", "#c00", i0=SW[3])], + marks=[Mark(6, "swing low 1", "#c00", "below", dy=14), + Mark(14, "swing low 2", "#c00", "below", dy=14), + Mark(22, "swing low 3", "#c00", "below", dy=14), + Mark(29, "swing low 4", "#c00", "below", dy=14)], + mas=[MA(20, "#b06000", dash="4 3")], scale=7.0, gap=17, body_w=9, left=52, width=700, top=64, vol_h=70, vol_label="volum", title="Pasul 5, trail pe swing low — weekly (decizia a fost pe monthly)", - caption="Exemplu construit (fără ticker). Stopul urcă doar la un swing low " - "mai sus; nu coboară niciodată."), "pasul5_trail") + caption="Fiecare linie de trail pornește de la swing low-ul care o " + "declanșează; stopul nu coboară niciodată."), "pasul5_trail") # ------------------------------------- 9. când nu merge (Tesla, 217.02/214.25) T_CL = ([320.00, 312.00, 304.00, 298.00] # 0-3 @@ -358,25 +416,31 @@ T_CL = ([320.00, 312.00, 304.00, 298.00] # 0-3 + [232.00] # 12 buy hammer + [228.00, 222.00, 216.00] # 13-15 scoate stopul + [225.00] # 16 al doilea semnal - + [240.00, 252.00, 262.00, 272.00, 282.00, 290.00, 298.00] # 17-23 - + [295.00, 302.00]) # 24-25 + + [240.00, 252.00, 262.00, 272.00, 282.00, 290.00, 298.00]) # 17-23 T_WK = ([(3.00, 3.00)] * 12 + [(2.00, 12.98)] + [(2.00, 2.00), (2.00, 2.00), (1.00, 1.75)] - + [(2.00, 2.00)] * 10) -T_VL = vols(26, 46, 12, i12=72, i15=78, i16=84, i17=88, i18=80) + + [(2.00, 2.00)] * 8) +T_VL = vols(24, 46, 12, i12=72, i15=78, i16=84, i17=88, i18=80) TC = from_closes(T_CL, wicks=T_WK, vols=T_VL, start=326.00) assert lo(TC, 12, 12) == 217.02, f"low-ul hammer-ului trebuie 217.02, e {lo(TC, 12, 12)}" assert lo(TC, 13, 15) == 214.25, f"minimul următor trebuie 214.25, e {lo(TC, 13, 15)}" assert 214.25 < 217.02, "al doilea minim e sub low-ul hammer-ului" assert len(TC[17:24]) == 7, "urcarea rostită e de 7 săptămâni" +assert len(TC) == 24, "după al doilea semnal se desenează exact cele 7 bare rostite" +assert all(TC[i].c < TC[i + 1].c for i in range(17, 23)), \ + "cele 7 bare etichetate ca urcare trebuie să urce toate" deco(Chart( candles=TC, - levels=[Level(214.25, "minimul de după: 214.25", "#c00")], + levels=[Level(217.02, "low-ul hammer-ului: 217.02", "#b06000", + label_at="left"), + # cele două minime sunt la 2.77 dolari: eticheta celui de jos + # trece sub propria linie, altfel o taie linia de deasupra + Level(214.25, "minimul de după: 214.25", "#c00", label_dy=18)], marks=[Mark(12, "buy hammer — primul semnal", "#b06000", dy=-10), Mark(17, "al doilea semnal, acesta merge", "#188a3e", dy=-10), Mark(23, "7 săptămâni de urcare", "#188a3e", dy=-10)], - arrows=[Arrow(12, "low-ul hammer-ului: 217.02;\nstopul pus sub el a fost luat", - price=217.02, where="left", color="#b06000", dx=-10, dy=-26)], + arrows=[Arrow(15, "stopul pus sub 217.02\na fost luat aici", + price=214.25, where="below", color="#c00", dy=4)], mas=[MA(20, "#b06000", dash="4 3", text="SMA-20")], scale=2.6, gap=19, body_w=10, left=58, width=700, vol_h=70, vol_label="volum", title="Când nu merge — Tesla weekly", @@ -419,7 +483,7 @@ SVG["flux"] = """1. Scanner, pe candelă închisă doar DOJI, nu buy doji - 2. Lista, 3-400 de simboluri + 2. Lista, 200-300 de simboluri ținută 4 luni, într-un excel 3. Radar screen diff --git a/gen/strategia_8_dhrt.py b/gen/strategia_8_dhrt.py index 6d064ac..31dc83a 100644 --- a/gen/strategia_8_dhrt.py +++ b/gen/strategia_8_dhrt.py @@ -134,7 +134,11 @@ SL = round(CAP + H / 3, 2) # 1/3 de la cap: marginea de sus a t E = CDS[32].c # intrarea, la close-ul candelei de breakout R = round(E - SL, 2) TP1 = round(E + R, 2) -GAT = round((hi(CDS, 12, 12) + hi(CDS, 24, 24)) / 2, 2) # media celor două vârfuri +# „măsoară din interiorul gâtului pe aici, iau un average" (`05_7_...txt:1304`): +# nivelul se ia din interiorul gâtului, NU de la cele mai de sus vârfuri. Pe +# desen vârfurile sunt mai sus (barele 13 și 25 ating 63.30), de aceea eticheta +# nu are voie să spună „media celor două vârfuri". +GAT = round((hi(CDS, 12, 12) + hi(CDS, 24, 24)) / 2, 2) H_HS = round(GAT - CAP, 2) TP2 = round(GAT + H_HS, 2) @@ -151,6 +155,10 @@ assert hi(CDS, 38, 42) >= TP1 > TP2, \ assert lo(CDS, 13, 18) < lo(CDS, 6, 9) and lo(CDS, 13, 18) < lo(CDS, 25, 31), \ "capul trebuie să fie mai jos decât ambii umeri" assert VL[32] > max(VL[25:32]), "candela de breakout nu are volumul cel mai mare" +# regresia de prins: eticheta gâtului spune „din interiorul gâtului, nu de la +# vârfuri", deci nivelul trebuie să stea strict sub cel mai de sus vârf al zonei +assert GAT < max(hi(CDS, 10, 13), hi(CDS, 24, 25)), \ + f"gâtul {GAT} nu e sub vârfurile zonei: eticheta ar minți" print(f"construit: cap {CAP} umeri {UMS}/{UMD} H {H} SL {SL} intrare {E}" f" R {R} TP1 {TP1} gât {GAT} (h {H_HS}) TP2 {TP2}") @@ -167,7 +175,7 @@ deco(Chart( Mark(17, "capul", "#6a3d9a", "below", dy=16), Mark(31, "doji", "#b06000", "below", dy=8), Mark(32, "buy doji = trigger", "#188a3e", dy=-40), - Mark(34, "retest", "#b06000", "below", dy=22), + Mark(34, "pullback la nivelul de breakout", "#b06000", "below", dy=22), Mark(41, "apoi trail", "#1a5fb4", dy=-8)], zones=[Zone(25, 31, "umărul drept", "#188a3e")], mas=[MA(20, "#b06000", dash="4 3")], @@ -301,28 +309,52 @@ X_CL = ([55.00, 56.50, 58.00, 59.50, 61.00, 62.20, 63.00] + [64.40] # 18 breakout, dar fără volum + [62.00, 60.00, 57.50, 55.00]) # 19-22 breakdown X_WK = T_WK -X_VL = vols(23, 44, 10, i4=78, i8=52, i9=48, i10=40, i11=38, i12=34, i13=32, - i14=30, i15=28, i16=26, i17=24, i18=36, i19=54, i20=66, i21=74) +# Regula de „nu intra" din sursă e despre o histogramă CU SEMN care cade sub +# swing low-ul ei („histograma asta cade sub swing low-ul de aici […] iar prețul +# încă nu e acolo"), nu despre bare brute pornite de la o bază: pe bare +# nesemnate „minime tot mai joase" nu înseamnă nimic vizual. De aceea panoul de +# jos al acestei diagrame e desenat în jurul unui zero (`vol_zero`), cu trei +# minime tot mai joase, iar bara candelei de breakout fals e mică și sub zero. +ZERO = 50.0 +X_VL = [60.0, 64.0, 68.0, 74.0, 80.0, 72.0, 66.0, # 0-6 urcarea + 56.0, 50.0, 42.0, # 7-9 minimul 1 + 48.0, 46.0, 38.0, # 10-12 minimul 2 + 44.0, 42.0, 34.0, 40.0, # 13-16 minimul 3 + 36.0, # 17 doji + 44.0, # 18 breakout fals + 30.0, 24.0, 20.0, 16.0] # 19-22 breakdown XC = from_closes(X_CL, wicks=X_WK, vols=X_VL, start=54.00) assert abs(XC[17].c - XC[17].o) <= 0.15 * (XC[17].h - XC[17].l), "bara 17 nu e doji" assert XC[18].c > hi(XC, 7, 17), "breakout-ul de preț există și aici" assert X_VL[18] < X_VL[4], "volumul de breakout NU trebuie să treacă swing high-ul" -assert X_VL[17] == min(X_VL), "volumul minim trebuie să cadă pe doji" +assert X_VL[18] < ZERO, \ + "pe candela de breakout histograma trebuie să fie deja sub zero" +_SW = (9, 12, 15) +for _i in _SW: + assert X_VL[_i - 1] > X_VL[_i] < X_VL[_i + 1], \ + f"bara {_i} nu e un minim local al histogramei" + assert X_VL[_i] < ZERO, f"minimul de la bara {_i} trebuie să fie sub zero" +assert X_VL[_SW[0]] > X_VL[_SW[1]] > X_VL[_SW[2]], \ + f"minimele histogramei nu coboară: {[X_VL[i] for i in _SW]}" assert XC[22].c < lo(XC, 7, 17), "după breakout-ul fals prețul rupe consolidarea" deco(Chart( candles=XC, levels=[Level(lo(XC, 7, 17), f"baza {lo(XC, 7, 17):.2f}", "#c00", label_at="left")], marks=[Mark(17, "doji", "#b06000", "below", dy=26), - Mark(18, "închide peste consolidare, dar volumul e praf", "#c00", dy=-10), - Mark(12, "volumul face minime tot mai joase", "#c00", "below", dy=26), + Mark(18, "închide peste consolidare, dar volumul e deja sub zero", + "#c00", dy=-10), + Mark(11, "histograma rupe sub propriul swing low, de trei ori", + "#c00", "below", dy=46), Mark(22, "breakdown", "#c00", "below", dy=14)], zones=[Zone(7, 17, "aceeași consolidare de 11 bare", "#c00")], mas=[MA(20, "#b06000", dash="4 3", text="SMA-20")], scale=14.0, gap=26, body_w=11, left=58, width=700, top=46, vol_h=80, - vol_label="volum", title="Pasul 2, NU — breakout de preț fără breakout de volum", - caption="Exemplu construit (fără ticker). Prețul arată identic cu diagrama " - "de deasupra; diferă panoul de volum. False breakout."), "pas2_nu") + vol_zero=ZERO, + vol_label="histogramă de volum, cu semn (stil on balance volume)", + title="Pasul 2, NU — breakout de preț fără breakout de volum", + caption="Exemplu construit. Prețul e identic cu al diagramei de deasupra; " + "panoul de jos e histograma cu semn, nu volumul brut."), "pas2_nu") # ================================================== 6. pasul 3 — stopul, treimea de jos deco(Chart( @@ -330,7 +362,7 @@ deco(Chart( levels=[Level(UMD, f"umăr drept {UMD:.2f}", "#6a3d9a"), Level(CAP, f"cap {CAP:.2f} — baza lui H", "#6a3d9a", label_at="left"), - Level(SL, f"SL minim {SL:.2f} = cap + H/3", "#c00"), + Level(SL, f"SL cel mai sus permis: {SL:.2f} = cap + H/3", "#c00"), Level(E, f"intrare {E:.2f}; distanța până la SL e R", "#188a3e", label_at="left")], marks=[Mark(12, "capul", "#6a3d9a", "below", dy=16), @@ -344,11 +376,13 @@ deco(Chart( # ========================================================= 7. pasul 4 — cele două ținte deco(Chart( candles=CDS[18:], - levels=[Level(SL, f"SL {SL:.2f}", "#c00", label_at="left"), + levels=[Level(CAP, f"capul {CAP:.2f} = baza înălțimii HS", "#6a3d9a"), + Level(SL, f"SL {SL:.2f}", "#c00", label_at="left"), Level(E, f"intrare {E:.2f}", "#188a3e", label_at="left"), - Level(GAT, f"linia gâtului {GAT:.2f}, media celor două vârfuri", - "#6a3d9a", label_at="left"), - Level(TP2, f"TP2 {TP2:.2f} = gât + înălțimea HS", "#1a5fb4", + Level(GAT, f"linia gâtului {GAT:.2f}, din interiorul gâtului " + f"(nu de la vârfuri)", "#6a3d9a", label_at="left"), + Level(TP2, f"TP2 {TP2:.2f} = gât + înălțimea HS " + f"({GAT:.2f} − {CAP:.2f} = {H_HS:.2f})", "#1a5fb4", label_at="left"), Level(TP1, f"TP1 {TP1:.2f} = intrare + R", "#1a5fb4", label_at="left")], @@ -369,7 +403,9 @@ Y_CL = ([50.00, 51.20, 52.40, 53.00, 52.20, 53.40, 52.60, 53.20, Y_WK = ([(0.30, 0.30)] * 10 + [(0.20, 0.20)] + [(0.30, 0.30), (0.30, 0.30), (0.30, 0.30)] + [(0.60, 0.50)] + [(0.30, 0.30)] * 4) -Y_VL = vols(19, 44, 10, i10=96, i11=52, i12=48, i13=46, i14=56, i15=88, i16=82) +# barele de retest trebuie să fie mai mici decât ale consolidării: legenda +# spune „volum mic pe retest, mare pe repornire" +Y_VL = vols(19, 44, 10, i10=96, i11=30, i12=26, i13=24, i14=28, i15=88, i16=82) YC = from_closes(Y_CL, wicks=Y_WK, vols=Y_VL, start=49.00) C_HI, C_LO = hi(YC, 0, 9), lo(YC, 0, 9) JUM = round((C_HI + C_LO) / 2, 2) @@ -377,14 +413,22 @@ assert YC[10].c > C_HI, "bara 10 trebuie să facă breakout peste consolidare" assert JUM < lo(YC, 11, 14) < C_HI, \ "retestul trebuie să intre în consolidare, dar să se oprească peste jumătate" assert YC[18].c > YC[10].c, "după retest prețul trebuie să plece mai sus" +assert max(Y_VL[11:15]) < min(Y_VL[0:10]), \ + "barele de retest trebuie să fie sub toate barele consolidării" +assert Y_VL[15] > max(Y_VL[0:15]) * 0.9, "repornirea trebuie să vină cu volum" +# dreptunghiul consolidării e ancorat exact de cele două cifre din etichete, +# fără cei 8 px de padding impliciți: altfel capacul nu cade pe 53.70 +assert JUM == round((C_HI + C_LO) / 2, 2), "jumătatea nu e a intervalului declarat" deco(Chart( candles=YC, levels=[Level(C_HI, f"vârful consolidării {C_HI:.2f} = locul crimei", "#6a3d9a"), - Level(JUM, f"jumătatea consolidării {JUM:.2f}", "#b06000")], + Level(JUM, f"jumătatea consolidării {JUM:.2f} " + f"= ({C_HI:.2f} + {C_LO:.2f}) / 2", "#b06000"), + Level(C_LO, f"baza consolidării {C_LO:.2f}", "#6a3d9a")], marks=[Mark(10, "breakout", "#188a3e", dy=-10), Mark(13, "retest, se oprește peste jumătate", "#188a3e", "below", dy=20), Mark(14, "doji aici: a doua intrare", "#188a3e", "below", dy=38)], - zones=[Zone(0, 9, "consolidarea", "#6a3d9a")], + zones=[Zone(0, 9, "consolidarea", "#6a3d9a", p_top=C_HI, p_bot=C_LO)], scale=22.0, gap=30, body_w=12, left=58, width=700, top=46, vol_h=70, vol_label="volum", title="Retestul, DA — se oprește în jumătatea de sus", caption="Exemplu construit (fără ticker). Volum mic pe retest, mare pe " @@ -412,7 +456,7 @@ deco(Chart( marks=[Mark(10, "același breakout", "#188a3e", dy=-10), Mark(13, "retestul trece sub jumătate", "#c00", "below", dy=52), Mark(17, "volum în creștere pe coborâre", "#c00", "below", dy=16)], - zones=[Zone(0, 9, "aceeași consolidare", "#6a3d9a")], + zones=[Zone(0, 9, "aceeași consolidare", "#6a3d9a", p_top=C_HI, p_bot=C_LO)], scale=15.0, gap=30, body_w=12, left=58, width=700, top=46, vol_h=70, vol_label="volum", title="Retestul, NU — trece sub jumătate și rupe baza", caption="Exemplu construit (fără ticker). Același breakout; diferă cât de " diff --git a/summaries/06_MODUL_5/04_strategia_7_micis.html b/summaries/06_MODUL_5/04_strategia_7_micis.html index 26df5d0..a4f3a17 100644 --- a/summaries/06_MODUL_5/04_strategia_7_micis.html +++ b/summaries/06_MODUL_5/04_strategia_7_micis.html @@ -38,7 +38,8 @@ monthly, după un downtrend de 5-8 candele, de preferință dintr-un pivot sau suport quarterly. Intri în trei tranșe cu limit order (una la close-ul candelei de trigger, două mai jos, în pullback), stopul stă la 2/3 din -înălțimea doji-ului, prima țintă e la distanța stopului (1R), restul +înălțimea doji-ului, prima țintă e la distanța stopului (1R), a doua e +același 1R recalculat pe prețul mediu după ce se umplu tranșele, iar restul poziției merge pe trail după swing low-uri. E doar long — cursul spune explicit să nu faci short cu ea. Ținta vine în 5-10 perioade: 5-10 săptămâni dacă ai intrat pe weekly, 5-10 luni dacă ai intrat pe monthly.

@@ -47,14 +48,18 @@ pentru că vine de la […] instituțional […] vine de la corecție […] I-ul vine de la investiții și S-ul de la swing" — autorul însuși ezită pe litere, și spune „nici mai știu exact de ce am numit-o" așa.

Avertismentul pe care îl repetă toată lecția: nu merg toate. Pe weekly și -monthly stopurile sunt uriașe în procente (la NVDA, 56% distanță), iar un semnal +monthly stopurile sunt uriașe în procente (pe NVDA rostește 56%, deși cifra nu +se verifică pe nivelurile pe care le dă — vezi pasul 3), iar un semnal ratat urmat de al doilea care merge e situația normală, nu excepția.

Pentru cine e și pentru cine nu

E strategie de swing trading pe perioadă lungă și de investiție în companii individuale. Nu se poate face day trading sau scalping cu ea, și nu merge pe conturi de prop cu reguli de drawdown zilnic: dacă ai intrat pe weekly stai -minim 3 săptămâni, iar dacă ai intrat pe monthly „poți să stai și 2 ani, 3 ani -în tranzacție". Cursul e categoric: „dacă vrei să dai turnuri în trei zile, +câteva săptămâni — fraza-sursă e neinteligibilă aici („3 din păie de stat"), +deci „minim 3 săptămâni" e lectura mea, sprijinită de exemplul de dinainte, cu +„16% în una, două, trei, patru, cinci săptămâni" —, iar dacă ai intrat pe +monthly „poți să stai și 2 ani, 3 ani în tranzacție". Partea cu monthly e +rostită limpede; cea cu weekly nu. Cursul e categoric: „dacă vrei să dai turnuri în trei zile, strategia asta nu merge".

Ce nu-ți trebuie: analiză fundamentală. „Nu e nevoie să știi o iotă de fundamental […] doar tehnic poți tranzacționa cu strategia asta." Dacă știi @@ -67,9 +72,12 @@ să poți citi pașii fără să te oprești.

minus low) și fitile în ambele părți: deschiderea și închiderea sunt aproximativ la același preț. Pe weekly sau monthly, o astfel de candelă poate avea 28 de dolari înălțime, cum are cea de la NVDA mai jos. -
  • Buy doji — nu doji-ul în sine, ci candela următoare, care se închide - deasupra high-ului doji-ului. Doji-ul e setup-ul, închiderea peste el e - trigger-ul. „Cum să ai buy doji fără doji înainte?"
  • +
  • Buy doji — nu doji-ul în sine, ci o candelă ulterioară, în cel mult 4 + perioade, care se închide deasupra high-ului doji-ului. De obicei e cea + imediat următoare, dar breakout-ul mai poate veni și la a doua, a treia sau a + patra — de aceea lista de scanare se ține patru luni (vezi rutina). Doji-ul e + setup-ul, închiderea peste el e trigger-ul. „Cum să ai buy doji fără doji + înainte?"
  • Buy hammer — același lucru, dar candela de dedesubt e un hammer: corp mic sus, fitil lung în jos. Funcționează identic în strategia asta.
  • Marubozu — candelă cu corp mare și fitile mici sau inexistente. Pe weekly @@ -96,119 +104,119 @@ să poți citi pașii fără să te oprești.

    folosesc și la pașii 1, 2 și 4 (același doji, aceleași niveluri, ca să nu se schimbe cifrele de la o secțiune la alta).

    -

    - MICIS, tot trade-ul — weekly (exemplu construit) - - downtrend 7 candele - - fereastra de intrare - - SL 39.33 = 2/3 din doji - - intrare 1/3 la close 45.00 - - limit 1/3 la 43.33 - - limit 1/3 la 42.50 - - preț mediu 43.61 - - TP2 47.89 - - TP1 50.67 - - SMA-20 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - volum - doji - buy doji - se umplu limiturile - ieși, nu aștepți - Exemplu construit (fără ticker), la scară. R-urile sunt ale mele. +

    + MICIS, tot trade-ul — weekly (exemplu construit) + + downtrend 7 candele + + fereastra de intrare + + SL 39.33 = 2/3 din doji + + intrare 1/3 la close 45.00 + + limit 1/3 la 43.33 + + limit 1/3 la 42.50 + + preț mediu 43.61 + + TP2 47.89 — lectura mea + + TP1 50.67 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + volum + doji + buy doji + consolidare + se umplu limiturile + ieși, nu aștepți + Exemplu construit (fără ticker), la scară. R-urile sunt ale mele.

    Citirea, de la stânga la dreapta: downtrend de 7 candele weekly, apoi un doji (38.00-42.00), apoi candela de trigger care închide la 45.00, peste high-ul @@ -231,14 +239,14 @@ mai slabă: „ideal ar fi să vină după un downtrend sau corecție majoră".<

    Pasul 1, DA — doji weekly pe pivotul quarterly - - downtrend 7 candele - - pivot quarterly 36.00 - + + downtrend 7 candele + + pivot quarterly 36.00 + low-ul doji-ului 38.00 - - SMA-20 + + SMA-20 @@ -263,32 +271,32 @@ mai slabă: „ideal ar fi să vină după un downtrend sau corecție majoră".< - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -304,12 +312,12 @@ mai slabă: „ideal ar fi să vină după un downtrend sau corecție majoră".< - + - + - + @@ -442,39 +450,39 @@ e cam mucificat" — adică fără acumulare și fără divergență.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + volum doji aici: după uptrend - volum în scădere - urmează corecția + volum în scădere pe tot uptrend-ul + urmează corecția, cu volum uptrend Exemplu construit (fără ticker), la scară. Doji-ul arată identic; ce îl descalifică e ce e în stânga lui.

    @@ -498,12 +506,12 @@ lași, sau intri manual în premarket / after hours.

    Pasul 2, ladder umplut — JNJ weekly - + intrare 1/3 la close 157.47 - - limit 1/3 la 155.02 = 1/3 din marubozu - - limit 1/3 la 1/2 din marubozu + + limit 1/3 la 155.02 = 1/3 din marubozu + + limit 1/3 la 1/2 din marubozu @@ -610,11 +618,11 @@ dublat în preț aproape" — fără să atingă nici primul nivel de 1/3.

    Pasul 2, ladder neumplut — AMD monthly - + intrare 1/3 la close 108.00 - - limit 1/3 la 104.67 — niciodată atins - + + limit 1/3 — niciodată atins + unde a ajuns: 180 SMA-20 @@ -727,15 +735,15 @@ de toleranța voastră la risc și de experiență":

    Pasul 3, stopul — NVDA monthly - - downtrend 5 candele - - sub low-ul doji-ului: 86 - - SL 2/3 din doji: 94 - + + downtrend 5 candele + + sub low-ul doji-ului: 86 + + SL 2/3 din doji: 94 + intrare 1/3 la close: 133 - + ținta rostită: 182 SMA-20 @@ -771,7 +779,7 @@ de toleranța voastră la risc și de experiență":

    - + @@ -831,14 +839,22 @@ de toleranța voastră la risc și de experiență":

    Exemplul e al lui, pe NVDA monthly. Doji-ul are 28 de dolari înălțime și low-ul la 86. O treime deasupra low-ului e, „aproximativ din ochi, pe la -94. Versus normal trebuia să-l ai la 86" — adică varianta 2/3 taie -jumătate din risc față de stopul sub low. (Strict calculat, o treime din 28 +94. Versus normal trebuia să-l ai la 86" — adică, măsurat de la +close-ul de trigger de 133, stopul la 94 e la 29,3% distanță, iar cel de +sub low, la 86, la 35,3%. Varianta 2/3 scade riscul cu o treime din +înălțimea doji-ului, nu cu jumătate. (Strict calculat, o treime din 28 deasupra lui 86 dă 95.33; el citește 94 pe grafic. Diferența e a lui, nu o corectez — pe monthly, un dolar nu schimbă decizia.)

    Și acum partea pe care o spune direct, fără să o îmbrace: stopul ăsta e uriaș -în procente. Cu intrarea la 133 și stopul sub low-ul doji-ului, „ce stop -loss trebuie să ai tu aici cu prima poziție 1/3? […] chiloții la 56% asumare -pierdere? Bă, 56%." Pe Dell spune „stop loss-ul inițial, 68%", iar pe MLM +în procente: „ce stop loss trebuie să ai tu aici cu prima poziție 1/3? […] +chiloții la 56% asumare pierdere? Bă, 56%."

    +

    Atenție la cifra asta, pentru că nu se verifică pe nivelurile pe care le +dă el. 56% e rostit separat, fără să fie legat de un preț de intrare; de la +close-ul de trigger de 133 până la 86 sunt 35,3%, nu 56%. Cel mai aproape de +56% ajungi socotind distanța ca procent din nivelul stopului (47/86 = 54,6%) — +probabil de acolo îi vine cifra, dar e o speculație a mea. Reține ordinul de +mărime („stop uriaș, de câteva zeci de procente"), nu numărul. Pe Dell spune +că stop loss-ul inițial e „68 la 100" [sic], iar pe MLM măsoară „21%" pe varianta cu 4 candele în spate și „în loc de 21 aveai un 17" pe varianta de 2/3. Astea nu sunt stopuri de day trading; sunt stopuri de poziție de investiție, și de-aia pasul 6 (mărimea poziției) nu e opțional.

    @@ -855,72 +871,82 @@ TP1 ăsta este egal cu TP2 inițial. Pentru că dacă tu intri la 1/3, exact câ s-a terminat candela, TP1 e TP2. Dar pe măsură ce intri cu poziția a doua și poziția a treia tu vei face un average." Deci TP2 e aceeași regulă de 1R, dar recalculată pe prețul mediu după ce s-au umplut tranșele 2 și 3. La prima -tranșă cele două coincid; se despart abia când mediezi.

    +tranșă cele două coincid; se despart abia când mediezi. Partea cu „se +despart" e lectura mea — vezi rezerva de după diagramă.

    -

    +

    Pasul 4, cele două ținte — weekly (exemplu construit) - - SL 39.33 - - preț mediu 43.61 - - intrare 1 la 45.00 - - TP2 47.89 - - TP1 50.67 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TP2 = 1R pe medie (4.28) - - - TP1 = 1R pe prima tranșă (5.67) - Mediind în jos, 1R se scurtează: TP2 vine înaintea lui TP1. R-urile sunt ale mele. + + SL 39.33 + + preț mediu 43.61 + + intrare 1/3 la 45.00 + + TP2 47.89 + + TP1 50.67 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TP2 = 1R pe medie (4.28) + + + TP1 = 1R pe prima tranșă (5.67) + Lectura mea: mediind în jos, TP2 vine înaintea lui TP1. Fraza-sursă e neinteligibilă aici.

    -

    Pe exemplul construit se vede efectul, și e contraintuitiv: mediind în jos, -1R se scurtează. Prețul mediu al celor trei tranșe e 43.61, stopul 39.33, deci -1R e 4.28 și TP2 cade la 47.89 — sub TP1 de 50.67, care e 1R socotit pe prima -tranșă intrată la 45.00. Ținta vine mai repede și cu risc mai mic pe acțiune. -Cifrele astea sunt derivările mele pe exemplul construit; cursul dă regula, nu -exemplul numeric. Avertismentul lui despre asta: „o să-ți dea un average la un +

    Aici e o lectură a mea, nu o regulă rostită. Fraza-sursă e neinteligibilă +exact în punctul care contează: ea spune doar că la prima tranșă TP1 = TP2 și că +pe măsură ce intri cu tranșele 2 și 3 „o să-ți dea un average" — dar nu spune +care dintre cele două ținte se recalculează pe medie. Lectura pe care o +folosesc în document: TP2 e 1R socotit pe prețul mediu, deci cade sub TP1. +Varianta alternativă, cel puțin la fel de plauzibilă, e că se recalculează și +ținta și stopul pe prețul mediu („vezi cum calculezi TP-ul și SL-ul"), caz +în care TP1 și TP2 rămân identice și după mediere, iar „TP2 sub TP1" nu se mai +produce. Diagramele de mai sus desenează prima variantă, marcată ca lectură.

    +

    Pe lectura asta, pe exemplul construit, efectul e contraintuitiv: mediind în +jos, 1R se scurtează. Prețul mediu al celor trei tranșe e 43.61, stopul 39.33, +deci 1R e 4.28 și TP2 cade la 47.89 — sub TP1 de 50.67, care e 1R socotit pe +prima tranșă intrată la 45.00. Ținta vine mai repede și cu risc mai mic pe +acțiune. Cifrele astea sunt derivările mele pe exemplul construit; cursul dă +regula, nu exemplul numeric. Avertismentul lui despre asta: „o să-ți dea un average la un moment dat […] vezi cum calculezi TP-ul și SL-ul, că o să-ți dea o medie" — cu alte cuvinte, recalculează, nu lăsa ordinele vechi.

    Cât aștepți: ținta vine „între 5 și 10 perioade. Dacă sunt pe weekly, ar trebui @@ -940,16 +966,15 @@ trebuit să mai pun un slash."

    Pasul 5, trail pe swing low — weekly (decizia a fost pe monthly) - - trail 1: 48.20 - - trail 2: 53.80 - + + trail 1: 48.20 + + trail 2: 53.80 + trail 3: 59.80 - + trail 4: 65.20 - SMA-20 @@ -1042,9 +1067,11 @@ trebuit să mai pun un slash."

    volum - swing low - swing low mai sus → muți stopul - Exemplu construit (fără ticker). Stopul urcă doar la un swing low mai sus; nu coboară niciodată. + swing low 1 + swing low 2 + swing low 3 + swing low 4 + Fiecare linie de trail pornește de la swing low-ul care o declanșează; stopul nu coboară niciodată.

    De ce un timeframe mai mic și nu același: pe weekly, între două swing low-uri pot trece șase săptămâni — „ăsta era ultimul trail și următorul trail s-a format @@ -1052,8 +1079,8 @@ peste […] șase săptămâni de la trail-ul ăsta". Un trail atât de larg te foarte departe cu poziția („te duci cu el țeavă"), dar dacă l-ai pune pe monthly, după o decizie luată pe monthly, n-ai muta stopul decât o dată pe trimestru.

    -

    Cât stai, în practică, din exemplele lui: 3 săptămâni minim dacă ai intrat pe -weekly; pe Johnson & Johnson a trebuit să stai „1, 2, 3 … 12 săptămâni, și abia +

    Cât stai, în practică, din exemplele lui: câteva săptămâni dacă ai intrat pe +weekly (minimul de 3 e lectura mea, vezi mai sus); pe Johnson & Johnson a trebuit să stai „1, 2, 3 … 12 săptămâni, și abia în a 13-a vedeai profitul"; pe Alibaba, 14 săptămâni. Pe monthly, 2-3 ani.

    Pasul 6 — Mărimea poziției (al doilea P)

    Maxim 1-2-3% din cont, și „când zic mărimea totală a poziției, mă refer la @@ -1065,9 +1092,10 @@ pe prima tranșă. „Când calculezi stop loss-ul, să nu reprezinte 2% din tot real rămâne o treime din cel calculat — e în favoarea ta, nu invers. Invers, dacă dimensionezi pe prima treime și se umplu toate, ai de trei ori riscul pe care l-ai aprobat.

    -

    Cu un stop de 56% ca la NVDA, aritmetica e brutală și merită scrisă o dată: -dacă accepți să pierzi 2% din cont și stopul e la 56% distanță, poziția nu poate -depăși ~3,5% din cont. Asta e derivarea mea, nu o cifră din curs — dar e +

    Cu un stop de ordinul celui de pe NVDA, aritmetica e brutală și merită scrisă o +dată: dacă accepți să pierzi 2% din cont și stopul e la 35% distanță, poziția nu +poate depăși ~5,7% din cont; la 56%, cât rostește el, ~3,5%. Astea sunt +derivările mele, nu cifre din curs — dar sunt motivul pentru care pasul 6 nu e o formalitate pe timeframe-urile astea.

    Rutina: cum le găsești înainte să se închidă candela

    Partea cea mai practică a lecției, și cea pe care o repetă la final de două ori. @@ -1082,7 +1110,7 @@ citește candela în formare.

    1. Scanner, pe candelă închisă doar DOJI, nu buy doji - 2. Lista, 3-400 de simboluri + 2. Lista, 200-300 de simboluri ținută 4 luni, într-un excel 3. Radar screen @@ -1135,12 +1163,14 @@ volum pozitiv).

    Exemplul cu cifre e Tesla, și e instructiv pentru că arată exact ce face alegerea stopului:

    -

    +

    Când nu merge — Tesla weekly - - minimul de după: 214.25 - - SMA-20 + + low-ul hammer-ului: 217.02 + + minimul de după: 214.25 + + SMA-20 @@ -1189,46 +1219,40 @@ alegerea stopului:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - volum + + + + + + + + + + + + + + + + + + + + + + + + + + volum buy hammer — primul semnal al doilea semnal, acesta merge 7 săptămâni de urcare - - - low-ul hammer-ului: 217.02; - stopul pus sub el a fost luat - Ale lui: 217.02, 214.25 și cele 7 săptămâni de după al doilea semnal; restul barelor e al meu. + + + stopul pus sub 217.02 + a fost luat aici + Ale lui: 217.02, 214.25 și cele 7 săptămâni de după al doilea semnal; restul barelor e al meu.

    „Uite, buy hammer-ul ăsta n-a mers, de exemplu. Acum depinde unde aveai stop loss-ul. Dacă low-ul ăsta de aici e 217.02, low-ul ăsta de aici este @@ -1308,7 +1332,10 @@ rutină și diagrama de divergență (forma lor; cifrele de volum sunt citirile lui).

    Ce rămâne neclar în sursă, fără să inventez o rezolvare: eticheta TP2 e rostită neinteligibil („bit, bich, TPU normal"), iar lămurirea o dă doar -indirect, prin explicația cu media; și litera I din MICIS are două justificări +indirect, prin explicația cu media — nu spune care dintre ținte se recalculează +pe prețul mediu, deci „TP2 sub TP1" rămâne lectura mea, marcată ca atare pe +diagrame; cifra de 56% nu se verifică pe nivelurile rostite în același exemplu; +fraza despre cât stai pe weekly („3 din păie de stat") e neinteligibilă; și litera I din MICIS are două justificări în același paragraf (instituțional și investiții), autorul recunoscând că nu mai ține minte.

    Referințe

    @@ -1318,6 +1345,6 @@ mai ține minte.

  • Investopedia — Scaling In and Out — intrarea în tranșe și efectul pe prețul mediu, mecanismul din pasul 2.
  • Investopedia — Trailing Stop — trail-ul pe swing low din pasul 5.
  • IG — Pivot Points — cum se calculează pivoții pe perioadă (de unde vin PPQ și PPM).
  • - + diff --git a/summaries/06_MODUL_5/04_strategia_7_micis.md b/summaries/06_MODUL_5/04_strategia_7_micis.md index 4b5a6b2..53a3e8d 100644 --- a/summaries/06_MODUL_5/04_strategia_7_micis.md +++ b/summaries/06_MODUL_5/04_strategia_7_micis.md @@ -5,7 +5,8 @@ MICIS cumpără un **buy doji** sau un **buy hammer** apărut pe **weekly sau monthly**, după un downtrend de 5-8 candele, de preferință dintr-un pivot sau suport **quarterly**. Intri în **trei tranșe** cu limit order (una la close-ul candelei de trigger, două mai jos, în pullback), stopul stă la **2/3 din -înălțimea doji-ului**, prima țintă e la **distanța stopului** (1R), restul +înălțimea doji-ului**, prima țintă e la **distanța stopului** (1R), a doua e +același 1R recalculat pe **prețul mediu** după ce se umplu tranșele, iar restul poziției merge pe **trail după swing low-uri**. E **doar long** — cursul spune explicit să nu faci short cu ea. Ținta vine în **5-10 perioade**: 5-10 săptămâni dacă ai intrat pe weekly, 5-10 luni dacă ai intrat pe monthly. @@ -16,15 +17,19 @@ vine de la investiții și S-ul de la swing" — autorul însuși ezită pe lite spune „nici mai știu exact de ce am numit-o" așa. Avertismentul pe care îl repetă toată lecția: **nu merg toate**. Pe weekly și -monthly stopurile sunt uriașe în procente (la NVDA, 56% distanță), iar un semnal +monthly stopurile sunt uriașe în procente (pe NVDA rostește 56%, deși cifra nu +se verifică pe nivelurile pe care le dă — vezi pasul 3), iar un semnal ratat urmat de al doilea care merge e situația normală, nu excepția. ## Pentru cine e și pentru cine nu E strategie de **swing trading pe perioadă lungă și de investiție** în companii individuale. Nu se poate face day trading sau scalping cu ea, și nu merge pe conturi de prop cu reguli de drawdown zilnic: dacă ai intrat pe weekly stai -minim 3 săptămâni, iar dacă ai intrat pe monthly „poți să stai și 2 ani, 3 ani -în tranzacție". Cursul e categoric: „dacă vrei să dai turnuri în trei zile, +câteva săptămâni — fraza-sursă e neinteligibilă aici („3 din păie de stat"), +deci „minim 3 săptămâni" e lectura mea, sprijinită de exemplul de dinainte, cu +„16% în una, două, trei, patru, cinci săptămâni" —, iar dacă ai intrat pe +monthly „poți să stai și 2 ani, 3 ani în tranzacție". Partea cu monthly e +rostită limpede; cea cu weekly nu. Cursul e categoric: „dacă vrei să dai turnuri în trei zile, strategia asta nu merge". Ce nu-ți trebuie: analiză fundamentală. „Nu e nevoie să știi o iotă de @@ -39,9 +44,12 @@ să poți citi pașii fără să te oprești. minus low) și fitile în ambele părți: deschiderea și închiderea sunt aproximativ la același preț. Pe weekly sau monthly, o astfel de candelă poate avea 28 de dolari înălțime, cum are cea de la NVDA mai jos. -- **Buy doji** — nu doji-ul în sine, ci candela **următoare**, care se închide - **deasupra high-ului doji-ului**. Doji-ul e setup-ul, închiderea peste el e - trigger-ul. „Cum să ai buy doji fără doji înainte?" +- **Buy doji** — nu doji-ul în sine, ci **o candelă ulterioară, în cel mult 4 + perioade**, care se închide **deasupra high-ului doji-ului**. De obicei e cea + imediat următoare, dar breakout-ul mai poate veni și la a doua, a treia sau a + patra — de aceea lista de scanare se ține patru luni (vezi rutina). Doji-ul e + setup-ul, închiderea peste el e trigger-ul. „Cum să ai buy doji fără doji + înainte?" - **Buy hammer** — același lucru, dar candela de dedesubt e un hammer: corp mic sus, fitil lung în jos. Funcționează identic în strategia asta. - **Marubozu** — candelă cu corp mare și fitile mici sau inexistente. Pe weekly @@ -69,119 +77,119 @@ folosesc și la pașii 1, 2 și 4 (același doji, aceleași niveluri, ca să nu schimbe cifrele de la o secțiune la alta). - - MICIS, tot trade-ul — weekly (exemplu construit) - - downtrend 7 candele - - fereastra de intrare - - SL 39.33 = 2/3 din doji - - intrare 1/3 la close 45.00 - - limit 1/3 la 43.33 - - limit 1/3 la 42.50 - - preț mediu 43.61 - - TP2 47.89 - - TP1 50.67 - - SMA-20 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - volum - doji - buy doji - se umplu limiturile - ieși, nu aștepți - Exemplu construit (fără ticker), la scară. R-urile sunt ale mele. + + MICIS, tot trade-ul — weekly (exemplu construit) + + downtrend 7 candele + + fereastra de intrare + + SL 39.33 = 2/3 din doji + + intrare 1/3 la close 45.00 + + limit 1/3 la 43.33 + + limit 1/3 la 42.50 + + preț mediu 43.61 + + TP2 47.89 — lectura mea + + TP1 50.67 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + volum + doji + buy doji + consolidare + se umplu limiturile + ieși, nu aștepți + Exemplu construit (fără ticker), la scară. R-urile sunt ale mele. Citirea, de la stânga la dreapta: downtrend de 7 candele weekly, apoi un doji @@ -209,14 +217,14 @@ mai slabă: „ideal ar fi să vină după un downtrend sau corecție majoră". Pasul 1, DA — doji weekly pe pivotul quarterly - - downtrend 7 candele - - pivot quarterly 36.00 - + + downtrend 7 candele + + pivot quarterly 36.00 + low-ul doji-ului 38.00 - - SMA-20 + + SMA-20 @@ -241,32 +249,32 @@ mai slabă: „ideal ar fi să vină după un downtrend sau corecție majoră". - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -282,12 +290,12 @@ mai slabă: „ideal ar fi să vină după un downtrend sau corecție majoră". - + - + - + @@ -424,39 +432,39 @@ e cam mucificat" — adică fără acumulare și fără divergență. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + volum doji aici: după uptrend - volum în scădere - urmează corecția + volum în scădere pe tot uptrend-ul + urmează corecția, cu volum uptrend Exemplu construit (fără ticker), la scară. Doji-ul arată identic; ce îl descalifică e ce e în stânga lui. @@ -483,12 +491,12 @@ lași, sau intri **manual în premarket / after hours**. Pasul 2, ladder umplut — JNJ weekly - + intrare 1/3 la close 157.47 - - limit 1/3 la 155.02 = 1/3 din marubozu - - limit 1/3 la 1/2 din marubozu + + limit 1/3 la 155.02 = 1/3 din marubozu + + limit 1/3 la 1/2 din marubozu @@ -600,11 +608,11 @@ dublat în preț aproape" — fără să atingă nici primul nivel de 1/3. Pasul 2, ladder neumplut — AMD monthly - + intrare 1/3 la close 108.00 - - limit 1/3 la 104.67 — niciodată atins - + + limit 1/3 — niciodată atins + unde a ajuns: 180 SMA-20 @@ -722,15 +730,15 @@ Regula practică de alegere, din curs: pornești de la 4 candele în spate, și Pasul 3, stopul — NVDA monthly - - downtrend 5 candele - - sub low-ul doji-ului: 86 - - SL 2/3 din doji: 94 - + + downtrend 5 candele + + sub low-ul doji-ului: 86 + + SL 2/3 din doji: 94 + intrare 1/3 la close: 133 - + ținta rostită: 182 SMA-20 @@ -766,7 +774,7 @@ Regula practică de alegere, din curs: pornești de la 4 candele în spate, și - + @@ -827,15 +835,24 @@ Regula practică de alegere, din curs: pornești de la 4 candele în spate, și Exemplul e al lui, pe NVDA monthly. Doji-ul are **28 de dolari** înălțime și low-ul la **86**. O treime deasupra low-ului e, „aproximativ din ochi, pe la -**94**. Versus normal trebuia să-l ai la **86**" — adică varianta 2/3 taie -jumătate din risc față de stopul sub low. (Strict calculat, o treime din 28 +**94**. Versus normal trebuia să-l ai la **86**" — adică, măsurat de la +close-ul de trigger de 133, stopul la 94 e la **29,3%** distanță, iar cel de +sub low, la 86, la **35,3%**. Varianta 2/3 scade riscul cu o treime din +înălțimea doji-ului, nu cu jumătate. (Strict calculat, o treime din 28 deasupra lui 86 dă 95.33; el citește 94 pe grafic. Diferența e a lui, nu o corectez — pe monthly, un dolar nu schimbă decizia.) Și acum partea pe care o spune direct, fără să o îmbrace: stopul ăsta e **uriaș -în procente**. Cu intrarea la **133** și stopul sub low-ul doji-ului, „ce stop -loss trebuie să ai tu aici cu prima poziție 1/3? […] chiloții la **56%** asumare -pierdere? Bă, 56%." Pe Dell spune „stop loss-ul inițial, 68%", iar pe MLM +în procente**: „ce stop loss trebuie să ai tu aici cu prima poziție 1/3? […] +chiloții la **56%** asumare pierdere? Bă, 56%." + +Atenție la cifra asta, pentru că **nu se verifică** pe nivelurile pe care le +dă el. 56% e rostit separat, fără să fie legat de un preț de intrare; de la +close-ul de trigger de 133 până la 86 sunt 35,3%, nu 56%. Cel mai aproape de +56% ajungi socotind distanța ca procent din nivelul stopului (47/86 = 54,6%) — +probabil de acolo îi vine cifra, dar e o speculație a mea. Reține ordinul de +mărime („stop uriaș, de câteva zeci de procente"), nu numărul. Pe Dell spune +că stop loss-ul inițial e „68 la 100" [sic], iar pe MLM măsoară „21%" pe varianta cu 4 candele în spate și „în loc de 21 aveai un 17" pe varianta de 2/3. Astea nu sunt stopuri de day trading; sunt stopuri de poziție de investiție, și de-aia pasul 6 (mărimea poziției) nu e opțional. @@ -855,74 +872,85 @@ TP1 ăsta este egal cu TP2 inițial. Pentru că dacă tu intri la 1/3, exact câ s-a terminat candela, TP1 e TP2. Dar pe măsură ce intri cu poziția a doua și poziția a treia tu vei face un average." Deci TP2 e **aceeași regulă de 1R, dar recalculată pe prețul mediu** după ce s-au umplut tranșele 2 și 3. La prima -tranșă cele două coincid; se despart abia când mediezi. +tranșă cele două coincid; se despart abia când mediezi. **Partea cu „se +despart" e lectura mea** — vezi rezerva de după diagramă. - + Pasul 4, cele două ținte — weekly (exemplu construit) - - SL 39.33 - - preț mediu 43.61 - - intrare 1 la 45.00 - - TP2 47.89 - - TP1 50.67 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TP2 = 1R pe medie (4.28) - - - TP1 = 1R pe prima tranșă (5.67) - Mediind în jos, 1R se scurtează: TP2 vine înaintea lui TP1. R-urile sunt ale mele. + + SL 39.33 + + preț mediu 43.61 + + intrare 1/3 la 45.00 + + TP2 47.89 + + TP1 50.67 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TP2 = 1R pe medie (4.28) + + + TP1 = 1R pe prima tranșă (5.67) + Lectura mea: mediind în jos, TP2 vine înaintea lui TP1. Fraza-sursă e neinteligibilă aici. -Pe exemplul construit se vede efectul, și e contraintuitiv: **mediind în jos, -1R se scurtează**. Prețul mediu al celor trei tranșe e 43.61, stopul 39.33, deci -1R e 4.28 și TP2 cade la 47.89 — sub TP1 de 50.67, care e 1R socotit pe prima -tranșă intrată la 45.00. Ținta vine mai repede și cu risc mai mic pe acțiune. -Cifrele astea sunt derivările mele pe exemplul construit; cursul dă regula, nu -exemplul numeric. Avertismentul lui despre asta: „o să-ți dea un average la un +**Aici e o lectură a mea, nu o regulă rostită.** Fraza-sursă e neinteligibilă +exact în punctul care contează: ea spune doar că la prima tranșă TP1 = TP2 și că +pe măsură ce intri cu tranșele 2 și 3 „o să-ți dea un average" — dar **nu spune +care dintre cele două ținte se recalculează pe medie**. Lectura pe care o +folosesc în document: TP2 e 1R socotit pe prețul mediu, deci cade sub TP1. +Varianta alternativă, cel puțin la fel de plauzibilă, e că se recalculează și +ținta și stopul pe prețul mediu („vezi cum calculezi TP-ul **și** SL-ul"), caz +în care TP1 și TP2 rămân identice și după mediere, iar „TP2 sub TP1" nu se mai +produce. Diagramele de mai sus desenează prima variantă, marcată ca lectură. + +Pe lectura asta, pe exemplul construit, efectul e contraintuitiv: **mediind în +jos, 1R se scurtează**. Prețul mediu al celor trei tranșe e 43.61, stopul 39.33, +deci 1R e 4.28 și TP2 cade la 47.89 — sub TP1 de 50.67, care e 1R socotit pe +prima tranșă intrată la 45.00. Ținta vine mai repede și cu risc mai mic pe +acțiune. Cifrele astea sunt derivările mele pe exemplul construit; cursul dă +regula, nu exemplul numeric. Avertismentul lui despre asta: „o să-ți dea un average la un moment dat […] vezi cum calculezi TP-ul și SL-ul, că o să-ți dea o medie" — cu alte cuvinte, recalculează, nu lăsa ordinele vechi. @@ -947,16 +975,15 @@ Trail-ul urcă pe **swing low-uri**, adică pe higher low-uri succesive. Pasul 5, trail pe swing low — weekly (decizia a fost pe monthly) - - trail 1: 48.20 - - trail 2: 53.80 - + + trail 1: 48.20 + + trail 2: 53.80 + trail 3: 59.80 - + trail 4: 65.20 - SMA-20 @@ -1049,9 +1076,11 @@ Trail-ul urcă pe **swing low-uri**, adică pe higher low-uri succesive. volum - swing low - swing low mai sus → muți stopul - Exemplu construit (fără ticker). Stopul urcă doar la un swing low mai sus; nu coboară niciodată. + swing low 1 + swing low 2 + swing low 3 + swing low 4 + Fiecare linie de trail pornește de la swing low-ul care o declanșează; stopul nu coboară niciodată. De ce un timeframe mai mic și nu același: pe weekly, între două swing low-uri @@ -1061,8 +1090,8 @@ foarte departe cu poziția („te duci cu el țeavă"), dar dacă l-ai pune pe monthly, după o decizie luată pe monthly, n-ai muta stopul decât o dată pe trimestru. -Cât stai, în practică, din exemplele lui: 3 săptămâni minim dacă ai intrat pe -weekly; pe Johnson & Johnson a trebuit să stai „1, 2, 3 … 12 săptămâni, și abia +Cât stai, în practică, din exemplele lui: câteva săptămâni dacă ai intrat pe +weekly (minimul de 3 e lectura mea, vezi mai sus); pe Johnson & Johnson a trebuit să stai „1, 2, 3 … 12 săptămâni, și abia în a 13-a vedeai profitul"; pe Alibaba, 14 săptămâni. Pe monthly, 2-3 ani. ## Pasul 6 — Mărimea poziției (al doilea P) @@ -1077,9 +1106,10 @@ real rămâne o treime din cel calculat — e în favoarea ta, nu invers. Invers dacă dimensionezi pe prima treime și se umplu toate, ai de trei ori riscul pe care l-ai aprobat. -Cu un stop de 56% ca la NVDA, aritmetica e brutală și merită scrisă o dată: -dacă accepți să pierzi 2% din cont și stopul e la 56% distanță, poziția nu poate -depăși ~3,5% din cont. Asta e derivarea mea, nu o cifră din curs — dar e +Cu un stop de ordinul celui de pe NVDA, aritmetica e brutală și merită scrisă o +dată: dacă accepți să pierzi 2% din cont și stopul e la 35% distanță, poziția nu +poate depăși ~5,7% din cont; la 56%, cât rostește el, ~3,5%. Astea sunt +derivările mele, nu cifre din curs — dar sunt motivul pentru care pasul 6 nu e o formalitate pe timeframe-urile astea. ## Rutina: cum le găsești înainte să se închidă candela @@ -1096,7 +1126,7 @@ citește candela **în formare**. 1. Scanner, pe candelă închisă doar DOJI, nu buy doji - 2. Lista, 3-400 de simboluri + 2. Lista, 200-300 de simboluri ținută 4 luni, într-un excel 3. Radar screen @@ -1154,12 +1184,14 @@ Exemplul cu cifre e Tesla, și e instructiv pentru că arată exact ce face alegerea stopului: - + Când nu merge — Tesla weekly - - minimul de după: 214.25 - - SMA-20 + + low-ul hammer-ului: 217.02 + + minimul de după: 214.25 + + SMA-20 @@ -1208,46 +1240,40 @@ alegerea stopului: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - volum + + + + + + + + + + + + + + + + + + + + + + + + + + volum buy hammer — primul semnal al doilea semnal, acesta merge 7 săptămâni de urcare - - - low-ul hammer-ului: 217.02; - stopul pus sub el a fost luat - Ale lui: 217.02, 214.25 și cele 7 săptămâni de după al doilea semnal; restul barelor e al meu. + + + stopul pus sub 217.02 + a fost luat aici + Ale lui: 217.02, 214.25 și cele 7 săptămâni de după al doilea semnal; restul barelor e al meu. „Uite, buy hammer-ul ăsta n-a mers, de exemplu. Acum depinde unde aveai stop @@ -1333,7 +1359,10 @@ lui). **Ce rămâne neclar în sursă**, fără să inventez o rezolvare: eticheta TP2 e rostită neinteligibil („bit, bich, TPU normal"), iar lămurirea o dă doar -indirect, prin explicația cu media; și litera I din MICIS are două justificări +indirect, prin explicația cu media — nu spune care dintre ținte se recalculează +pe prețul mediu, deci „TP2 sub TP1" rămâne lectura mea, marcată ca atare pe +diagrame; cifra de 56% nu se verifică pe nivelurile rostite în același exemplu; +fraza despre cât stai pe weekly („3 din păie de stat") e neinteligibilă; și litera I din MICIS are două justificări în același paragraf (instituțional și investiții), autorul recunoscând că nu mai ține minte. diff --git a/summaries/06_MODUL_5/05_strategia_8_dhrt.html b/summaries/06_MODUL_5/05_strategia_8_dhrt.html index 5d79d65..3d07b07 100644 --- a/summaries/06_MODUL_5/05_strategia_8_dhrt.html +++ b/summaries/06_MODUL_5/05_strategia_8_dhrt.html @@ -108,15 +108,15 @@ schimbe cifrele de la o secțiune la alta.

    DHRT, tot trade-ul — HS răsturnat (exemplu construit) umărul drept - - SL 54.17 - + + SL 54.17 + intrare 65.00 - + linia gâtului 63.00 - - TP2 74.00 = proiecția gâtului - + + TP2 74.00 = proiecția gâtului + TP1 75.83 = distanța stopului @@ -254,7 +254,7 @@ schimbe cifrele de la o secțiune la alta.

    capul doji buy doji = trigger - retest + pullback la nivelul de breakout apoi trail Exemplu construit (fără ticker), la scară. Geometria e a cursului; prețurile și R-urile sunt ale mele.

    @@ -264,11 +264,15 @@ breakout; stopul stă în treimea de jos dintre cap și nivelul umărului; prima țintă e la distanța stopului.

    De ce cifrele din desen: capul la 52.00, umerii la 58.50, deci H = 6.50. Treimea de jos începe la 52.00 + 6.50/3 = 54.17 — asta e cea mai sus la care -ai voie să pui stopul (derivare a mea pe exemplul meu, nu un preț rostit în +ai voie să pui stopul, adică riscul cel mai mic permis, nu stopul „cel mai +strâns" în vreun alt sens (derivare a mea pe exemplul meu, nu un preț rostit în lecție). Intrarea la close-ul candelei de breakout, 65.00, pune R la 10.83, adică -16,7% din preț. Nu e o greșeală de desen: așa ies stopurile la strategia -asta, și de aceea secțiunea de position sizing contează mai mult decât la -celelalte.

    +16,7% din preț. Atenție de unde vine procentul: din candela de breakout pe +care am desenat-o eu, un marubozu de 6.30 care împinge close-ul la 65.00. Cu un +trigger buy doji mic, cum e exemplul din lecție, intrarea ar cădea aproape de +vârful consolidării și R-ul ar fi în jur de 5.8, nu 10.83. Stopurile ies oricum +mari la strategia asta — de aceea secțiunea de position sizing contează mai mult +decât la celelalte — dar cifra de 16,7% e a desenului, nu a strategiei.

    Pasul 1 — Găsești un HS răsturnat și îi ceri un nivel sub cap sau sub umăr (M)

    Deschizi graficul și cauți un v-bottom cu trei minime: umăr stâng, un cap mai jos, un umăr drept înapoi la nivelul primului. Apoi — și aici e tot filtrul — @@ -290,10 +294,10 @@ un pattern care nu e perfect."

    Pasul 1, DA — capul în suport, umărul drept pe pivot umărul drept, pullback pe pivot - - suport monthly 36.00 - - pivot monthly 40.00 + + suport monthly 36.00 + + pivot monthly 40.00 SMA-20 @@ -426,7 +430,7 @@ volumul scade la fiecare picior, deci exact cazul în care nu intri.

    Pasul 1, NU — triple bottom la al 4-lea test breakdown, nu breakout - + baza testată de 3 ori: 31.00 SMA-20 @@ -537,8 +541,8 @@ să închidă peste doji-ul de dedesubt.

    Pasul 2, DA — trigger valid din umărul drept umărul drept: 11 bare de consolidare - - vârful consolidării 63.30 + + vârful consolidării 63.30 SMA-20 @@ -724,13 +728,18 @@ prețul încă nu e acolo, dar e pe drum încet […] să te ții să facă new

    Cu alte cuvinte: volumul rupe înaintea prețului. Dacă volumul face minime tot mai joase în timp ce prețul încă ține consolidarea, ai un candidat de short, nu de long — oricât de frumos arată patternul.

    +

    Regula se citește pe o histogramă cu semn (on balance volume sau o +histogramă de volum instituțional), nu pe barele brute de volum: „sub swing +low-ul de aici" presupune o linie de zero și minime care se pot compara între +ele. De aceea panoul de jos al diagramei următoare e desenat altfel decât cel de +la trigger-ul valid — acolo barele brute ajung, aici nu.

    Pasul 2, NU — breakout de preț fără breakout de volum aceeași consolidare de 11 bare - - baza 58.60 + + baza 58.60 SMA-20 @@ -779,36 +788,37 @@ de long — oricât de frumos arată patternul.

    - - - - - - - - - - - - - - - - - - - - - - - - - volum + + 0 + + + + + + + + + + + + + + + + + + + + + + + + histogramă de volum, cu semn (stil on balance volume) doji - închide peste consolidare, dar volumul e praf - volumul face minime tot mai joase + închide peste consolidare, dar volumul e deja sub zero + histograma rupe sub propriul swing low, de trei ori breakdown - Exemplu construit (fără ticker). Prețul arată identic cu diagrama de deasupra; diferă panoul de volum. False breakout. + Exemplu construit. Prețul e identic cu al diagramei de deasupra; panoul de jos e histograma cu semn, nu volumul brut.

    Pasul 3 — Stopul: o treime din înălțimea cap–umăr drept (primul P)

    Măsori două lucruri și împarți la trei. Întâi, înălțimea H: de la low-ul capului @@ -835,14 +845,14 @@ treime, de la bază la vârf o treime […] 1x3 din înălțimea cap–umăr dre

    Pasul 3, stopul — H de la cap la umărul drept, apoi o treime - + umăr drept 58.50 - - cap 52.00 — baza lui H - - SL minim 54.17 = cap + H/3 - - intrare 65.00; distanța până la SL e R + + cap 52.00 — baza lui H + + SL cel mai sus permis: 54.17 = cap + H/3 + + intrare 65.00; distanța până la SL e R @@ -922,21 +932,27 @@ e stopul în jos.

    lecția, și e importantă: nu măsori de la extremele patternului, ci din interiorul gâtului. „Nu e bine să măsor de la low-ul de aici, că măsori distanța de stop loss și target de profit; măsoară din interiorul gâtului pe -aici, iau un average." Pe diagrama de mai jos linia gâtului e media celor două -maxime, nu cel mai sus dintre ele.

    +aici, iau un average." Pe diagrama de mai jos linia gâtului e trasată din +interiorul gâtului, la 63.00 — adică sub cele mai de sus vârfuri ale zonei, +care ating 63.30. Nu e media vârfurilor, și nu există o formulă rostită care să +o reproducă: „un average" din interiorul gâtului e tot ce spune lecția. Când +reconstruiești tu patternul, nivelul ăsta e o alegere a ta de câteva zecimi, iar +TP2 se mișcă exact cu ea.

    Pasul 4, țintele — TP1 = R, TP2 = proiecția gâtului - - SL 54.17 - - intrare 65.00 - - linia gâtului 63.00, media celor două vârfuri - - TP2 74.00 = gât + înălțimea HS - - TP1 75.83 = intrare + R + + capul 52.00 = baza înălțimii HS + + SL 54.17 + + intrare 65.00 + + linia gâtului 63.00, din interiorul gâtului (nu de la vârfuri) + + TP2 74.00 = gât + înălțimea HS (63.00 − 52.00 = 11.00) + + TP1 75.83 = intrare + R SMA-20 @@ -996,8 +1012,9 @@ maxime, nu cel mai sus dintre ele.

    Autorul o spune de trei ori, cu exemple: „În unele situații s-ar putea ca, de fapt, TP2, conform HS răsturnat cum am zis eu aici, să fie un pic mai sus decât TP1 […] sau să fie mai jos. Noi măsurând așa, o să constatați că de fapt TP1 e -mai mare decât TP2." Și, în cele mai multe cazuri, se suprapun: „o să cădeți pe -TP1 egal cu [stopul], ar putea să fie exact TP2." De ce depinde: „de mărimea +mai mare decât TP2." Și uneori coincid: „o să cădeți pe TP1 egal cu [stopul], +ar putea să fie exact TP2." („Ar putea" e al lui — e o posibilitate, nu o +frecvență.) De ce depinde: „de mărimea HS-ului, de time frame și așa mai departe."

    Pe exemplul construit, TP2 iese la 74.00 și TP1 la 75.83 — TP1 peste TP2, cu mai puțin de 2 unități între ele. Practic înseamnă: nu alegi între ele, le @@ -1035,7 +1052,8 @@ ceea ce e exact rezultatul pe care îl apără în citatul de mai sus.

    califici contul foarte repede […] sau poți să-l [arzi] în două tranzacții, dacă intri cu poziții mari."

    Completare proprie, legată de pasul 3: cu R la 16,7% din preț (cazul din -exemplul construit), 1% risc pe un cont de 10.000 înseamnă 100 de dolari risc, +exemplul construit, unde candela de breakout e mare — vezi rezerva de la pasul +3), 1% risc pe un cont de 10.000 înseamnă 100 de dolari risc, deci o poziție de circa 600 de dolari — mai puțin de 10 acțiuni la 65. Nu e o limitare a strategiei, e aritmetica stopurilor mari. Dacă vrei poziții mai mari cu același risc, ai nevoie de patternul pe un timeframe mai mic, unde H e mai @@ -1052,14 +1070,16 @@ retest."

    consolidare, că asta e locul crimei. Poți să retestezi și până jos, dar deja dacă retestează până jos, e periculos să facă break-down."

    -

    +

    Retestul, DA — se oprește în jumătatea de sus - - consolidarea - + + consolidarea + vârful consolidării 53.70 = locul crimei - - jumătatea consolidării 51.20 + + jumătatea consolidării 51.20 = (53.70 + 48.70) / 2 + + baza consolidării 48.70 @@ -1098,31 +1118,31 @@ dacă retestează până jos, e periculos să facă break-down."

    - - - - - - - - - - - - - - - - - - - - - volum + + + + + + + + + + + + + + + + + + + + + volum breakout retest, se oprește peste jumătate doji aici: a doua intrare - Exemplu construit (fără ticker). Volum mic pe retest, mare pe repornire: nu vin vânzători noi. + Exemplu construit (fără ticker). Volum mic pe retest, mare pe repornire: nu vin vânzători noi.

    Deci: retest până la jumătatea consolidării = normal, intri. Retest care trece sub jumătate și se apropie de bază = semn de avertizare; sub bază, ideea s-a @@ -1130,13 +1150,13 @@ inversat — „să cadă sub consolidare și atunci se shortează".

    Retestul, NU — trece sub jumătate și rupe baza - - aceeași consolidare - + + aceeași consolidare + vârful consolidării 53.70 - + jumătatea consolidării 51.20 - + baza 48.70 @@ -1230,8 +1250,8 @@ Aproximativ la 51, adică în zona suportului."

    Varianta short — XLF, ascending wedge - - ținta rostită în lecție: 51 + + ținta rostită în lecție: 51 SMA-20 @@ -1488,6 +1508,6 @@ se poate reține din ele:

  • Investopedia — Rising Wedge
  • Investopedia — Short Squeeze
  • Investopedia — On-Balance Volume (OBV)
  • - + diff --git a/summaries/06_MODUL_5/05_strategia_8_dhrt.md b/summaries/06_MODUL_5/05_strategia_8_dhrt.md index fb21aad..1619270 100644 --- a/summaries/06_MODUL_5/05_strategia_8_dhrt.md +++ b/summaries/06_MODUL_5/05_strategia_8_dhrt.md @@ -80,15 +80,15 @@ schimbe cifrele de la o secțiune la alta. DHRT, tot trade-ul — HS răsturnat (exemplu construit) umărul drept - - SL 54.17 - + + SL 54.17 + intrare 65.00 - + linia gâtului 63.00 - - TP2 74.00 = proiecția gâtului - + + TP2 74.00 = proiecția gâtului + TP1 75.83 = distanța stopului @@ -226,7 +226,7 @@ schimbe cifrele de la o secțiune la alta. capul doji buy doji = trigger - retest + pullback la nivelul de breakout apoi trail Exemplu construit (fără ticker), la scară. Geometria e a cursului; prețurile și R-urile sunt ale mele. @@ -238,11 +238,15 @@ breakout; stopul stă în treimea de jos dintre cap și nivelul umărului; prima De ce cifrele din desen: capul la 52.00, umerii la 58.50, deci H = 6.50. Treimea de jos începe la 52.00 + 6.50/3 = **54.17** — asta e cea mai sus la care -ai voie să pui stopul (derivare a mea pe exemplul meu, nu un preț rostit în +ai voie să pui stopul, adică riscul cel mai mic permis, nu stopul „cel mai +strâns" în vreun alt sens (derivare a mea pe exemplul meu, nu un preț rostit în lecție). Intrarea la close-ul candelei de breakout, 65.00, pune R la 10.83, adică -**16,7% din preț**. Nu e o greșeală de desen: așa ies stopurile la strategia -asta, și de aceea secțiunea de position sizing contează mai mult decât la -celelalte. +**16,7% din preț**. Atenție de unde vine procentul: din candela de breakout pe +care am desenat-o eu, un marubozu de 6.30 care împinge close-ul la 65.00. Cu un +trigger buy doji mic, cum e exemplul din lecție, intrarea ar cădea aproape de +vârful consolidării și R-ul ar fi în jur de 5.8, nu 10.83. Stopurile ies oricum +mari la strategia asta — de aceea secțiunea de position sizing contează mai mult +decât la celelalte — dar cifra de 16,7% e a desenului, nu a strategiei. ## Pasul 1 — Găsești un HS răsturnat și îi ceri un nivel sub cap sau sub umăr (M) Deschizi graficul și cauți un v-bottom cu trei minime: umăr stâng, un cap mai @@ -268,10 +272,10 @@ un pattern care nu e perfect." Pasul 1, DA — capul în suport, umărul drept pe pivot umărul drept, pullback pe pivot - - suport monthly 36.00 - - pivot monthly 40.00 + + suport monthly 36.00 + + pivot monthly 40.00 SMA-20 @@ -410,7 +414,7 @@ volumul scade la fiecare picior, deci exact cazul în care nu intri. Pasul 1, NU — triple bottom la al 4-lea test breakdown, nu breakout - + baza testată de 3 ori: 31.00 SMA-20 @@ -526,8 +530,8 @@ să închidă peste doji-ul de dedesubt. Pasul 2, DA — trigger valid din umărul drept umărul drept: 11 bare de consolidare - - vârful consolidării 63.30 + + vârful consolidării 63.30 SMA-20 @@ -727,13 +731,19 @@ Cu alte cuvinte: volumul rupe înaintea prețului. Dacă volumul face minime tot mai joase în timp ce prețul încă ține consolidarea, ai un candidat de short, nu de long — oricât de frumos arată patternul. +Regula se citește pe o **histogramă cu semn** (on balance volume sau o +histogramă de volum instituțional), nu pe barele brute de volum: „sub swing +low-ul de aici" presupune o linie de zero și minime care se pot compara între +ele. De aceea panoul de jos al diagramei următoare e desenat altfel decât cel de +la trigger-ul valid — acolo barele brute ajung, aici nu. + Pasul 2, NU — breakout de preț fără breakout de volum aceeași consolidare de 11 bare - - baza 58.60 + + baza 58.60 SMA-20 @@ -782,36 +792,37 @@ de long — oricât de frumos arată patternul. - - - - - - - - - - - - - - - - - - - - - - - - - volum + + 0 + + + + + + + + + + + + + + + + + + + + + + + + histogramă de volum, cu semn (stil on balance volume) doji - închide peste consolidare, dar volumul e praf - volumul face minime tot mai joase + închide peste consolidare, dar volumul e deja sub zero + histograma rupe sub propriul swing low, de trei ori breakdown - Exemplu construit (fără ticker). Prețul arată identic cu diagrama de deasupra; diferă panoul de volum. False breakout. + Exemplu construit. Prețul e identic cu al diagramei de deasupra; panoul de jos e histograma cu semn, nu volumul brut. ## Pasul 3 — Stopul: o treime din înălțimea cap–umăr drept (primul P) @@ -841,14 +852,14 @@ Două consecințe practice, amândouă spuse de el: Pasul 3, stopul — H de la cap la umărul drept, apoi o treime - + umăr drept 58.50 - - cap 52.00 — baza lui H - - SL minim 54.17 = cap + H/3 - - intrare 65.00; distanța până la SL e R + + cap 52.00 — baza lui H + + SL cel mai sus permis: 54.17 = cap + H/3 + + intrare 65.00; distanța până la SL e R @@ -932,22 +943,28 @@ e stopul în jos. lecția, și e importantă: **nu măsori de la extremele patternului, ci din interiorul gâtului.** „Nu e bine să măsor de la low-ul de aici, că măsori distanța de stop loss și target de profit; măsoară din interiorul gâtului pe -aici, iau un average." Pe diagrama de mai jos linia gâtului e media celor două -maxime, nu cel mai sus dintre ele. +aici, iau un average." Pe diagrama de mai jos linia gâtului e trasată **din +interiorul gâtului**, la 63.00 — adică sub cele mai de sus vârfuri ale zonei, +care ating 63.30. Nu e media vârfurilor, și nu există o formulă rostită care să +o reproducă: „un average" din interiorul gâtului e tot ce spune lecția. Când +reconstruiești tu patternul, nivelul ăsta e o alegere a ta de câteva zecimi, iar +TP2 se mișcă exact cu ea. Pasul 4, țintele — TP1 = R, TP2 = proiecția gâtului - - SL 54.17 - - intrare 65.00 - - linia gâtului 63.00, media celor două vârfuri - - TP2 74.00 = gât + înălțimea HS - - TP1 75.83 = intrare + R + + capul 52.00 = baza înălțimii HS + + SL 54.17 + + intrare 65.00 + + linia gâtului 63.00, din interiorul gâtului (nu de la vârfuri) + + TP2 74.00 = gât + înălțimea HS (63.00 − 52.00 = 11.00) + + TP1 75.83 = intrare + R SMA-20 @@ -1008,8 +1025,9 @@ maxime, nu cel mai sus dintre ele. Autorul o spune de trei ori, cu exemple: „În unele situații s-ar putea ca, de fapt, TP2, conform HS răsturnat cum am zis eu aici, să fie un pic mai sus decât TP1 […] sau să fie mai jos. Noi măsurând așa, o să constatați că de fapt TP1 e -mai mare decât TP2." Și, în cele mai multe cazuri, se suprapun: „o să cădeți pe -TP1 egal cu [stopul], ar putea să fie exact TP2." De ce depinde: „de mărimea +mai mare decât TP2." Și uneori coincid: „o să cădeți pe TP1 egal cu [stopul], +**ar putea** să fie exact TP2." („Ar putea" e al lui — e o posibilitate, nu o +frecvență.) De ce depinde: „de mărimea HS-ului, de time frame și așa mai departe." Pe exemplul construit, TP2 iese la 74.00 și TP1 la 75.83 — TP1 peste TP2, cu @@ -1054,7 +1072,8 @@ califici contul foarte repede […] sau poți să-l [arzi] în două tranzacții intri cu poziții mari." **Completare proprie, legată de pasul 3:** cu R la 16,7% din preț (cazul din -exemplul construit), 1% risc pe un cont de 10.000 înseamnă 100 de dolari risc, +exemplul construit, unde candela de breakout e mare — vezi rezerva de la pasul +3), 1% risc pe un cont de 10.000 înseamnă 100 de dolari risc, deci o poziție de circa 600 de dolari — mai puțin de 10 acțiuni la 65. Nu e o limitare a strategiei, e aritmetica stopurilor mari. Dacă vrei poziții mai mari cu același risc, ai nevoie de patternul pe un timeframe mai mic, unde H e mai @@ -1074,14 +1093,16 @@ consolidare, că asta e locul crimei. Poți să retestezi și până jos, dar de dacă retestează până jos, e periculos să facă break-down." - + Retestul, DA — se oprește în jumătatea de sus - - consolidarea - + + consolidarea + vârful consolidării 53.70 = locul crimei - - jumătatea consolidării 51.20 + + jumătatea consolidării 51.20 = (53.70 + 48.70) / 2 + + baza consolidării 48.70 @@ -1120,31 +1141,31 @@ dacă retestează până jos, e periculos să facă break-down." - - - - - - - - - - - - - - - - - - - - - volum + + + + + + + + + + + + + + + + + + + + + volum breakout retest, se oprește peste jumătate doji aici: a doua intrare - Exemplu construit (fără ticker). Volum mic pe retest, mare pe repornire: nu vin vânzători noi. + Exemplu construit (fără ticker). Volum mic pe retest, mare pe repornire: nu vin vânzători noi. Deci: retest până la jumătatea consolidării = normal, intri. Retest care trece @@ -1154,13 +1175,13 @@ inversat — „să cadă sub consolidare și atunci se shortează". Retestul, NU — trece sub jumătate și rupe baza - - aceeași consolidare - + + aceeași consolidare + vârful consolidării 53.70 - + jumătatea consolidării 51.20 - + baza 48.70 @@ -1259,8 +1280,8 @@ Aproximativ la 51, adică în zona suportului." Varianta short — XLF, ascending wedge - - ținta rostită în lecție: 51 + + ținta rostită în lecție: 51 SMA-20 diff --git a/svg_candles.py b/svg_candles.py index b54ef56..0c6af16 100644 --- a/svg_candles.py +++ b/svg_candles.py @@ -60,6 +60,8 @@ class Level: color: str = "#1a5fb4" dash: str = "4 3" label_at: str = "right" # "right" | "left" — unde stă eticheta + i0: int | None = None # linia începe de la candela i0, nu din marginea stângă + label_dy: float = 0.0 # mută eticheta față de linie (implicit: 6px deasupra) def __post_init__(self) -> None: _check_dash(self.dash, "Level") @@ -138,6 +140,10 @@ class Chart: vol_h: float = 0.0 # înălțimea panoului de volum (0 = fără panou) vol_gap: float = 26.0 # spațiu între panoul de preț și cel de volum vol_label: str = "volum" + # valoarea de volum tratată ca linie de zero: barele peste ea se desenează + # în sus, cele sub ea în jos (histogramă cu semn, stil on balance volume). + # Fără ea, panoul e volumul brut, desenat de la bază. + vol_zero: float | None = None title: str = "" # ex. "SPY — daily" zones: list[Zone] = field(default_factory=list) arrows: list[Arrow] = field(default_factory=list) @@ -276,12 +282,14 @@ class Chart: # nivelurile: linie pe toată lățimea, eticheta deasupra liniei for lv in self.levels: y = self._y(lv.price) - out.append(f'') + ty = y - 6 + lv.label_dy if lv.label_at == "left": - out.append(f'{lv.text}') + out.append(f'{lv.text}') else: - out.append(f'{lv.text}') x0 = self.left @@ -329,17 +337,25 @@ class Chart: # panoul de volum: bare colorate pe direcția candelei if vol_top is not None: assert vol_base is not None - vmax = max(vols) - out.append(f'') + z = self.vol_zero + vmax = max(vols) if z is None else max(abs(v - z) for v in vols) + y_zero = vol_base if z is None else vol_top + self.vol_h / 2 + span = self.vol_h if z is None else self.vol_h / 2 + out.append(f'') + if z is not None: + out.append(f'0') for i, cd in enumerate(self.candles): if cd.vol is None: continue - bh = cd.vol / vmax * self.vol_h - color = cd.color or ("#188a3e" if cd.c >= cd.o else "#c00") + s = cd.vol if z is None else cd.vol - z + bh = s / vmax * span + color = (cd.color or ("#188a3e" if cd.c >= cd.o else "#c00")) if z is None \ + else ("#188a3e" if s >= 0 else "#c00") out.append(f'') + f'y="{min(y_zero, y_zero - bh):.1f}" width="{self.body_w}" ' + f'height="{abs(bh):.1f}" fill="{color}" opacity="0.55"/>') out.append(f'{self.vol_label}') # etichete ancorate pe candele anume @@ -454,6 +470,24 @@ def selftest(): assert len(hs) == 3, f"panoul de volum a desenat {len(hs)} bare" assert abs(hs[2] / hs[0] - 4.0) < 0.01, f"volum 4x desenat la {hs[2]/hs[0]:.2f}x" assert abs(hs[1] / hs[0] - 2.0) < 0.01, f"volum 2x desenat la {hs[1]/hs[0]:.2f}x" + # histograma cu semn: bara sub zero se desenează în jos, nu în sus + ch2z = Chart(candles=cds, scale=40, gap=14, body_w=9, vol_h=70, vol_zero=20.0) + svgz = ch2z.render() + y0 = float(__import__("re").search(r'y1="([\d.]+)"[^/]*stroke="#888"', svgz).group(1)) + bars = [(float(y), float(h)) for y, h in __import__("re").findall( + r' 1, \ + "bara sub zero trebuie să plece de pe linia de zero în jos" + assert abs(bars[2][0] + bars[2][1] - y0) < 0.01, \ + "bara peste zero trebuie să se termine pe linia de zero" + + # linia de nivel segmentată începe de la candela cerută, nu din margine + ch4 = Chart(candles=cds, scale=40, gap=14, body_w=9, + levels=[Level(99.0, "trail", i0=1)]) + x1 = float(__import__("re").search(r'