diff --git a/gen/strategii/buy_doji_aplus.py b/gen/strategii/buy_doji_aplus.py index a882cf2..ce2d1b7 100644 --- a/gen/strategii/buy_doji_aplus.py +++ b/gen/strategii/buy_doji_aplus.py @@ -8,7 +8,7 @@ Același pattern (trend → doji → confirmare), context opus: ultimelor 10 bare — acumulare; - dreapta (NU): uptrend 70 → 76.80, gap-up la open 78.20, doji lipit de rezistența 78.50, confirmare close 79.30 pe volum sub medie („varză"), apoi - prețul cade înapoi sub 78.00. + prețul cade înapoi sub rezistența 78.50, de unde plecase. Nivelurile 42.00 / 78.50 și cifrele de preț sunt construite de mine ca să susțină etichetele și assert-urile din spec (materialul nu dă prețuri pentru @@ -31,6 +31,8 @@ GRAY, RED, GREEN, BLUE, ORANGE = "#777", "#c00", "#188a3e", "#1a5fb4", "#b06000" DOJI_A, CONF_A = 10, 11 # indicii în panoul A+ DOJI_N, CONF_N = 14, 15 # indicii în panoul NU +SUPORT_A = 42.00 # singurele prețuri DESENATE ca nivel; etichetele +REZIST_N = 78.50 # se scriu din ele, ca textul să nu ia altă cifră # ============================================================ PANOUL A+ (24 bare) # 10 bare de downtrend de la 52.00 spre 42.60, apoi doji, apoi confirmare. @@ -56,7 +58,7 @@ doji_a, conf_a = cds_a[DOJI_A], cds_a[CONF_A] # ============================================================ PANOUL NU (24 bare) # uptrend 70 → 76.80 (14 bare), gap-up la open 78.20 + doji, confirmare 79.30 -# pe volum slab, apoi cădere înapoi sub 78.00. Lista e manuală pentru că gap-ul +# pe volum slab, apoi cădere înapoi sub rezistența 78.50. Lista e manuală pentru că gap-ul # (open > high-ul barei precedente) nu iese din `from_closes`. BARE_NU = [ # o, h, l, c, vol @@ -105,8 +107,12 @@ for tag, d in (("A+", doji_a), ("NU", doji_n)): # suplimentare: structura promisă de spec assert min(c.l for c in cds_a[:10]) > doji_a.l, "low-ul dojiului A+ nu e minimul" assert cds_a[9].c < cds_a[0].c - 8, "downtrend A+ prea mic" -assert cds_n[CONF_N].c > 78.50 and cds_n[-1].c < 78.00, "NU nu cade sub 78.00 la final" -assert cds_n[13].c < 78.00 < cds_n[DOJI_N].o, "NU: uptrendul nu se oprește sub 78.00" +assert cds_n[CONF_N].c > REZIST_N, "NU: confirmarea nu iese peste rezistență" +assert cds_n[-1].c < REZIST_N, "NU: prețul nu cade înapoi sub rezistență la final" +assert cds_n[13].c < REZIST_N <= doji_n.h, "NU: uptrendul nu se oprește sub rezistență" +# bara pe care stă săgeata „cade înapoi sub …" trebuie chiar să fie sub nivel +CADE_N = next(i for i in range(CONF_N + 1, len(BARE_NU)) if cds_n[i].c < REZIST_N) +assert CADE_N == 17 and cds_n[18].c < REZIST_N, f"prima cădere sub nivel e bara {CADE_N}" print(f"A+ doji {doji_a.h:.2f}/{doji_a.l:.2f} conf {conf_a.c:.2f} " f"vol {VOLS_A[CONF_A]} > medie {media_a:.1f}") @@ -117,7 +123,7 @@ print(f"NU doji {doji_n.h:.2f}/{doji_n.l:.2f} conf {conf_n.c:.2f} " PW = 560 # lățimea fiecărui panou ch_a = Chart( candles=cds_a, - levels=[Level(42.00, "suport 42.00", GREEN, label_at="left")], + levels=[Level(SUPORT_A, f"suport {SUPORT_A:.2f}", GREEN, label_at="left")], zones=[Zone(DOJI_A, DOJI_A, "", GREEN, p_top=43.2, p_bot=41.7)], arrows=[Arrow(DOJI_A, "doji chiar pe nivel:\nvânzarea s-a oprit pe suport", where="below", color=GREEN, dx=-40), @@ -128,13 +134,14 @@ ch_a = Chart( ) ch_n = Chart( candles=cds_n, - levels=[Level(78.50, "rezistență 78.50", RED, label_at="right")], + levels=[Level(REZIST_N, f"rezistență {REZIST_N:.2f}", RED, label_at="right")], # eticheta zonei ar urca peste titlul panoului (zona e chiar în vârf): # textul stă pe săgeata din stânga zones=[Zone(DOJI_N - 1, CONF_N, "", RED, p_top=79.62)], arrows=[Arrow(DOJI_N, "gap-up în rezistență:\naici cumpără cei întârziați", where="left", color=RED, dx=-30, dy=30), - Arrow(18, "cade înapoi sub 78.00:\nsemnalul a mințit", where="below", color=RED, dx=40)], + Arrow(18, f"cade înapoi sub rezistența {REZIST_N:.2f}:\nsemnalul a mințit", + where="below", color=RED, dx=40)], mas=[], scale=22.0, gap=15, body_w=9, left=44, width=PW, vol_h=60, vol_label="volum", title="Mediocru — gap-up în rezistență, volum varză", ) @@ -268,13 +275,21 @@ for i in range(len(all_txt)): # etichetele cerute de spec există în desen assert "Surse" not in wrapper and ".md:" not in wrapper, "trimiteri la surse în SVG" -for cheie in ("suport 42.00", "doji chiar pe nivel", "vânzarea s-a oprit", "volum în creștere = acumulare", - "rezistență 78.50", "gap-up în rezistență", "cei întârziați", +for cheie in (f"suport {SUPORT_A:.2f}", "doji chiar pe nivel", "vânzarea s-a oprit", "volum în creștere = acumulare", + f"rezistență {REZIST_N:.2f}", + f"cade înapoi sub rezistența {REZIST_N:.2f}", "gap-up în rezistență", "cei întârziați", "semnalul a mințit", "volum slab: nimeni mare nu cumpără", "A+ — doji la suport, volum în acumulare", "Mediocru — gap-up în rezistență, volum varză"): assert cheie in wrapper, f"lipsește din desen: {cheie!r}" +# nicio etichetă nu are voie să numească un preț care nu e desenat ca nivel — +# exact bug-ul „cade înapoi sub 78.00" lângă singurul nivel desenat, 78.50 +NIVELURI = {f"{SUPORT_A:.2f}", f"{REZIST_N:.2f}"} +for _, _, _, t in all_txt: + for n in re.findall(r"\d+\.\d\d", t): + assert n in NIVELURI, f"eticheta {t!r} numește prețul {n}, nedesenat ca nivel" + OUT.write_text(wrapper, encoding="utf-8") print(f"scris {OUT.name}: {TOTAL_W}x{TOTAL_H:.0f}, " f"{len(all_txt)} etichete, verificare OK") diff --git a/gen/strategii/buy_doji_aplus.spec.txt b/gen/strategii/buy_doji_aplus.spec.txt index 41b6119..248a310 100644 --- a/gen/strategii/buy_doji_aplus.spec.txt +++ b/gen/strategii/buy_doji_aplus.spec.txt @@ -9,7 +9,7 @@ context opus: - A+ : downtrend de 10 candele care se oprește pe suport/pivotul 42.00; doji chiar pe nivel; confirmare peste high, cu volum în creștere (acumulare). E „doji la nivel". -- Mediocru/NU: uptrend scurt, gap-up, doji în rezistența 78.00; confirmarea +- Mediocru/NU: uptrend scurt, gap-up, doji în rezistența 78.50; confirmarea închide peste high, dar pe volum slab („varză") — miros de blow-off top. Ambele au, tehnic, un Buy Doji valid; contextul e ce le separă. @@ -36,10 +36,10 @@ mare: cumpărătorii mari intră"). Level „suport 42.00". Panoul NU (24 candele): uptrend de la 70 la ~77, apoi un gap-up de la 76.80 la open 78.20, doji cu high 79.00 / low 78.10 chiar sub rezistența 78.50, apoi confirmare close 79.30 pe volum sub media pe 10 bare, după care prețul -cade înapoi sub 78.00. Adnotări: zonă roșie peste gap-up + doji + confirmare, cu săgeata „gap-up în +cade înapoi sub rezistența 78.50. Adnotări: zonă roșie peste gap-up + doji + confirmare, cu săgeata „gap-up în rezistență: aici cumpără cei întârziați"; săgeată spre volumul confirmării („volum slab: nimeni mare nu cumpără"); săgeată spre căderea de după („cade -înapoi sub 78.00: semnalul a mințit"). Level „rezistență 78.50". +înapoi sub rezistența 78.50: semnalul a mințit"). Level „rezistență 78.50". Fără linie de surse în SVG — trimiterile stau la finalul capitolului. Nivelurile 42.00 / 78.50 / cifrele de preț sunt construite (materialul nu dă prețuri pentru acest contrast); regulile și citatele de mai sus sunt din curs. diff --git a/gen/strategii/buy_doji_aplus.svg b/gen/strategii/buy_doji_aplus.svg index ddd20a8..23e0664 100644 --- a/gen/strategii/buy_doji_aplus.svg +++ b/gen/strategii/buy_doji_aplus.svg @@ -170,6 +170,6 @@ aici cumpără cei întârziați - cade înapoi sub 78.00: + cade înapoi sub rezistența 78.50: semnalul a mințit volum slab: nimeni mare nu cumpără \ No newline at end of file diff --git a/gen/strategii/buy_doji_directie.py b/gen/strategii/buy_doji_directie.py index 4d3421c..4e46099 100644 --- a/gen/strategii/buy_doji_directie.py +++ b/gen/strategii/buy_doji_directie.py @@ -125,8 +125,8 @@ candles(WK, WX0, WGAP, yw) text(xw(7), yw(WK[7][2]) + 16, "doji weekly", fill=ORANGE, anchor="middle", bold=True) # săgeata weekly: ce + de ce arrow(300, yw(WK[8][3]) - 6, xw(8) + 12, yw(WK[8][3]) - 6, GREEN) -text(306, yw(WK[8][3]) - 10, "weekly: Buy Doji confirmat (close 81.30, peste high-ul doji-ului 79.80)", - fill=GREEN, bold=True) +text(306, yw(WK[8][3]) - 10, f"weekly: Buy Doji confirmat (close {WK[8][3]:.2f}, " + f"peste high-ul doji-ului {WK[7][1]:.2f})", fill=GREEN, bold=True) text(306, yw(WK[8][3]) + 8, "deci direcția permisă e LONG: pe daily cauți doar Buy Doji", fill=GREEN) w_bottom = yw(min(b[2] for b in WK)) @@ -138,8 +138,8 @@ dmax = max(b[1] for b in DY) yd = lambda p: DT + (dmax - p) * DS # noqa: E731 xd = lambda i: DX0 + i * DGAP # noqa: E731 line(20, w_bottom + 34, W - 20, w_bottom + 34, "#ddd", 1) -text(20, w_bottom + 56, "daily: săptămânile de după confirmare (open 81.30 = close-ul ei)", - fill="#555", bold=True) +text(20, w_bottom + 56, f"daily: zilele de după confirmarea weekly " + f"(open {DY[0][0]:.2f} = close-ul ei)", fill="#555", bold=True) LX1, LX2, COL = xd(9) - 10, 392, 400 y_sl, y_e, y_tp = yd(SL), yd(ENTRY), yd(TP1) @@ -148,9 +148,9 @@ rect(xd(9) - 8, yd(DY[9][1]) - 3, DGAP + 16, yd(DY[10][2]) - yd(DY[9][1]) + 6, O line(LX1, y_sl, LX2, y_sl, RED, 1.5, "6 3") line(xd(10) - 8, y_e, LX2, y_e, ORANGE, 1.5, "6 3") line(xd(10) - 8, y_tp, LX2, y_tp, GRAY, 1.5, "2 3") -text(COL, y_sl + 4, "stop 84.85 = 5 cenți peste high-ul de 4 candele", fill=RED, size=11) -text(COL, y_e + 4, "intrare short 83.60", fill=ORANGE, size=11) -text(COL, y_tp + 4, "ținta 82.35 — neatinsă (a scăzut o zi, la 83.00)", +text(COL, y_sl + 4, f"stop {SL:.2f} = 5 cenți peste high-ul de 4 candele", fill=RED, size=11) +text(COL, y_e + 4, f"intrare short {ENTRY:.2f}", fill=ORANGE, size=11) +text(COL, y_tp + 4, f"ținta {TP1:.2f} — neatinsă (a scăzut o zi, la {LOW_AFTER:.2f})", fill=GRAY, size=11) candles(DY, DX0, DGAP, yd) @@ -160,16 +160,16 @@ out.append(f'') y_hit = DT - 40 arrow(560, y_hit + 6, cx14 + 9, y_sl - 9, RED) -text(568, y_hit, "aici te-a scos: stopul 84.85, lovit a patra zi", fill=RED, bold=True) +text(568, y_hit, f"aici te-a scos: stopul {SL:.2f}, lovit a {HIT - 10}-a zi", fill=RED, bold=True) text(568, y_hit + 18, "banii mari de pe weekly cumpără mai departe", fill=RED) # intrarea short: săgeată de jos-dreapta spre close-ul confirmării y_bot = yd(min(b[2] for b in DY)) x_e = xd(12) + 6 arrow(x_e, y_tp + 30, xd(10) + 7, y_e + 4, ORANGE) -text(x_e + 6, y_tp + 28, "aici ai intrat SHORT, la 83.60: Sell Doji corect ca formă", +text(x_e + 6, y_tp + 28, f"aici ai intrat SHORT, la {ENTRY:.2f}: Sell Doji corect ca formă", fill=ORANGE, bold=True) -text(x_e + 6, y_tp + 46, "(close sub low-ul doji-ului 83.95) — dar contra weekly-ului", +text(x_e + 6, y_tp + 46, f"(close sub low-ul doji-ului {DY[9][2]:.2f}) — dar contra weekly-ului", fill=ORANGE) y0 = max(y_bot, y_tp + 46) + 34 diff --git a/gen/strategii/buy_doji_directie.svg b/gen/strategii/buy_doji_directie.svg index 69605a1..04986e3 100644 --- a/gen/strategii/buy_doji_directie.svg +++ b/gen/strategii/buy_doji_directie.svg @@ -28,7 +28,7 @@ weekly: Buy Doji confirmat (close 81.30, peste high-ul doji-ului 79.80) deci direcția permisă e LONG: pe daily cauți doar Buy Doji - daily: săptămânile de după confirmare (open 81.30 = close-ul ei) + daily: zilele de după confirmarea weekly (open 81.30 = close-ul ei) @@ -73,7 +73,7 @@ - aici te-a scos: stopul 84.85, lovit a patra zi + aici te-a scos: stopul 84.85, lovit a 4-a zi banii mari de pe weekly cumpără mai departe diff --git a/gen/strategii/buy_doji_doji_forma.py b/gen/strategii/buy_doji_doji_forma.py index 7e3cf33..7cf0fd3 100644 --- a/gen/strategii/buy_doji_doji_forma.py +++ b/gen/strategii/buy_doji_doji_forma.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Ce e un doji și ce nu — patru candele cu același high 50.10 și low 49.20. +"""Ce e un doji și ce nu — patru candele cu același high 50.10 și low 49.25. Citește `gen/strategii/buy_doji_doji_forma.spec.txt` și scrie `gen/strategii/buy_doji_doji_forma.svg`. E prima imagine din capitol: cine o @@ -18,21 +18,21 @@ from pathlib import Path OUT = Path(__file__).with_suffix(".svg") GREEN, RED, GREY, BLUE = "#188a3e", "#c00", "#555", "#1a5fb4" -H, L = 50.10, 49.20 +H, L = 50.10, 49.25 RNG = H - L # (nume, o, h, l, c, verdict, rânduri de etichetă sub candelă) CANDLES = [ - ("A", 49.60, 50.10, 49.20, 49.55, "DA", ["DA: corp 0.05", "= 5,6 % din înălțime"]), - ("B", 49.62, 50.10, 49.20, 49.53, "DA", ["DA, la limită:", "corp 0.09 = 10 %"]), - ("C", 49.80, 50.10, 49.20, 49.50, "NU", ["NU: corp 0.30", "= 33 %"]), - ("D", 50.05, 50.10, 49.20, 50.10, "NU", ["NU: corp mic (5,6 %),", "dar fără fitil sus"]), + ("A", 49.60, 50.10, 49.25, 49.55, "DA", ["DA: corp 0.05", "= 5,9 % din înălțime"]), + ("B", 49.62, 50.10, 49.25, 49.54, "DA", ["DA, la limită:", "corp 0.08 = 9,4 %"]), + ("C", 49.80, 50.10, 49.25, 49.50, "NU", ["NU: corp 0.30", "= 35 %"]), + ("D", 50.05, 50.10, 49.25, 50.10, "NU", ["NU: corp mic (5,9 %),", "dar fără fitil sus"]), ] # --- assert-urile din spec -------------------------------------------------- ratio = {n: round(abs(c - o) / (h - l), 4) for n, o, h, l, c, *_ in CANDLES} for n, o, h, l, c, *_ in CANDLES: assert h == H and l == L, (n, h, l) # 1 -assert ratio == {"A": 0.0556, "B": 0.1000, "C": 0.3333, "D": 0.0556}, ratio # 2 +assert ratio == {"A": 0.0588, "B": 0.0941, "C": 0.3529, "D": 0.0588}, ratio # 2 for n, o, h, l, c, *_ in CANDLES[:2]: # 3 assert ratio[n] <= 0.10 and min(o, c) > l and max(o, c) < h, n assert ratio["C"] > 0.10 # 4 @@ -85,7 +85,7 @@ def arrow(x1, y1, x2, y2, color, lines, anchor="start"): text(x1 + dx, y0 + 14 * k, s, color, anchor, bold=(k == 0)) -text(24, 30, "Ce e un doji și ce nu — aceeași bară, 50.10 sus și 49.20 jos", "#333", +text(24, 30, "Ce e un doji și ce nu — aceeași bară, 50.10 sus și 49.25 jos", "#333", bold=True, size=14) # zonele: A+B sunt doji, C+D nu @@ -99,7 +99,7 @@ for p in (H, L): t(f'') text(24, y(H) - 6, "cât de sus a urcat prețul: 50.10") -text(24, y(L) + 14, "cât de jos a coborât: 49.20") +text(24, y(L) + 14, "cât de jos a coborât: 49.25") for (n, o, h, l, c, verdict, lines), x in zip(CANDLES, XS): color = GREEN if c >= o else RED @@ -128,7 +128,7 @@ text(xA + 20, y(cA) + 10, "close 49.55") # --- săgețile pe contraexemple ---------------------------------------------- xC, xD = XS[2], XS[3] arrow(xC + 34, y(H) - 112, xC + 14, y(49.78), RED, - lines=["corp prea gros (33 %)", "aici una din tabere a câștigat —", "nu mai e indecizie"]) + lines=["corp prea gros (35 %)", "aici una din tabere a câștigat —", "nu mai e indecizie"]) arrow(xD, y(H) - 34, xD, y(H) - 4, RED, anchor="middle", lines=["fără fitil sus", "regula cere fitil în ambele părți"]) diff --git a/gen/strategii/buy_doji_doji_forma.spec.txt b/gen/strategii/buy_doji_doji_forma.spec.txt index e676526..1e89097 100644 --- a/gen/strategii/buy_doji_doji_forma.spec.txt +++ b/gen/strategii/buy_doji_doji_forma.spec.txt @@ -5,24 +5,29 @@ tip: DEFINIȚIE de o candelă (stil vechi permis de STYLE.md: 4 cande proști": 2 zone dreptunghiulare + 5 săgeți cu text (CE + DE CE). destinație: summaries/17_STRATEGII/01_buy_doji.md, nivelul 1 („Ce e un doji") cheie markdown: -titlu SVG: „Ce e un doji și ce nu — aceeași bară, 50.10 sus și 49.20 jos" +titlu SVG: „Ce e un doji și ce nu — aceeași bară, 50.10 sus și 49.25 jos" CE TREBUIE SĂ DEMONSTREZE ------------------------- Testul „corp ≤ 10 % din range, fitil în ambele părți", pe patru candele cu -ACELAȘI high 50.10 și ACELAȘI low 49.20 (range 0.90). Diferă doar corpul. +ACELAȘI high 50.10 și ACELAȘI low 49.25 (range 0.85). Diferă doar corpul. +Low-ul e 49.25, nu 49.20: 49.20 e PREȚUL STOPULUI în restul capitolului, iar +prima diagramă a capitolului nu are voie să-l confunde cu low-ul dojiului +(corectat 19.09.2026). CANDELELE (o, h, l, c) și eticheta de sub fiecare ------------------------------------------------- -A (49.60, 50.10, 49.20, 49.55) „DA: corp 0.05 = 5.6 % din range" -B (49.62, 50.10, 49.20, 49.53) „DA, la limită: corp 0.09 = 10 % (parametrul 10)" -C (49.80, 50.10, 49.20, 49.50) „NU: corp 0.30 = 33 %" -D (50.05, 50.10, 49.20, 50.10) „NU: corp mic (5.6 %), dar fără fitil sus" +A (49.60, 50.10, 49.25, 49.55) „DA: corp 0.05 = 5,9 % din range" +B (49.62, 50.10, 49.25, 49.54) „DA, la limită: corp 0.08 = 9,4 % (parametrul 10)" +C (49.80, 50.10, 49.25, 49.50) „NU: corp 0.30 = 35 %" +D (50.05, 50.10, 49.25, 50.10) „NU: corp mic (5,9 %), dar fără fitil sus" +B nu mai pică rotund pe 10 % (ar fi cerut corp 0.085, preț urât); regula +„corpul <= 10 % din înălțime" e ce contează, nu cifra rotundă. Verdictul e în eticheta de sub candelă („DA: …" verde / „NU: …" roșu) și în eticheta zonei; nu se mai scrie DA/NU mare deasupra barei (se bătea cap în cap cu textul săgeților). Etichete de preț pe A: „cât de sus a urcat prețul: 50.10", „cât de jos a -coborât: 49.20", „open 49.60", „close 49.55" (open deasupra lui close, pentru +coborât: 49.25", „open 49.60", „close 49.55" (open deasupra lui close, pentru că open > close; verifică ordinea pe axă). ZONE (dreptunghiuri de evidențiere, fill-opacity 0.10) @@ -35,13 +40,13 @@ pe A, din stânga: spre fitilul de sus („fitilul de sus / cumpărătorii au împins, dar n-au ținut"); spre corp („corpul: aproape o linie / open și close aproape egale — nimeni n-a câștigat ziua"); spre fitilul de jos („fitilul de jos / vânzătorii au împins, dar n-au ținut"). -pe C, de sus: „corp prea gros (33 %) / aici una din tabere a câștigat — nu mai +pe C, de sus: „corp prea gros (35 %) / aici una din tabere a câștigat — nu mai e indecizie". pe D, de sus: „fără fitil sus / regula cere fitil în ambele părți". ASSERT-URI ---------- -1. Toate patru: h == 50.10, l == 49.20. -2. corp/range: A 0.0556, B 0.1000, C 0.3333, D 0.0556 (4 zecimale). +1. Toate patru: h == 50.10, l == 49.25. +2. corp/range: A 0.0588, B 0.0941, C 0.3529, D 0.0588 (4 zecimale). 3. A, B: corp/range <= 0.10 și min(o,c) > l și max(o,c) < h (fitil ambele părți). 4. C: corp/range > 0.10. D: max(o,c) == h (fitil sus zero). 5. y(open A) < y(close A) în pixeli (open mai sus pe ecran, fiindcă e preț mai mare). @@ -49,7 +54,7 @@ ASSERT-URI SURSA ----- - Doji: open ≈ close, corp foarte mic față de range, fitil în ambele părți: - summaries/03_MODUL_2/13_strategia_3_byh.md:15-30 (candela 50.10/49.20/49.60/49.55 + summaries/03_MODUL_2/13_strategia_3_byh.md:15-30 (candela 50.10/49.25/49.60/49.55 e cea din lecție, cu cifrele sumarizatorului). - Parametrul standard de doji pe 10 (nu 5): summaries/09_QA/28_2025-05-27.md:343-349. - Candelele B, C, D sunt CONSTRUITE pentru contrast. diff --git a/gen/strategii/buy_doji_doji_forma.svg b/gen/strategii/buy_doji_doji_forma.svg index b88848d..f6f08b0 100644 --- a/gen/strategii/buy_doji_doji_forma.svg +++ b/gen/strategii/buy_doji_doji_forma.svg @@ -1,29 +1,29 @@ - - Ce e un doji și ce nu — aceeași bară, 50.10 sus și 49.20 jos - + + Ce e un doji și ce nu — aceeași bară, 50.10 sus și 49.25 jos + doji - + nu e doji - + cât de sus a urcat prețul: 50.10 - cât de jos a coborât: 49.20 - + cât de jos a coborât: 49.25 + - DA: corp 0.05 - = 5,6 % din înălțime - - - DA, la limită: - corp 0.09 = 10 % - + DA: corp 0.05 + = 5,9 % din înălțime + + + DA, la limită: + corp 0.08 = 9,4 % + - NU: corp 0.30 - = 33 % - + NU: corp 0.30 + = 35 % + - NU: corp mic (5,6 %), - dar fără fitil sus + NU: corp mic (5,9 %), + dar fără fitil sus fitilul de sus @@ -41,12 +41,12 @@ close 49.55 - corp prea gros (33 %) + corp prea gros (35 %) aici una din tabere a câștigat — nu mai e indecizie fără fitil sus regula cere fitil în ambele părți - Doji = corpul e cel mult 10 % din înălțimea totală a barei (aici înălțimea e 0.90) și are fitil și sus, și jos. + Doji = corpul e cel mult 10 % din înălțimea totală a barei (aici înălțimea e 0.85) și are fitil și sus, și jos. diff --git a/gen/strategii/buy_doji_iesire.py b/gen/strategii/buy_doji_iesire.py index 2476c91..f3ac053 100644 --- a/gen/strategii/buy_doji_iesire.py +++ b/gen/strategii/buy_doji_iesire.py @@ -75,8 +75,9 @@ ch_a = Chart( where="below", price=steps[0][1], color=ORANGE, dx=130, dy=40), Arrow(steps[1][0] - S, "încă un gap: linia urcă la 52.60\nurcă doar, nu coboară niciodată", where="above", price=steps[1][1], color=ORANGE, dx=150), + # dx mare: cu dx=110 tija săgeții trecea peste textul portocaliu al gap-ului Arrow(iesire - S, "prima închidere sub linie: ieși\ncu a doua treime, la 52.30 (+1.58R)", - where="below", price=EXIT_A, color=RED, dx=110, dy=96), + where="below", price=EXIT_A, color=RED, dx=250, dy=96), ], title="A — prima treime la țintă, a doua pe trailing stop", **common, @@ -95,8 +96,6 @@ ch_b = Chart( title="B — limita de 8 candele: nici ținta, nici stopul", **common, ) -for k, c in enumerate(opt, 1): - c.tag = str(k) def panou(ch, sus_de=0.0): @@ -131,10 +130,16 @@ extra_a.append(f'A treia treime h_a = max(h_a, Y(SL) + 112) body_b, h_b, bx, by = panou(ch_b, h_a + VGAP) +y_num = ch_b._y(min(c.l for c in opt)) + by + 18 # un singur rând, lipit de bare extra_b = [ f'8 candele în care nu se întâmplă nimic', ] +for k, c in enumerate(opt, 1): + col = GREEN if c.c >= c.o else RED + extra_b.append(f'{k}') +assert y_num - (ch_b._y(min(c.l for c in opt)) + by) <= 24, "numerele stau prea departe de bare" H = h_b + 8 svg = "\n ".join([ f' + A — prima treime la țintă, a doua pe trailing stop @@ -58,10 +58,10 @@ încă un gap: linia urcă la 52.60 urcă doar, nu coboară niciodată - - - prima închidere sub linie: ieși - cu a doua treime, la 52.30 (+1.58R) + + + prima închidere sub linie: ieși + cu a doua treime, la 52.30 (+1.58R) linia de trailing stop prima treime: de la intrare la ținta 1:1 @@ -92,31 +92,31 @@ - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 a 8-a candelă: ieși oricum, la close 50.70 (+0.25R) banii blocați aici lipsesc din alt trade 8 candele în care nu se întâmplă nimic + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 \ No newline at end of file diff --git a/gen/strategii/buy_doji_labu.py b/gen/strategii/buy_doji_labu.py index 1e6eb6b..c6f0388 100644 --- a/gen/strategii/buy_doji_labu.py +++ b/gen/strategii/buy_doji_labu.py @@ -129,8 +129,13 @@ assert abs(TP1 - 97.55) < 1e-9, f"ținta 1:1 = {TP1}, capitolul spune 97.55" R = (TP - ENTRY) / (ENTRY - SL) assert 3.2 <= R <= 3.4, f"{R:.2f}R, capitolul spune „cam 3,3R”" I_TP1 = next(i for i in range(35, len(cds)) if cds[i].h >= TP1) # prima bară peste 1:1 -cds[I_TP1].note = (f"ținta 1:1 ({TP1:.2f}) e atinsă pe bara {I_TP1}: acolo vinzi o treime, " - "restul merge mai departe — de asta nu vinzi tot la 1:1") +# „a câta bară după intrare" — numărătoare fără ambiguitate 0/1, spre deosebire +# de „bara 40", care e indexul din serie, dar a 41-a bară dacă numeri cu degetul. +BARS_TP1 = I_TP1 - I_CONF +assert cds[I_TP1 - 1].h < TP1 <= cds[I_TP1].h, "I_TP1 nu e prima bară peste ținta 1:1" +assert BARS_TP1 == 6, f"ținta 1:1 la {BARS_TP1} bare după intrare, aștept 6" +cds[I_TP1].note = (f"ținta 1:1 ({TP1:.2f}) e atinsă a {BARS_TP1}-a bară după intrare: acolo " + "vinzi o treime, restul merge mai departe — de asta nu vinzi tot la 1:1") # --- assert-urile din specificație (toate, ca assert reale) ---------------- # 1. pivot 86.00 e straddled de doji @@ -220,23 +225,25 @@ ch = Chart( Level(ENTRY, "intrare 89.50", "#188a3e"), Level(TP1, f"ținta 1:1 {TP1:.2f}", "#777", dash="2 3", label_at="left"), Level(TP, "116.35 = +30 % față de intrare (procent real)", "#1a5fb4", label_at="left")], - zones=[Zone(0, B3, "1. setup: scădere lungă, apoi trei minime aproape egale — pivotul 86.00 atins de două ori", "#777"), + zones=[Zone(0, B1 + 1, "1. setup: scădere lungă, apoi primul test al pivotului 86.00", "#777"), + Zone(21, I_DOJI, "testul 2: minimele 2, 3 și doji-ul — fără revenire peste 86.00", "#777"), Zone(I_DOJI, I_CONF, "2. doji + confirmare", "#b06000"), # p_top sub 116.35: altfel eticheta zonei 3 se așază peste linia țintei Zone(I_CONF + 1, I_TP - 1, "3. trendul pornește", "#188a3e", p_top=113.0), Zone(I_TP, len(cds) - 1, "4. ținta", "#1a5fb4")], arrows=[Arrow(I_CONF, "aici intri, la close 89.50:\nabia acum știi că au câștigat cumpărătorii", ENTRY, where="above", color="#188a3e", dx=-150), - Arrow(B3, "al treilea minim: 81.45,\nfără o nouă atingere a pivotului\naici pui stopul, sub minime", - SL, where="below", color="#c00", dx=-40), + Arrow(B3, "minimul 3: 81.45 — tot din testul 2,\nprețul n-a mai urcat peste 86.00 după minimul 2\naici pui stopul, pe cel mai jos dintre cele trei minime", + SL, where="below", color="#c00", dx=-150), Arrow(I_RETEST, "retest: cade înapoi pe intrare\nși ține — trendul e sănătos", cds[I_RETEST].l, where="below", color="#188a3e", dx=110, dy=56), Arrow(FLAG[0] + 1, "aici se odihnește, nu se strică:\nbull flag, pe volum mic", cds[FLAG[0] + 1].h, where="above", color="#188a3e", dx=-20), Arrow(I_TP, f"a ajuns la 116.35: +30 % în 21 de zile de bursă,\ncam {R:.1f}R din cât ai riscat".replace("3.3R", "3,3R"), TP, where="left", color="#1a5fb4", dx=-30, dy=-40)], - marks=[Mark(B1, f"test 1 · {lows[B1]:.2f}", "#c00", "below"), - Mark(B2, f"test 2 · {lows[B2]:.2f}", "#c00", "below")], + marks=[Mark(B1, f"testul 1 · {lows[B1]:.2f}", "#c00", "below"), + Mark(20, "revenire peste pivot · 88.90", "#777", "above"), + Mark(B2, f"testul 2 · {lows[B2]:.2f}", "#c00", "below")], mas=[MA(20, "#b06000", dash="4 3", text="SMA-20")], scale=8.0, gap=15, body_w=9, left=44, width=w, vol_h=70, vol_label="volum", title="LABU — daily", diff --git a/gen/strategii/buy_doji_labu.spec.txt b/gen/strategii/buy_doji_labu.spec.txt index 86c912f..e8348fb 100644 --- a/gen/strategii/buy_doji_labu.spec.txt +++ b/gen/strategii/buy_doji_labu.spec.txt @@ -34,19 +34,29 @@ CE E REAL ȘI CE E CONSTRUIT (obligatoriu în legendă) (`13_strategia_3_byh.md:298-308`; `byh.md:256-280`). ADNOTĂRI (patru zone numerotate, ca subsecțiunile capitolului) -- Zona 1 (barele 0-31): „1. setup: scădere lungă, apoi trei minime aproape - egale — pivotul 86.00 atins de două ori"; Zona 2 (33-34): „2. doji + confirmare"; Zona 3 (35-54): +- Zona 1 (barele 0-17): „1. setup: scădere lungă, apoi primul test al + pivotului 86.00"; zona-bracket a testului 2 (barele 21-32): „testul 2: + minimele 2, 3 și doji-ul — fără revenire peste 86.00" (corectat 19.09.2026: + eticheta veche „pivotul 86.00 atins de două ori" îl lăsa pe cititor să + numere patru atingeri, fiindcă doji-ul stă PE pivot, iar bara dinaintea lui + traversează nivelul); Zona 2 (33-34): „2. doji + confirmare"; Zona 3 (35-54): „3. trendul pornește"; Zona 4 (55-56): „4. ținta". -- Marcaje sub minimele 1 și 2 („test 1 · 82.40", „test 2 · 82.00") — doar - ele sunt atingeri ale pivotului; al treilea minim e numit de săgeata stopului. +- Marcaje: „testul 1 · 82.40" sub minimul 1, „revenire peste pivot · 88.90" + deasupra barei 20, „testul 2 · 82.00" sub minimul 2 — doar cele două minime + sunt atingeri ale pivotului; minimul 3 și doji-ul aparțin tot testului 2 + (zona-bracket și săgeata stopului o spun). - Săgeți: retestul („retest: cade înapoi pe intrare și ține — trendul e sănătos"), bull flag-ul („aici se odihnește, nu se strică: bull flag, pe volum mic"), intrarea („aici intri, la close 89.50: abia acum știi că au câștigat cumpărătorii"), stopul, pe al treilea minim („al treilea minim: - 81.45, fără o nouă atingere a pivotului, aici pui stopul, sub minime"), rezultatul („a ajuns la 116.35: +30 % într-o + 81.45 — tot din testul 2, prețul n-a mai urcat peste 86.00 după minimul 2, + aici pui stopul, pe cel mai jos dintre cele trei minime" — stopul E cel mai + jos dintre minime, nu sub ele; formularea veche „sub minime" era falsă), rezultatul („a ajuns la 116.35: +30 % într-o lună, cam 3,3R din cât ai riscat"). -- Linie punctată pentru ținta 1:1 (97.55), cu nota de dedesubt: acolo vinzi - o treime, restul merge mai departe. +- Linie punctată pentru ținta 1:1 (97.55), cu nota de dedesubt: e atinsă a + 6-a bară după intrare (indexul 40 din serie = a 41-a bară dacă numeri cu + degetul — de asta nota spune „a 6-a bară după intrare", nu „bara 40"), + acolo vinzi o treime, restul merge mai departe. - Fără trimiteri fișier:linie în SVG; legenda „procentele sunt ale cursului, prețurile sunt puse de sumarizator" rămâne. @@ -78,7 +88,8 @@ Close-uri: 89.50, # 34 = confirmare => intrare 92.0, 94.0, 91.0, # 37 = retest (low 89.60, peste intrare) - 93.5, 95.5, 98.5, 100.0, # 40 = prima bară peste ținta 1:1 + 93.5, 95.5, 98.5, 100.0, # index 40 = prima bară peste ținta 1:1 + # (a 6-a bară după intrare) 99.2, 99.8, 98.9, 99.5, # 42-45 = bull flag, volum mic 102.5, 104.0, 103.0, 106.0, 108.5, 107.5, 110.5, 112.5, 114.0, 116.35, 117.5] # 55 = +30 %, la 21 de bare de confirmare @@ -109,6 +120,9 @@ CE VERIFICĂ GENERATORUL CU assert 10. bull flag (42-45): amplitudine <= 2.5, fără high nou față de bara 41, breakout pe bara 46, volum sub medie 8. doji: abs(o-c) <= 0.10*(h-l) +11. ținta 1:1: I_TP1 e prima bară cu high >= 97.55 (high-ul barei dinainte e + sub ea) și cade la 6 bare după confirmare — numărul din nota desenului e + derivat din serie, nu scris de mână. STIL: gap=15, body_w=9, left=44, width=990, vol_h=70 (volumul confirmă: „cel mai mare volum din serie" e în varianta MICI, nu obligatoriu aici — dar confirmarea are volum peste medie). scale astfel încât 86.00 → 116.35 să diff --git a/gen/strategii/buy_doji_labu.svg b/gen/strategii/buy_doji_labu.svg index ad08404..21f664f 100644 --- a/gen/strategii/buy_doji_labu.svg +++ b/gen/strategii/buy_doji_labu.svg @@ -1,7 +1,9 @@ LABU — daily - - 1. setup: scădere lungă, apoi trei minime aproape egale — pivotul 86.00 atins de două ori + + 1. setup: scădere lungă, apoi primul test al pivotului 86.00 + + testul 2: minimele 2, 3 și doji-ul — fără revenire peste 86.00 2. doji + confirmare @@ -193,17 +195,18 @@ volum - test 1 · 82.40 - test 2 · 82.00 + testul 1 · 82.40 + revenire peste pivot · 88.90 + testul 2 · 82.00 aici intri, la close 89.50: abia acum știi că au câștigat cumpărătorii - - - al treilea minim: 81.45, - fără o nouă atingere a pivotului - aici pui stopul, sub minime + + + minimul 3: 81.45 — tot din testul 2, + prețul n-a mai urcat peste 86.00 după minimul 2 + aici pui stopul, pe cel mai jos dintre cele trei minime retest: cade înapoi pe intrare @@ -217,6 +220,6 @@ a ajuns la 116.35: +30 % în 21 de zile de bursă, cam 3,3R din cât ai riscat doji = corp mic (o 86.10, c 86.00): cumpărătorii și vânzătorii sunt la egalitate, exact pe pivotul lunar 86.00 - ținta 1:1 (97.55) e atinsă pe bara 40: acolo vinzi o treime, restul merge mai departe — de asta nu vinzi tot la 1:1 + ținta 1:1 (97.55) e atinsă a 6-a bară după intrare: acolo vinzi o treime, restul merge mai departe — de asta nu vinzi tot la 1:1 Procentele (stop 9 %, +30 %) sunt ale cursului; nivelurile de preț sunt puse de sumarizator. \ No newline at end of file diff --git a/gen/strategii/buy_doji_locatie.py b/gen/strategii/buy_doji_locatie.py index 994199f..482b365 100644 --- a/gen/strategii/buy_doji_locatie.py +++ b/gen/strategii/buy_doji_locatie.py @@ -46,8 +46,8 @@ PX = [24, 24 + PW + 28] # x-ul stâng al fiecărui panou SCALE, TOP = 36.0, 96 # px/unitate și y-ul celui mai mare preț ARR = { - PX[0]: Arrow(8, "pivot lunar: nivel urmărit\nde mulți — aici apar\ncumpărătorii", - price=S1_DA, where="below", color=BLUE), + PX[0]: Arrow(2, "pivot lunar: nivel urmărit\nde mulți — aici apar\ncumpărătorii", + price=S1_DA, where="below", color=BLUE, dy=20), PX[1]: Arrow(4, "aceeași formă, dar nimic sub el\nnu are cine să-l susțină", where="below", color=RED, dx=100), } @@ -68,9 +68,11 @@ assert ch_da.scale == ch_nu.scale and ch_da._pmax == ch_nu._pmax, "scări diferi y = ch_da._y # axa e comună: același y pe ambele panouri -def level(px, price, text, color, below=False): +def level(px, price, text, color, below=False, right=False): yy = y(price) ty, anchor, tx = (yy + 14, "start", px + 6) if below else (yy - 6, "end", px + PW - 4) + if below and right: # ca să nu stea în tija unei săgeți + anchor, tx = "end", px + PW - 4 return [f'', f'{text}'] @@ -87,6 +89,7 @@ def zone(px, p_top, p_bot, label, color, label_at_bottom=False): f'style="font-weight:bold">{label}'] +PCT_DA, PCT_NU = f"{d_da:.2f}".replace(".", ","), f"{d_nu:.2f}".replace(".", ",") y_bot = y(S1_NU) parts = [ f'DA — doji la nivel', f'NU — doji în aer', f'', - *zone(PX[0], doji.l, S1_DA, f"{d_da:.2f} % — la nivel".replace(".", ","), GREEN), - *zone(PX[1], doji.l, S1_NU, f"gol de {d_nu:.2f} % sub doji — doji în aer".replace(".", ","), - RED, label_at_bottom=True), - *level(PX[0], S1_DA, "pivotul lunar 49.00", BLUE, below=True), + # capătul de sus al benzii e chiar low-ul dojiului: scris, ca să se vadă din + # ce cifră iese procentul (de la 49.25 la pivot), nu doar rezultatul + *zone(PX[0], doji.l, S1_DA, f"low-ul dojiului: {doji.l:.2f}", GREEN), + *zone(PX[1], doji.l, S1_NU, f"low-ul dojiului: {doji.l:.2f}", RED), + f'de la {doji.l:.2f} la {S1_DA:.2f} = ' + f'{PCT_DA} % — la nivel', # ancorat la dreapta: tija săgeții albastre + # trece pe la x-ul candelei 2, mult în stânga + f'de la {doji.l:.2f} la {S1_NU:.2f} = gol de ' + f'{PCT_NU} % — doji în aer', + *level(PX[0], S1_DA, "pivotul lunar 49.00", BLUE, below=True, right=True), *level(PX[1], PP_NU, "pivotul lunar 53.50", BLUE), *level(PX[1], S1_NU, "pivotul lunar 46.00", BLUE, below=True), body_da, body_nu, diff --git a/gen/strategii/buy_doji_locatie.spec.txt b/gen/strategii/buy_doji_locatie.spec.txt index 84b86b1..9d0974f 100644 --- a/gen/strategii/buy_doji_locatie.spec.txt +++ b/gen/strategii/buy_doji_locatie.spec.txt @@ -22,10 +22,13 @@ close-uri 52.20, 51.40, 50.60, 49.65, 49.60 (doji: o 49.65 h 50.10 l 49.25), NIVELURI -------- Stânga (DA): „pivotul lunar 49.00" (albastru) + ZONĂ verde între low-ul dojiului -(49.25) și 49.00, etichetă „0,51 % — la nivel"; SĂGEATĂ spre linia 49.00: +(49.25) și 49.00, cu capătul de sus etichetat „low-ul dojiului: 49.25" și sub +bandă rândul „de la 49.25 la 49.00 = 0,51 % — la nivel" (cifra din care iese +procentul trebuie să fie pe desen, nu doar rezultatul); SĂGEATĂ spre linia 49.00: „pivot lunar: nivel urmărit / de mulți — aici apar / cumpărătorii". Dreapta (NU): „pivotul lunar 46.00" jos, „pivotul lunar 53.50" sus; ZONĂ roșie -între 49.25 și 46.00, etichetă „gol de 7,07 % sub doji — doji în aer"; SĂGEATĂ +între 49.25 și 46.00, cu capătul de sus etichetat „low-ul dojiului: 49.25" și +în josul benzii „de la 49.25 la 46.00 = gol de 7,07 % — doji în aer"; SĂGEATĂ spre doji: „aceeași formă, dar nimic sub el / nu are cine să-l susțină". Sub ambele, un singur rând: „daily: e «la nivel» dacă low-ul dojiului e la cel mult 1-2 % de pivotul lunar (aici 0,51 %; în dreapta 7,07 %)". Rândul cu diff --git a/gen/strategii/buy_doji_locatie.svg b/gen/strategii/buy_doji_locatie.svg index 35f5e14..f79e6e3 100644 --- a/gen/strategii/buy_doji_locatie.svg +++ b/gen/strategii/buy_doji_locatie.svg @@ -4,11 +4,13 @@ NU — doji în aer - 0,51 % — la nivel + low-ul dojiului: 49.25 - gol de 7,07 % sub doji — doji în aer + low-ul dojiului: 49.25 + de la 49.25 la 49.00 = 0,51 % — la nivel + de la 49.25 la 46.00 = gol de 7,07 % — doji în aer - pivotul lunar 49.00 + pivotul lunar 49.00 pivotul lunar 53.50 @@ -35,11 +37,11 @@ doji confirmare - - - pivot lunar: nivel urmărit - de mulți — aici apar - cumpărătorii + + + pivot lunar: nivel urmărit + de mulți — aici apar + cumpărătorii diff --git a/gen/strategii/buy_doji_perechi_tf.py b/gen/strategii/buy_doji_perechi_tf.py index c8e19b3..8613e89 100644 --- a/gen/strategii/buy_doji_perechi_tf.py +++ b/gen/strategii/buy_doji_perechi_tf.py @@ -102,6 +102,7 @@ SL_X1, SL_X2 = 380, 614 # liniile de nivel pe graficul mic COL_X = 620 # coloana cu etichetele de nivel ale graficului mic out = [] +LABELS = [] # (x, text) al fiecărei etichete, pentru verificarea de panou def text(x, y, s, fill=INK, anchor="start", bold=False, size=None): @@ -112,6 +113,7 @@ def text(x, y, s, fill=INK, anchor="start", bold=False, size=None): st.append(f"font-size:{size}px") style = f' style="{";".join(st)}"' if st else "" a = f' text-anchor="{anchor}"' if anchor != "start" else "" + LABELS.append((x, s)) out.append(f'{s}') @@ -155,6 +157,7 @@ for key, f, tf_big, tf_small, cap, exp in ROWS: big, small = scaled(BIG_A, f), scaled(SMALL_A, f) g = check(key, big, small, exp) first = key == "A" + lab0 = len(LABELS) # titlu rând + subtitluri text(20, y0 + 14, f"{key}. {tf_big} → {tf_small}", bold=True, size=13) @@ -201,7 +204,7 @@ for key, f, tf_big, tf_small, cap, exp in ROWS: hline(SL_X1, SL_X2, y_tp, GREEN, "2 3") text(COL_X, y_tp + 4, f"ținta 1:1 {g['tp']:.2f}", fill=GREEN, size=11) text(COL_X, y_e + 4, f"intrare {g['entry']:.2f}", fill=GREEN, size=11) - text(COL_X, y_dh - 5, f"high doji {g['dh']:.2f}", fill="#666", size=11) + text(COL_X, y_dh - 5, f"nivel din {tf_big}", fill="#666", size=11) text(COL_X, y_sl + 12, f"stop {g['sl']:.2f}", fill=RED, size=11) if first: text(COL_X, y_sl + 25, "sub ultimele", fill=RED, size=11) @@ -230,6 +233,24 @@ for key, f, tf_big, tf_small, cap, exp in ROWS: anchor="middle", bold=True) text((bx + kx) / 2 + 20, ya + 31, "→ de 4 ori mai multe acțiuni la același risc", fill=RED, anchor="middle", bold=True) + # fiecare preț stă pe panoul lui: prețurile TF-ului mare nu apar în dreapta + # (SX0) și cele ale TF-ului mic nu apar în stânga. Asta e exact bug-ul care + # a pus „high doji 105.20" (weekly) pe graficul daily. + MARE = {k: g[k] for k in ("dh", "dl", "conf", "b_sl", "b_entry")} + MIC = {k: g[k] for k in ("entry", "sl", "tp", "sdl")} + for x, s_ in LABELS[lab0:]: + pe_mic = x >= SL_X1 - 20 + rau = MARE if pe_mic else MIC + for k, v in rau.items(): + assert f"{v:.2f}" not in s_, ( + f"{key}: eticheta {s_!r} de pe panoul " + f"{'mic' if pe_mic else 'mare'} conține prețul {k}={v:.2f} al celuilalt panou") + # și invers: prețul TF-ului mare chiar e scris pe panoul mare, legat de serie + assert any(f"{g['dh']:.2f}" in s_ and x < SL_X1 - 20 for x, s_ in LABELS[lab0:]), \ + f"{key}: high-ul dojiului mare nu apare pe panoul mare" + for k in ("entry", "sl", "tp"): + assert any(f"{g[k]:.2f}" in s_ and x >= SL_X1 - 20 for x, s_ in LABELS[lab0:]), \ + f"{key}: {k} nu apare pe panoul mic" print(f"{key}: doji mare {g['dh']:.2f}/{g['dl']:.2f} conf {g['conf']:.2f} | intrare {g['entry']:.2f} " f"SL {g['sl']:.2f} risc {g['risk']:.2f} ({g['pct']:.2f} %) TP1 {g['tp']:.2f} | " f"doar mare: risc {g['b_risk']:.2f} ({g['b_pct']:.2f} %)") diff --git a/gen/strategii/buy_doji_perechi_tf.spec.txt b/gen/strategii/buy_doji_perechi_tf.spec.txt index 6d82100..f07f8d5 100644 --- a/gen/strategii/buy_doji_perechi_tf.spec.txt +++ b/gen/strategii/buy_doji_perechi_tf.spec.txt @@ -57,7 +57,9 @@ NIVELURI (pe fiecare rând) -------------------------- Pe graficul mare: linie punctată gri la high-ul dojiului mare („high doji weekly 105.20" / „high doji monthly 113.00" / „high doji daily 102.08"). -Pe graficul mic: aceeași linie (nivelul la care se oprește pullback-ul); +Pe graficul mic: aceeași linie, dar etichetată „nivel din ", FĂRĂ +preț: un preț al TF-ului mare pe panoul TF-ului mic se citește ca trigger al +panoului mic. Prețurile de pe panoul mic sunt doar ale lui: intrare verde; SL roșu; TP1 verde punctat. ETICHETE @@ -90,6 +92,10 @@ Pe fiecare rând (A, B, C), pe seriile calculate: 8. abs(low mic[8] - high mare[9]) / high mare[9] <= 0.005 (doji mic la nivel, sub pragul cel mai strict, 0,5 %). 9. Raportul pixeli SL-intrare / intrare-TP1 == 1 pe fiecare grafic mic. +10. Fiecare preț stă pe panoul lui: nicio etichetă din dreapta (x >= SL_X1-20) + nu conține dh/dl/conf/b_sl/b_entry, nicio etichetă din stânga nu conține + entry/sl/tp/sdl; și invers, dh apare pe panoul mare, iar entry/sl/tp pe + cel mic. Asta e assert-ul care prinde „high doji 105.20" pus pe daily. SURSA ----- diff --git a/gen/strategii/buy_doji_perechi_tf.svg b/gen/strategii/buy_doji_perechi_tf.svg index b38e7e9..0efb991 100644 --- a/gen/strategii/buy_doji_perechi_tf.svg +++ b/gen/strategii/buy_doji_perechi_tf.svg @@ -43,7 +43,7 @@ ținta 1:1 107.50 intrare 106.30 - high doji 105.20 + nivel din weekly stop 105.10 sub ultimele 4 candele @@ -129,7 +129,7 @@ ținta 1:1 118.75 intrare 115.75 - high doji 113.00 + nivel din monthly stop 112.75 @@ -204,7 +204,7 @@ ținta 1:1 103.00 intrare 102.52 - high doji 102.08 + nivel din daily stop 102.04 diff --git a/gen/strategii/buy_doji_sell.py b/gen/strategii/buy_doji_sell.py index dab2ab1..8c49d8d 100644 --- a/gen/strategii/buy_doji_sell.py +++ b/gen/strategii/buy_doji_sell.py @@ -48,10 +48,12 @@ assert vols[14] > media_vol and vols[16] > media_vol, "volum peste medie pe doji cds = from_closes(closes, wicks=wicks, vols=vols, start=closes[0]) -doji, wait, conf = cds[14], cds[15], cds[16] +DOJI_I = 14 # indexul dojiului; barele 0..DOJI_I-1 sunt creșterea +doji, wait, conf = cds[DOJI_I], cds[15], cds[16] # stopul 5 cenți DEASUPRA high-ului, oglinda pasului 5 (51.60 -> 51.55 pe long); # cifrele vechi (SL 100.10, TP 97.90) puneau stopul exact pe high entry, sl, tp = 99.00, 100.15, 97.85 +risc = round(sl - entry, 2) # --- cele 9 assert-uri cerute de specificație ------------------------------ # 1. SL-ul e 5 cenți peste high-ul ultimelor 4 candele (100.10) @@ -80,6 +82,9 @@ assert cds[27].c < entry, "ieșirea n-ar fi pe profit" assert abs(doji.o - doji.c) <= 0.10 * (doji.h - doji.l), "bara 14 nu e doji" # 9. uptrend vizibil assert cds[13].c > cds[0].c + 5, "uptrend prea mic" +# 10. creșterea ține de la bara 0 până imediat înainte de doji — asta acoperă +# zona „1. creștere de N candele", cu N = DOJI_I +assert cds[DOJI_I - 1].c > cds[0].c + 5, "creșterea nu urcă până la doji" print(f"doji {doji.l:.2f}/{doji.h:.2f} intrare short {conf.c:.2f} " f"SL {sl:.2f} TP {tp:.2f} trail {trail:.2f} ieșire bara 27 @ {cds[27].c:.2f}") @@ -91,13 +96,16 @@ ch = Chart( levels=[ # etichetele în dreapta, dincolo de ultima candelă (width > ultima # candelă); titlul stă în stânga sus, deci nu mai are cu ce să se lovească - Level(sl, "stop 100.15", RED), - Level(entry, "intrare short 99.00", ORANGE), - Level(tp, "ținta 97.85", GREEN), + Level(sl, f"stop {sl:.2f}", RED), + Level(entry, f"intrare short {entry:.2f}", ORANGE), + Level(tp, f"ținta {tp:.2f}", GREEN), ], zones=[ - Zone(0, 9, "1. creștere de 10 candele", BLUE), - Zone(14, 14, "2. doji", ORANGE), + # zona acoperă TOATĂ creșterea (barele 0..13), iar numărul din etichetă + # iese din indici; p_top = high-ul dojiului, altfel eticheta urcă peste titlu + Zone(0, DOJI_I - 1, f"1. creșterea: {DOJI_I} candele", + BLUE, p_top=doji.h), + Zone(DOJI_I, DOJI_I, "2. doji", ORANGE), # ca unealta „short position" din TradingView: roșu = risc, SUS; # verde = câștig, JOS — pe short totul e întors față de long Zone(16, 19, "", RED, p_top=sl, p_bot=entry), @@ -107,15 +115,17 @@ ch = Chart( Zone(25, 30, "", GRAY, p_top=trail, p_bot=trail - 0.02), ], arrows=[ - Arrow(18, "STOPUL SUS, la 100.15 — 5 cenți peste maximul ultimelor 4 candele:\n" + Arrow(18, f"STOPUL SUS, la {sl:.2f} — 5 cenți peste maximul ultimelor 4 candele:\n" "dacă prețul urcă până aici, creșterea continuă și ideea e moartă", where="above", price=sl, color=RED, dx=110), - Arrow(16, "AICI INTRI SHORT, la 99.00:\na doua candelă după doji e prima\n" - "care se ÎNCHIDE sub low-ul lui (99.20)", + Arrow(16, f"AICI INTRI SHORT, la {entry:.2f}:\na doua candelă după doji e prima\n" + f"care se ÎNCHIDE sub low-ul lui ({doji.l:.2f})", where="below", color=ORANGE, dx=-70), - Arrow(19, "ținta JOS, la 97.85: tot 1.15, exact cât ai riscat;\naici închizi prima treime", + Arrow(19, f"ținta JOS, la {tp:.2f}: tot {risc:.2f}, exact cât ai riscat;\n" + "aici închizi prima treime", where="right", price=tp, color=GREEN, dx=50, dy=-32), - Arrow(27, "trail-ul a coborât după preț (96.45);\nprima închidere peste el: ieși cu restul, 96.60", + Arrow(27, f"trail-ul a coborât după preț ({trail:.2f});\nprima închidere peste el: " + f"ieși cu restul, {cds[27].c:.2f}", where="below", color=GRAY, dx=-40), ], scale=45.0, gap=20, body_w=9, left=44, width=790, vol_h=60, @@ -126,6 +136,16 @@ ch = Chart( svg = ch.render() assert "]*>([^<]*)", svg): + for n in re.findall(r"\d+\.\d\d", t): + assert n in PERMISE, f"eticheta {t!r} numește {n}, care nu iese din serie" +# numărul din eticheta zonei 1 == câte bare acoperă efectiv zona (0..DOJI_I-1) +z1 = ch.zones[0] +assert f"{z1.i1 - z1.i0 + 1} candele" in z1.text, "eticheta zonei 1 nu spune câte bare acoperă" +assert z1.i1 == DOJI_I - 1 and cds[z1.i1].c > cds[z1.i0].c + 5, "zona 1 nu acoperă creșterea" with open("/workspace/atm-curs-dl/gen/strategii/buy_doji_sell.svg", "w") as f: f.write(svg) print("scris gen/strategii/buy_doji_sell.svg") diff --git a/gen/strategii/buy_doji_sell.spec.txt b/gen/strategii/buy_doji_sell.spec.txt index 5b1cc62..f036a25 100644 --- a/gen/strategii/buy_doji_sell.spec.txt +++ b/gen/strategii/buy_doji_sell.spec.txt @@ -8,7 +8,7 @@ Graficul întreg al unui trade Sell Doji short, oglinda ansamblului long: uptrend de 14 candele, doji, o bară de așteptare care NU confirmă, apoi o bară care închide sub low, intrare short la close, SL 5 cenți deasupra high-ului ultimelor 4 candele, TP 1:1 în jos, apoi trailing. Panou de volum. -Format tutorial v2: zone de evidențiere („1. creștere de 10 candele", +Format tutorial v2: zone de evidențiere („1. creșterea: 14 candele" — barele 0..13, toată creșterea, „2. doji", cutie roșie = riscul, între intrare și stop, cutie verde = câștigul, între intrare și țintă — ca unealta „short position" din TradingView; segment gri = linia de trail) și 4 săgeți care spun ce ȘI de ce: stop, intrare, țintă, diff --git a/gen/strategii/buy_doji_sell.svg b/gen/strategii/buy_doji_sell.svg index 0d8d9d7..7a7872e 100644 --- a/gen/strategii/buy_doji_sell.svg +++ b/gen/strategii/buy_doji_sell.svg @@ -1,7 +1,7 @@ Sell Doji pe short — daily (exemplu construit) - - 1. creștere de 10 candele + + 1. creșterea: 14 candele 2. doji diff --git a/gen/strategii/buy_doji_stop.py b/gen/strategii/buy_doji_stop.py index 0db2cc1..be48ec1 100644 --- a/gen/strategii/buy_doji_stop.py +++ b/gen/strategii/buy_doji_stop.py @@ -123,9 +123,12 @@ for k, n in zip(range(cf - 3, cf + 1), "4321"): nums.append(f'{n}') nums.append(f'(5)') -nums.append(f'' +# subtitrarea stă sub TOT ce a desenat panoul: altfel tija săgeții gri spre +# „cel mai jos low din cele 4" îi trece orizontal peste rând și textul iese tăiat +y_sub = max([yb] + [float(m) for m in re.findall(r']*\sy="([\d.]+)"', body_sus)]) + 24 +nums.append(f'' f'cu 4 sau cu 5 candele iese la fel: în scădere, low-ul doji-ului e oricum cel mai jos') -h_sus = max(h_sus, yb + 32) +h_sus = max(h_sus, y_sub + 12) body_jos, h_jos, off_jos = panou(gata, h_sus + VGAP) zx = gata._cx(cf + 3) + 10 diff --git a/gen/strategii/buy_doji_stop.spec.txt b/gen/strategii/buy_doji_stop.spec.txt index e2c2a10..43558f6 100644 --- a/gen/strategii/buy_doji_stop.spec.txt +++ b/gen/strategii/buy_doji_stop.spec.txt @@ -61,3 +61,9 @@ SURSA - Stopul sub structură; bottom-ul mai poate face un picior: summaries/08_ANALIZA_ZILNICA/01_buy_doji_si_strategia_mici.md:833-836. - Stopul „la ochi" 49.70 și barele de după intrare sunt CONSTRUITE (contrast). + +LIZIBILITATE +------------ +Subtitrarea „cu 4 sau cu 5 candele iese la fel…" se pune sub TOT ce a desenat +panoul de sus (y calculat din textele randate), nu la offset fix: tija săgeții +gri spre „cel mai jos low din cele 4" îi trecea orizontal peste rând. diff --git a/gen/strategii/buy_doji_stop.svg b/gen/strategii/buy_doji_stop.svg index d3b51c3..1e5e06a 100644 --- a/gen/strategii/buy_doji_stop.svg +++ b/gen/strategii/buy_doji_stop.svg @@ -1,4 +1,4 @@ - + Pasul 5 — stopul: numeri 4 candele înapoi de la confirmare numeri 4 candele, începând cu confirmarea @@ -44,69 +44,69 @@ 2 1 (5) - cu 4 sau cu 5 candele iese la fel: în scădere, low-ul doji-ului e oricum cel mai jos - - Același trade: stop „la ochi” (sub candela de confirmare) vs stopul din regulă - - - ținta 1: 51.60 - - intrarea: 50.40 - - stop pus la ochi: 49.70 - - stopul din regulă: 49.20 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - stopul pus la ochi (49.70) e măturat - era prea aproape de intrare - - - al doilea picior al fundului: 49.50 - fundurile fac des asta - - - stopul din regulă (49.20) ține - al doilea picior rămâne peste el - - - prețul ajunge la țintă - dar numai cu stopul corect - mai erai în trade - Barele de după intrare și stopul la ochi sunt construite, pentru contrast. - pe aici trece al doilea picior + cu 4 sau cu 5 candele iese la fel: în scădere, low-ul doji-ului e oricum cel mai jos + + Același trade: stop „la ochi” (sub candela de confirmare) vs stopul din regulă + + + ținta 1: 51.60 + + intrarea: 50.40 + + stop pus la ochi: 49.70 + + stopul din regulă: 49.20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + stopul pus la ochi (49.70) e măturat + era prea aproape de intrare + + + al doilea picior al fundului: 49.50 + fundurile fac des asta + + + stopul din regulă (49.20) ține + al doilea picior rămâne peste el + + + prețul ajunge la țintă + dar numai cu stopul corect + mai erai în trade + Barele de după intrare și stopul la ochi sunt construite, pentru contrast. + pe aici trece al doilea picior \ No newline at end of file diff --git a/gen/strategii/buy_doji_transe.py b/gen/strategii/buy_doji_transe.py index 0bbfb25..9007d16 100644 --- a/gen/strategii/buy_doji_transe.py +++ b/gen/strategii/buy_doji_transe.py @@ -21,7 +21,7 @@ from buy_doji_ansamblu import serie, DOJI, CONF, DOJI_L, ENTRY, SL, TP1, R # no OUT = Path(__file__).with_suffix(".svg") S = 12 # prima bară arătată (zoom pe fereastra de intrare) GREEN, RED, ORANGE, BLUE, GREY = "#188a3e", "#c00", "#b06000", "#1a5fb4", "#555" -W, SCALE = 930, 100.0 +W, SCALE = 1320, 240.0 cds = serie()[S:20] # până la bara care atinge ținta d, cf = DOJI - S, CONF - S # doji, confirmare (indici locali) @@ -60,15 +60,10 @@ ch = Chart( candles=cds, levels=[Level(TP1, "ținta 1: 51.60 = 1R față de close", GREEN, "2 2"), Level(TP_MED, f"ținta 1: {TP_MED:.2f} = 1R față de prețul mediu {MED:.2f}", BLUE, "2 2"), + Level(ENTRY, "intrarea (close-ul de confirmare): 50.40", GREEN, "4 3"), Level(SL, "stopul: 49.20", RED, "4 3", "left")], zones=[Zone(cf, cf, "", GREEN, p_top=T1, p_bot=op)], arrows=[ - Arrow(cf, "1/3 la close 50.40\nca să nu ratezi trade-ul dacă pleacă fără tine", - where="right", price=T1, color=GREEN, dx=150, dy=dy_sub(T1, 40)), - Arrow(cf, "1/3 cu ordin limită la 50.23 (o treime din corp)\nmai ieftin, dacă prețul revine", - where="right", price=T2, color=ORANGE, dx=150, dy=dy_sub(T2, 74)), - Arrow(cf, "1/3 cu ordin limită la 50.15 (jumătatea corpului)\nși mai ieftin", - where="right", price=T3, color=ORANGE, dx=150, dy=dy_sub(T3, 108)), Arrow(cf - 1, "media mai bună coboară ținta:\nieși la 51.32, nu la 51.60", where="above", price=TP_MED, color=BLUE, dx=150), Arrow(cf + 1, "retestul: prețul revine la 50.10\nși umple amândouă ordinele limită", @@ -76,7 +71,6 @@ ch = Chart( ], scale=SCALE, gap=30, body_w=10, left=56, width=W, title="Intrarea în trei tranșe — același trade (doji 50.10 / 49.25)", - caption="Paranteza de pe candela de confirmare e corpul ei (49.90 → 50.40): pe el se măsoară 1/3 și 1/2. Stopul e unul singur. Exemplu construit.", ) svg = ch.render() OFF = (float(re.search(r'', + f''] + y0 = y1 + 4 - LH * (len(randuri) - 1) / 2 + for k, t in enumerate(randuri): + out.append(f'{t}') + return out + + ex = [] # paranteza corpului, în stânga candelei de confirmare, cu diviziunile 1/3 și 1/2 xb = x(cf) - 17 @@ -102,33 +115,79 @@ ex.append(f'') # fără etichetă lângă paranteză: oriunde lângă candele s-ar suprapune peste ele # sau peste liniile săgeților. O numește legenda de sub grafic. -# nivelurile de tranșă, ca segmente scurte peste candela de confirmare -for p, col in ((T1, GREEN), (T2, ORANGE), (T3, ORANGE)): - dash = "" if p == T1 else ' stroke-dasharray="3 3"' - ex.append(f'') + +# Fiecare tranșă are linia ei de nivel, prelungită la dreapta pe o lungime +# diferită, cu prețul scris la capăt. Săgeata tranșei se termină pe capătul +# liniei ei: trei puncte de sosire distanțate și pe orizontală, și pe verticală +# (altfel, la aceeași candelă, cele trei vârfuri ies într-un ghem de 10 px). +XT1, XT2, XT3 = x(len(cds) - 1) + 230, x(len(cds) - 1) + 150, x(len(cds) - 1) + 70 +TRANSE = ((T1, GREEN, XT1, "", ["1/3 la close 50.40", + "ca să nu ratezi trade-ul dacă pleacă fără tine"]), + (T2, ORANGE, XT2, ' stroke-dasharray="3 3"', + ["1/3 cu ordin limită la 50.23 (o treime din corp)", + "mai ieftin, dacă prețul revine"]), + (T3, ORANGE, XT3, ' stroke-dasharray="3 3"', + ["1/3 cu ordin limită la 50.15 (jumătatea corpului)", + "și mai ieftin"])) +XTAIL = x(len(cds) - 1) + 114 # coada tuturor celor trei săgeți, sub stop +for k, (p_, col, xend, dash, randuri) in enumerate(TRANSE): + if p_ != T1: # T1 e chiar nivelul de intrare, deja desenat + ex.append(f'') + # prețul deasupra liniei, nu pe ea + ex.append(f'{p_:.2f}') + ex += sageata(XTAIL, Y(SL) + 46 + 40 * k, xend, Y(p_), col, randuri) # unde se umple fiecare tranșă: T1 la close, T2 și T3 pe low-ul barei următoare -for i, p, col in ((cf, T1, GREEN), (cf + 1, T2, ORANGE), (cf + 1, T3, ORANGE)): - ex.append(f'') -# cele două paranteze de risc, la dreapta: tot la close vs cu tranșe -for xp, hi_p, txt, col in ((x(len(cds) - 1) + 40, T1, - f"risc {RISC_CLOSE:.2f} pe acțiune (tot la close)", RED), - (x(len(cds) - 1) + 290, MED, - f"risc {RISC_MED:.2f} pe acțiune (cu tranșe, preț mediu {MED:.2f})", BLUE)): +# cele două paranteze de risc: tot la close vs cu tranșe. Pleacă amândouă de la +# un nivel desenat (intrarea 50.40, respectiv media 50.26) și coboară la stop. +# Stau una lângă alta, cu textele la dreapta amândurora, la înălțimi diferite — +# altfel textul uneia trece peste paranteza celeilalte. +XTXT = x(len(cds) - 1) + 664 +for xp, hi_p, ty, txt, col in ( + (x(len(cds) - 1) + 560, T1, Y(T1) + 50, + f"risc {RISC_CLOSE:.2f} pe acțiune (tot la close, de la intrarea {T1:.2f})", RED), + (x(len(cds) - 1) + 640, MED, Y(SL) - 50, + f"risc {RISC_MED:.2f} pe acțiune (cu tranșe, de la prețul mediu {MED:.2f})", BLUE)): y1, y2 = Y(hi_p), Y(SL) ex.append(f'') - ex.append(f'') + ex.append(f'{txt}') +# nivelul prețului mediu: segment scurt, ca paranteza albastră să plece de pe o linie +ex.append(f'') +ex.append(f'' + f'prețul mediu al celor trei tranșe: {MED:.2f}') + + body = svg.rsplit("", 1)[0].rstrip() svg = "\n ".join([body, *ex]) + "\n" vw, vh = (float(v) for v in re.search(r'viewBox="0 0 ([\d.]+) ([\d.]+)"', svg).groups()) +# textele desenate manual trec sub pânza calculată de Chart: crește înălțimea +y_max = max(float(m) for m in re.findall(r']*\sy="([\d.]+)"', svg)) +vh = max(vh, y_max + 34) +CAPTION = ("Paranteza de pe candela de confirmare e corpul ei (49.90 → 50.40): pe el se măsoară " + "1/3 și 1/2. Stopul e unul singur. Exemplu construit.") +svg = svg.replace("", f' {CAPTION}\n') +svg = re.sub(r'viewBox="0 0 [\d.]+ [\d.]+"', f'viewBox="0 0 {vw:.0f} {vh:.0f}"', svg, count=1) + for tx, attrs, txt in re.findall(r']*)>(.*?)', svg): ty = float(re.search(r'y="([-\d.]+)"', attrs).group(1)) - w = len(txt) * 6.2 + w = len(txt) * CW x0 = float(tx) - (w if 'text-anchor="end"' in attrs else w / 2 if 'middle' in attrs else 0) - assert 0 <= x0 and x0 + w <= vw and 0 <= ty <= vh, f"text în afara pânzei: {txt!r}" + assert 0 <= x0 and x0 + w <= vw, f"text în afara pânzei pe orizontală: {txt!r}" + assert 0 <= ty <= vh, f"text în afara pânzei pe verticală: {txt!r}" assert "\n\n" not in svg, "linie goală în SVG" +# cele trei săgeți de tranșă trebuie să sosească la înălțimi și la x-uri distincte +tips = [(XT1, Y(T1)), (XT2, Y(T2)), (XT3, Y(T3))] +for (ax, ay), (bx_, by_) in ((tips[0], tips[1]), (tips[1], tips[2]), (tips[0], tips[2])): + assert abs(ax - bx_) >= 60 and abs(ay - by_) >= 18, \ + f"vârfuri de săgeată prea apropiate: {(ax, ay)} vs {(bx_, by_)}" OUT.write_text(svg, encoding="utf-8") print(f"scris {OUT} ({vw:.0f}x{vh:.0f})") diff --git a/gen/strategii/buy_doji_transe.spec.txt b/gen/strategii/buy_doji_transe.spec.txt index 5acaae1..e2267b5 100644 --- a/gen/strategii/buy_doji_transe.spec.txt +++ b/gen/strategii/buy_doji_transe.spec.txt @@ -25,8 +25,13 @@ Măsurat pe toată candela (49.75 → 50.55), 1/3 ar fi 50.28, iar 1/2 iese tot ADNOTĂRI -------- -Zonă verde peste corpul candelei de confirmare; paranteză cu corpul -(49.90 → 50.40) în stânga ei; trei segmente scurte pentru T1/T2/T3 și cerculețe +Nivel de intrare desenat pe toată lățimea (50.40 = T1), ca parantezele de risc +să aibă de unde pleca vizual. Zonă verde peste corpul candelei de confirmare; +paranteză cu corpul (49.90 → 50.40) în stânga ei; segmente pentru T2/T3 (T1 e +chiar nivelul de intrare), prelungite spre dreapta pe lungimi diferite, cu +prețul scris la capăt — fiecare săgeată de tranșă se termină pe capătul liniei +ei, deci cele trei vârfuri sunt distanțate și pe orizontală, și pe verticală +(la scara veche ieșeau într-un ghem de 10 px). Cerculețe acolo unde se umple fiecare tranșă (T1 la close, T2 și T3 pe low-ul barei următoare); trei săgeți, câte una pe tranșă, cu motivul („ca să nu ratezi trade-ul dacă pleacă fără tine" / „mai ieftin, dacă prețul revine" / „și mai @@ -43,7 +48,10 @@ ASSERT-URI 5. min(low) pe ultimele 4 candele de la confirmare == 49.25; stop 49.20. 6. close + 1.20 == 51.60, atinsă prima dată la ultima bară arătată. 7. măsurat pe toată candela: 1/3 == 50.28, 1/2 == 50.15 (tot T3). -8. niciun text nu iese din pânză. +8. niciun text nu iese din pânză (și pe lățime, și pe înălțime, ținând cont de + text-anchor). +9. cele trei vârfuri de săgeată de tranșă sunt la cel puțin 60 px unul de altul + pe orizontală și 18 px pe verticală. SURSA ----- diff --git a/gen/strategii/buy_doji_transe.svg b/gen/strategii/buy_doji_transe.svg index 76ea005..b7f5d3b 100644 --- a/gen/strategii/buy_doji_transe.svg +++ b/gen/strategii/buy_doji_transe.svg @@ -1,58 +1,66 @@ - + Intrarea în trei tranșe — același trade (doji 50.10 / 49.25) - - - ținta 1: 51.60 = 1R față de close - - ținta 1: 51.32 = 1R față de prețul mediu 50.26 - - stopul: 49.20 - - - - - - - - - - - - - - - - - - - 1/3 la close 50.40 - ca să nu ratezi trade-ul dacă pleacă fără tine - - - 1/3 cu ordin limită la 50.23 (o treime din corp) - mai ieftin, dacă prețul revine - - - 1/3 cu ordin limită la 50.15 (jumătatea corpului) - și mai ieftin - - - media mai bună coboară ținta: - ieși la 51.32, nu la 51.60 - - - retestul: prețul revine la 50.10 - și umple amândouă ordinele limită - Paranteza de pe candela de confirmare e corpul ei (49.90 → 50.40): pe el se măsoară 1/3 și 1/2. Stopul e unul singur. Exemplu construit. - - - - - - - - - risc 1.20 pe acțiune (tot la close) - - risc 1.06 pe acțiune (cu tranșe, preț mediu 50.26) + + + ținta 1: 51.60 = 1R față de close + + ținta 1: 51.32 = 1R față de prețul mediu 50.26 + + intrarea (close-ul de confirmare): 50.40 + + stopul: 49.20 + + + + + + + + + + + + + + + + + + + media mai bună coboară ținta: + ieși la 51.32, nu la 51.60 + + + retestul: prețul revine la 50.10 + și umple amândouă ordinele limită + + 50.40 + + + 1/3 la close 50.40 + ca să nu ratezi trade-ul dacă pleacă fără tine + + 50.23 + + + 1/3 cu ordin limită la 50.23 (o treime din corp) + mai ieftin, dacă prețul revine + + 50.15 + + + 1/3 cu ordin limită la 50.15 (jumătatea corpului) + și mai ieftin + + + + + + risc 1.20 pe acțiune (tot la close, de la intrarea 50.40) + + + risc 1.06 pe acțiune (cu tranșe, de la prețul mediu 50.26) + + prețul mediu al celor trei tranșe: 50.26 + Paranteza de pe candela de confirmare e corpul ei (49.90 → 50.40): pe el se măsoară 1/3 și 1/2. Stopul e unul singur. Exemplu construit. \ No newline at end of file diff --git a/summaries/17_STRATEGII/01_buy_doji.html b/summaries/17_STRATEGII/01_buy_doji.html index bbf787c..7f07d65 100644 --- a/summaries/17_STRATEGII/01_buy_doji.html +++ b/summaries/17_STRATEGII/01_buy_doji.html @@ -40,32 +40,32 @@ dificultate 2/5 · merge pe prop (cont finanțat de o firmă): da,

Un doji e o candelă care se închide aproape la prețul la care s-a deschis: corpul e o linie subțire, iar fitilele ies și în sus, și în jos. Spune că în perioada aceea cumpărătorii și vânzătorii au fost la egalitate.

-

- Ce e un doji și ce nu — aceeași bară, 50.10 sus și 49.20 jos - +

+ Ce e un doji și ce nu — aceeași bară, 50.10 sus și 49.25 jos + doji - + nu e doji - + cât de sus a urcat prețul: 50.10 - cât de jos a coborât: 49.20 - + cât de jos a coborât: 49.25 + - DA: corp 0.05 - = 5,6 % din înălțime - - - DA, la limită: - corp 0.09 = 10 % - + DA: corp 0.05 + = 5,9 % din înălțime + + + DA, la limită: + corp 0.08 = 9,4 % + - NU: corp 0.30 - = 33 % - + NU: corp 0.30 + = 35 % + - NU: corp mic (5,6 %), - dar fără fitil sus + NU: corp mic (5,9 %), + dar fără fitil sus fitilul de sus @@ -83,14 +83,14 @@ perioada aceea cumpărătorii și vânzătorii au fost la egalitate.

close 49.55 - corp prea gros (33 %) + corp prea gros (35 %) aici una din tabere a câștigat — nu mai e indecizie fără fitil sus regula cere fitil în ambele părți - Doji = corpul e cel mult 10 % din înălțimea totală a barei (aici înălțimea e 0.90) și are fitil și sus, și jos. + Doji = corpul e cel mult 10 % din înălțimea totală a barei (aici înălțimea e 0.85) și are fitil și sus, și jos.

Ce face strategia

Când prețul a scăzut mai multe zile la rând și apare un doji, e posibil ca @@ -348,7 +348,7 @@ Un Sell Doji weekly „nu înseamnă neapărat că se va materializa", dar la weekly: Buy Doji confirmat (close 81.30, peste high-ul doji-ului 79.80) deci direcția permisă e LONG: pe daily cauți doar Buy Doji - daily: săptămânile de după confirmare (open 81.30 = close-ul ei) + daily: zilele de după confirmarea weekly (open 81.30 = close-ul ei) @@ -393,7 +393,7 @@ Un Sell Doji weekly „nu înseamnă neapărat că se va materializa", dar la - aici te-a scos: stopul 84.85, lovit a patra zi + aici te-a scos: stopul 84.85, lovit a 4-a zi banii mari de pe weekly cumpără mai departe @@ -534,11 +534,13 @@ au motiv să apară.

NU — doji în aer - 0,51 % — la nivel + low-ul dojiului: 49.25 - gol de 7,07 % sub doji — doji în aer + low-ul dojiului: 49.25 + de la 49.25 la 49.00 = 0,51 % — la nivel + de la 49.25 la 46.00 = gol de 7,07 % — doji în aer - pivotul lunar 49.00 + pivotul lunar 49.00 pivotul lunar 53.50 @@ -565,11 +567,11 @@ au motiv să apară.

doji confirmare - - - pivot lunar: nivel urmărit - de mulți — aici apar - cumpărătorii + + + pivot lunar: nivel urmărit + de mulți — aici apar + cumpărătorii @@ -695,7 +697,7 @@ execută ca ordine de cumpărare. De aceea mișcarea se întoarce brusc.

Pasul 5 — Stopul și mărimea poziției

Numeri 4 candele înapoi, începând cu cea de confirmare, iei cel mai jos low dintre ele și pui stopul puțin sub el.

-

+

Pasul 5 — stopul: numeri 4 candele înapoi de la confirmare numeri 4 candele, începând cu confirmarea @@ -741,71 +743,71 @@ dintre ele și pui stopul puțin sub el.

2 1 (5) - cu 4 sau cu 5 candele iese la fel: în scădere, low-ul doji-ului e oricum cel mai jos - - Același trade: stop „la ochi” (sub candela de confirmare) vs stopul din regulă - - - ținta 1: 51.60 - - intrarea: 50.40 - - stop pus la ochi: 49.70 - - stopul din regulă: 49.20 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - stopul pus la ochi (49.70) e măturat - era prea aproape de intrare - - - al doilea picior al fundului: 49.50 - fundurile fac des asta - - - stopul din regulă (49.20) ține - al doilea picior rămâne peste el - - - prețul ajunge la țintă - dar numai cu stopul corect - mai erai în trade - Barele de după intrare și stopul la ochi sunt construite, pentru contrast. - pe aici trece al doilea picior + cu 4 sau cu 5 candele iese la fel: în scădere, low-ul doji-ului e oricum cel mai jos + + Același trade: stop „la ochi” (sub candela de confirmare) vs stopul din regulă + + + ținta 1: 51.60 + + intrarea: 50.40 + + stop pus la ochi: 49.70 + + stopul din regulă: 49.20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + stopul pus la ochi (49.70) e măturat + era prea aproape de intrare + + + al doilea picior al fundului: 49.50 + fundurile fac des asta + + + stopul din regulă (49.20) ține + al doilea picior rămâne peste el + + + prețul ajunge la țintă + dar numai cu stopul corect + mai erai în trade + Barele de după intrare și stopul la ochi sunt construite, pentru contrast. + pe aici trece al doilea picior

Sus, candelele numerotate de la confirmare. Cel mai jos low e al doji-ului, 49.25, iar stopul merge la 49.20, cu 5 cenți sub. După o scădere, low-ul @@ -849,7 +851,7 @@ iar după ce e atinsă lași restul pe trailing stop.

Limita de timp: dacă în 8 candele de la intrare nu s-a atins nici ținta, nici stopul, ieși oricum, la close-ul celei de-a 8-a.

-

+

A — prima treime la țintă, a doua pe trailing stop @@ -909,10 +911,10 @@ nici stopul, ieși oricum, la close-ul celei de-a 8-a.

încă un gap: linia urcă la 52.60 urcă doar, nu coboară niciodată - - - prima închidere sub linie: ieși - cu a doua treime, la 52.30 (+1.58R) + + + prima închidere sub linie: ieși + cu a doua treime, la 52.30 (+1.58R) linia de trailing stop prima treime: de la intrare la ținta 1:1 @@ -943,33 +945,33 @@ nici stopul, ieși oricum, la close-ul celei de-a 8-a.

- 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 a 8-a candelă: ieși oricum, la close 50.70 (+0.25R) banii blocați aici lipsesc din alt trade 8 candele în care nu se întâmplă nimic + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8

Sus, prima treime iese la 51.60. Apar două candele cu gap, care urcă linia de trail întâi la 51.95, apoi la 52.60; a doua treime iese la 52.30, prima @@ -999,8 +1001,8 @@ construite. Împărțirea în trei treimi e a sumarizatorului lecției; ținta

Sell Doji pe short — daily (exemplu construit) - - 1. creștere de 10 candele + + 1. creșterea: 14 candele 2. doji @@ -1329,7 +1331,7 @@ Cele două panouri din diagramă sunt alte simboluri, cu alte prețuri (42 $ și aici cumpără cei întârziați - cade înapoi sub 78.00: + cade înapoi sub rezistența 78.50: semnalul a mințit volum slab: nimeni mare nu cumpără

@@ -1418,7 +1420,7 @@ simbol: prețurile sunt în jur de 105 $. „MICI" e numele dat de curs variante ținta 1:1 107.50 intrare 106.30 - high doji 105.20 + nivel din weekly stop 105.10 sub ultimele 4 candele @@ -1504,7 +1506,7 @@ simbol: prețurile sunt în jur de 105 $. „MICI" e numele dat de curs variante ținta 1:1 118.75 intrare 115.75 - high doji 113.00 + nivel din monthly stop 112.75 @@ -1579,7 +1581,7 @@ simbol: prețurile sunt în jur de 105 $. „MICI" e numele dat de curs variante ținta 1:1 103.00 intrare 102.52 - high doji 102.08 + nivel din daily stop 102.04 @@ -1732,63 +1734,71 @@ Buy Doji nu apar deloc și le vezi doar cu ochiul.

În sesiunile de întrebări, autorul predă ca „corectă" o treime la close și restul cu ordine limită (se execută doar la prețul dat sau mai bun) mai jos, în corpul candelei de confirmare.

-

+

Intrarea în trei tranșe — același trade (doji 50.10 / 49.25) - - - ținta 1: 51.60 = 1R față de close - - ținta 1: 51.32 = 1R față de prețul mediu 50.26 - - stopul: 49.20 - - - - - - - - - - - - - - - - - - - 1/3 la close 50.40 - ca să nu ratezi trade-ul dacă pleacă fără tine - - - 1/3 cu ordin limită la 50.23 (o treime din corp) - mai ieftin, dacă prețul revine - - - 1/3 cu ordin limită la 50.15 (jumătatea corpului) - și mai ieftin - - - media mai bună coboară ținta: - ieși la 51.32, nu la 51.60 - - - retestul: prețul revine la 50.10 - și umple amândouă ordinele limită - Paranteza de pe candela de confirmare e corpul ei (49.90 → 50.40): pe el se măsoară 1/3 și 1/2. Stopul e unul singur. Exemplu construit. - - - - - - - - - risc 1.20 pe acțiune (tot la close) - - risc 1.06 pe acțiune (cu tranșe, preț mediu 50.26) + + + ținta 1: 51.60 = 1R față de close + + ținta 1: 51.32 = 1R față de prețul mediu 50.26 + + intrarea (close-ul de confirmare): 50.40 + + stopul: 49.20 + + + + + + + + + + + + + + + + + + + media mai bună coboară ținta: + ieși la 51.32, nu la 51.60 + + + retestul: prețul revine la 50.10 + și umple amândouă ordinele limită + + 50.40 + + + 1/3 la close 50.40 + ca să nu ratezi trade-ul dacă pleacă fără tine + + 50.23 + + + 1/3 cu ordin limită la 50.23 (o treime din corp) + mai ieftin, dacă prețul revine + + 50.15 + + + 1/3 cu ordin limită la 50.15 (jumătatea corpului) + și mai ieftin + + + + + + risc 1.20 pe acțiune (tot la close, de la intrarea 50.40) + + + risc 1.06 pe acțiune (cu tranșe, de la prețul mediu 50.26) + + prețul mediu al celor trei tranșe: 50.26 + Paranteza de pe candela de confirmare e corpul ei (49.90 → 50.40): pe el se măsoară 1/3 și 1/2. Stopul e unul singur. Exemplu construit.

Candela de confirmare are corpul între 49.90 și 50.40. O treime o cumperi la close, la 50.40; o treime cu limită la o treime din corp, 50.23; o treime la @@ -1805,8 +1815,10 @@ prețuri calculezi ținta. Alege înainte de trade și ține-te de ea. Detalii:

Exemplul real: LABU, de la doji la +30 %

LABU — daily - - 1. setup: scădere lungă, apoi trei minime aproape egale — pivotul 86.00 atins de două ori + + 1. setup: scădere lungă, apoi primul test al pivotului 86.00 + + testul 2: minimele 2, 3 și doji-ul — fără revenire peste 86.00 2. doji + confirmare @@ -1998,17 +2010,18 @@ prețuri calculezi ținta. Alege înainte de trade și ține-te de ea. Detalii: volum - test 1 · 82.40 - test 2 · 82.00 + testul 1 · 82.40 + revenire peste pivot · 88.90 + testul 2 · 82.00 aici intri, la close 89.50: abia acum știi că au câștigat cumpărătorii - - - al treilea minim: 81.45, - fără o nouă atingere a pivotului - aici pui stopul, sub minime + + + minimul 3: 81.45 — tot din testul 2, + prețul n-a mai urcat peste 86.00 după minimul 2 + aici pui stopul, pe cel mai jos dintre cele trei minime retest: cade înapoi pe intrare @@ -2022,7 +2035,7 @@ prețuri calculezi ținta. Alege înainte de trade și ține-te de ea. Detalii: a ajuns la 116.35: +30 % în 21 de zile de bursă, cam 3,3R din cât ai riscat doji = corp mic (o 86.10, c 86.00): cumpărătorii și vânzătorii sunt la egalitate, exact pe pivotul lunar 86.00 - ținta 1:1 (97.55) e atinsă pe bara 40: acolo vinzi o treime, restul merge mai departe — de asta nu vinzi tot la 1:1 + ținta 1:1 (97.55) e atinsă a 6-a bară după intrare: acolo vinzi o treime, restul merge mai departe — de asta nu vinzi tot la 1:1 Procentele (stop 9 %, +30 %) sunt ale cursului; nivelurile de preț sunt puse de sumarizator.

Ce e real: doar procentele — stop de 9 %, +30 % într-o lună. Prețurile diff --git a/summaries/17_STRATEGII/01_buy_doji.md b/summaries/17_STRATEGII/01_buy_doji.md index 1be2150..1460a23 100644 --- a/summaries/17_STRATEGII/01_buy_doji.md +++ b/summaries/17_STRATEGII/01_buy_doji.md @@ -11,32 +11,32 @@ Un doji e o candelă care se închide aproape la prețul la care s-a deschis: corpul e o linie subțire, iar fitilele ies și în sus, și în jos. Spune că în perioada aceea cumpărătorii și vânzătorii au fost la egalitate. - - Ce e un doji și ce nu — aceeași bară, 50.10 sus și 49.20 jos - + + Ce e un doji și ce nu — aceeași bară, 50.10 sus și 49.25 jos + doji - + nu e doji - + cât de sus a urcat prețul: 50.10 - cât de jos a coborât: 49.20 - + cât de jos a coborât: 49.25 + - DA: corp 0.05 - = 5,6 % din înălțime - - - DA, la limită: - corp 0.09 = 10 % - + DA: corp 0.05 + = 5,9 % din înălțime + + + DA, la limită: + corp 0.08 = 9,4 % + - NU: corp 0.30 - = 33 % - + NU: corp 0.30 + = 35 % + - NU: corp mic (5,6 %), - dar fără fitil sus + NU: corp mic (5,9 %), + dar fără fitil sus fitilul de sus @@ -54,14 +54,14 @@ perioada aceea cumpărătorii și vânzătorii au fost la egalitate. close 49.55 - corp prea gros (33 %) + corp prea gros (35 %) aici una din tabere a câștigat — nu mai e indecizie fără fitil sus regula cere fitil în ambele părți - Doji = corpul e cel mult 10 % din înălțimea totală a barei (aici înălțimea e 0.90) și are fitil și sus, și jos. + Doji = corpul e cel mult 10 % din înălțimea totală a barei (aici înălțimea e 0.85) și are fitil și sus, și jos. ## Ce face strategia @@ -336,7 +336,7 @@ Un Sell Doji weekly „nu înseamnă neapărat că se va materializa", dar la weekly: Buy Doji confirmat (close 81.30, peste high-ul doji-ului 79.80) deci direcția permisă e LONG: pe daily cauți doar Buy Doji - daily: săptămânile de după confirmare (open 81.30 = close-ul ei) + daily: zilele de după confirmarea weekly (open 81.30 = close-ul ei) @@ -381,7 +381,7 @@ Un Sell Doji weekly „nu înseamnă neapărat că se va materializa", dar la - aici te-a scos: stopul 84.85, lovit a patra zi + aici te-a scos: stopul 84.85, lovit a 4-a zi banii mari de pe weekly cumpără mai departe @@ -537,11 +537,13 @@ au motiv să apară. NU — doji în aer - 0,51 % — la nivel + low-ul dojiului: 49.25 - gol de 7,07 % sub doji — doji în aer + low-ul dojiului: 49.25 + de la 49.25 la 49.00 = 0,51 % — la nivel + de la 49.25 la 46.00 = gol de 7,07 % — doji în aer - pivotul lunar 49.00 + pivotul lunar 49.00 pivotul lunar 53.50 @@ -568,11 +570,11 @@ au motiv să apară. doji confirmare - - - pivot lunar: nivel urmărit - de mulți — aici apar - cumpărătorii + + + pivot lunar: nivel urmărit + de mulți — aici apar + cumpărătorii @@ -711,7 +713,7 @@ execută ca ordine de cumpărare. De aceea mișcarea se întoarce brusc. **Numeri 4 candele înapoi, începând cu cea de confirmare, iei cel mai jos low dintre ele și pui stopul puțin sub el.** - + Pasul 5 — stopul: numeri 4 candele înapoi de la confirmare numeri 4 candele, începând cu confirmarea @@ -757,71 +759,71 @@ dintre ele și pui stopul puțin sub el.** 2 1 (5) - cu 4 sau cu 5 candele iese la fel: în scădere, low-ul doji-ului e oricum cel mai jos - - Același trade: stop „la ochi” (sub candela de confirmare) vs stopul din regulă - - - ținta 1: 51.60 - - intrarea: 50.40 - - stop pus la ochi: 49.70 - - stopul din regulă: 49.20 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - stopul pus la ochi (49.70) e măturat - era prea aproape de intrare - - - al doilea picior al fundului: 49.50 - fundurile fac des asta - - - stopul din regulă (49.20) ține - al doilea picior rămâne peste el - - - prețul ajunge la țintă - dar numai cu stopul corect - mai erai în trade - Barele de după intrare și stopul la ochi sunt construite, pentru contrast. - pe aici trece al doilea picior + cu 4 sau cu 5 candele iese la fel: în scădere, low-ul doji-ului e oricum cel mai jos + + Același trade: stop „la ochi” (sub candela de confirmare) vs stopul din regulă + + + ținta 1: 51.60 + + intrarea: 50.40 + + stop pus la ochi: 49.70 + + stopul din regulă: 49.20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + stopul pus la ochi (49.70) e măturat + era prea aproape de intrare + + + al doilea picior al fundului: 49.50 + fundurile fac des asta + + + stopul din regulă (49.20) ține + al doilea picior rămâne peste el + + + prețul ajunge la țintă + dar numai cu stopul corect + mai erai în trade + Barele de după intrare și stopul la ochi sunt construite, pentru contrast. + pe aici trece al doilea picior Sus, candelele numerotate de la confirmare. Cel mai jos low e al doji-ului, @@ -872,7 +874,7 @@ Ieși în trei treimi: Limita de timp: dacă în 8 candele de la intrare nu s-a atins nici ținta, nici stopul, ieși oricum, la close-ul celei de-a 8-a. - + A — prima treime la țintă, a doua pe trailing stop @@ -932,10 +934,10 @@ nici stopul, ieși oricum, la close-ul celei de-a 8-a. încă un gap: linia urcă la 52.60 urcă doar, nu coboară niciodată - - - prima închidere sub linie: ieși - cu a doua treime, la 52.30 (+1.58R) + + + prima închidere sub linie: ieși + cu a doua treime, la 52.30 (+1.58R) linia de trailing stop prima treime: de la intrare la ținta 1:1 @@ -966,33 +968,33 @@ nici stopul, ieși oricum, la close-ul celei de-a 8-a. - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 a 8-a candelă: ieși oricum, la close 50.70 (+0.25R) banii blocați aici lipsesc din alt trade 8 candele în care nu se întâmplă nimic + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 Sus, prima treime iese la 51.60. Apar două candele cu gap, care urcă linia @@ -1026,8 +1028,8 @@ Exemplul de mai jos e alt simbol, pe altă scară de preț (în jur de 99 $, nu Sell Doji pe short — daily (exemplu construit) - - 1. creștere de 10 candele + + 1. creșterea: 14 candele 2. doji @@ -1364,7 +1366,7 @@ Cele două panouri din diagramă sunt alte simboluri, cu alte prețuri (42 $ și aici cumpără cei întârziați - cade înapoi sub 78.00: + cade înapoi sub rezistența 78.50: semnalul a mințit volum slab: nimeni mare nu cumpără @@ -1433,7 +1435,7 @@ simbol: prețurile sunt în jur de 105 $. „MICI" e numele dat de curs variante ținta 1:1 107.50 intrare 106.30 - high doji 105.20 + nivel din weekly stop 105.10 sub ultimele 4 candele @@ -1519,7 +1521,7 @@ simbol: prețurile sunt în jur de 105 $. „MICI" e numele dat de curs variante ținta 1:1 118.75 intrare 115.75 - high doji 113.00 + nivel din monthly stop 112.75 @@ -1594,7 +1596,7 @@ simbol: prețurile sunt în jur de 105 $. „MICI" e numele dat de curs variante ținta 1:1 103.00 intrare 102.52 - high doji 102.08 + nivel din daily stop 102.04 @@ -1719,63 +1721,71 @@ Buy Doji nu apar deloc și le vezi doar cu ochiul. restul cu ordine limită (se execută doar la prețul dat sau mai bun) mai jos, în corpul candelei de confirmare. - + Intrarea în trei tranșe — același trade (doji 50.10 / 49.25) - - - ținta 1: 51.60 = 1R față de close - - ținta 1: 51.32 = 1R față de prețul mediu 50.26 - - stopul: 49.20 - - - - - - - - - - - - - - - - - - - 1/3 la close 50.40 - ca să nu ratezi trade-ul dacă pleacă fără tine - - - 1/3 cu ordin limită la 50.23 (o treime din corp) - mai ieftin, dacă prețul revine - - - 1/3 cu ordin limită la 50.15 (jumătatea corpului) - și mai ieftin - - - media mai bună coboară ținta: - ieși la 51.32, nu la 51.60 - - - retestul: prețul revine la 50.10 - și umple amândouă ordinele limită - Paranteza de pe candela de confirmare e corpul ei (49.90 → 50.40): pe el se măsoară 1/3 și 1/2. Stopul e unul singur. Exemplu construit. - - - - - - - - - risc 1.20 pe acțiune (tot la close) - - risc 1.06 pe acțiune (cu tranșe, preț mediu 50.26) + + + ținta 1: 51.60 = 1R față de close + + ținta 1: 51.32 = 1R față de prețul mediu 50.26 + + intrarea (close-ul de confirmare): 50.40 + + stopul: 49.20 + + + + + + + + + + + + + + + + + + + media mai bună coboară ținta: + ieși la 51.32, nu la 51.60 + + + retestul: prețul revine la 50.10 + și umple amândouă ordinele limită + + 50.40 + + + 1/3 la close 50.40 + ca să nu ratezi trade-ul dacă pleacă fără tine + + 50.23 + + + 1/3 cu ordin limită la 50.23 (o treime din corp) + mai ieftin, dacă prețul revine + + 50.15 + + + 1/3 cu ordin limită la 50.15 (jumătatea corpului) + și mai ieftin + + + + + + risc 1.20 pe acțiune (tot la close, de la intrarea 50.40) + + + risc 1.06 pe acțiune (cu tranșe, de la prețul mediu 50.26) + + prețul mediu al celor trei tranșe: 50.26 + Paranteza de pe candela de confirmare e corpul ei (49.90 → 50.40): pe el se măsoară 1/3 și 1/2. Stopul e unul singur. Exemplu construit. Candela de confirmare are corpul între 49.90 și 50.40. O treime o cumperi la @@ -1794,8 +1804,10 @@ candela e înaltă. Nu alerga după preț: „poate nu mai face niciodată". LABU — daily - - 1. setup: scădere lungă, apoi trei minime aproape egale — pivotul 86.00 atins de două ori + + 1. setup: scădere lungă, apoi primul test al pivotului 86.00 + + testul 2: minimele 2, 3 și doji-ul — fără revenire peste 86.00 2. doji + confirmare @@ -1987,17 +1999,18 @@ candela e înaltă. Nu alerga după preț: „poate nu mai face niciodată". volum - test 1 · 82.40 - test 2 · 82.00 + testul 1 · 82.40 + revenire peste pivot · 88.90 + testul 2 · 82.00 aici intri, la close 89.50: abia acum știi că au câștigat cumpărătorii - - - al treilea minim: 81.45, - fără o nouă atingere a pivotului - aici pui stopul, sub minime + + + minimul 3: 81.45 — tot din testul 2, + prețul n-a mai urcat peste 86.00 după minimul 2 + aici pui stopul, pe cel mai jos dintre cele trei minime retest: cade înapoi pe intrare @@ -2011,7 +2024,7 @@ candela e înaltă. Nu alerga după preț: „poate nu mai face niciodată". a ajuns la 116.35: +30 % în 21 de zile de bursă, cam 3,3R din cât ai riscat doji = corp mic (o 86.10, c 86.00): cumpărătorii și vânzătorii sunt la egalitate, exact pe pivotul lunar 86.00 - ținta 1:1 (97.55) e atinsă pe bara 40: acolo vinzi o treime, restul merge mai departe — de asta nu vinzi tot la 1:1 + ținta 1:1 (97.55) e atinsă a 6-a bară după intrare: acolo vinzi o treime, restul merge mai departe — de asta nu vinzi tot la 1:1 Procentele (stop 9 %, +30 %) sunt ale cursului; nivelurile de preț sunt puse de sumarizator.