buy_doji: reparatiile din verificare (21 de puncte)

Verificarea cu agent separat a gasit doua contradictii de continut pe
care auditul mecanic nu le prinde:

- textul spunea ca pullback-ul "incape intr-o singura candela a TF-ului
  mare"; pe desen se intinde peste doua, iar prima e o saptamana rosie
  vizibila. Rescris: pe TF-ul mare vezi candelele, dar nu vezi ce e in
  ele — unde s-a oprit coborarea si doji-ul care o termina, deci n-ai
  unde intra si n-ai de unde masura stopul. Asta face lupa.
- definitia pullback-ului zicea "nu mai face minim nou", absolut, dar
  desenul arata minime tot mai joase — asa face orice pullback care
  coboara spre un nivel. Ancorata de minimul de plecare; eticheta de pe
  desen numeste referinta si trimite la panoul unde e marcata.

Restul: perechi_tf punea stopul fix pe low, fara marja de 5 centi pe
care o cere Pasul 5 si o respecta directie — aliniat, cu cifrele
recalculate; "nivel weekly" devine "retest", pentru ca high-ul unui doji
nu e suport si Pasul 3 cere altceva; conector intre nivelul comun al
celor doua panouri (nu se pot alinia — sunt scari diferite, e o lupa);
leader lines in coloana de etichete; assert-ul de agregare, care era
tautologic, verifica acum granitele candelelor mari fata de pullback si
doji — exact locul unde textul se rupsese.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ThN7ixZrowca8aTGrK1MUJ
This commit is contained in:
Claude Agent
2026-09-20 12:14:33 +00:00
parent 6c806c4ebe
commit 383a900eaa
8 changed files with 1229 additions and 955 deletions

View File

@@ -156,10 +156,12 @@ w_bottom = yw(wmin)
text(20, 50, "weekly: direcția", fill="#555", bold=True)
rect(xw(7) - 8, yw(WK[8][1]) - 4, WGAP + 16, yw(WK[7][2]) - yw(WK[8][1]) + 8, GREEN, 0.12, GREEN)
# dreptunghiul de corespondență: exact barele weekly desfăcute în panoul daily
ZX1, ZX2, ZY1, ZY2 = xw(Z0) - 8, xw(len(WK) - 1) + 8, WT - 10, w_bottom + 8
ZX1, ZX2 = xw(Z0) - 8, xw(len(WK) - 1) + 8
ZY1 = yw(max(b[1] for b in WK[Z0:])) - 8 # exact intervalul de preț al celor
ZY2 = yw(min(b[2] for b in WK[Z0:])) + 8 # 3 bare mărite, nu tot panoul
rect(ZX1, ZY1, ZX2 - ZX1, ZY2 - ZY1, BLUE, 0.07, BLUE, "5 4")
text(ZX2 + 12, ZY1 + 14, f"ultimele {ZOOM} săptămâni,", fill=BLUE, size=11)
text(ZX2 + 12, ZY1 + 30, "mărite jos", fill=BLUE, size=11)
text(ZX2 + 12, ZY1 + 12, f"ultimele {ZOOM} săptămâni,", fill=BLUE, size=11)
text(ZX2 + 12, ZY1 + 28, "mărite jos", fill=BLUE, size=11)
# nivelurile comune, desenate identic pe ambele panouri
COMMON = [(DH, f"{DH:.2f}", "high doji"), (DL, f"{DL:.2f}", "low doji")]
@@ -169,14 +171,18 @@ for k, (lvl, lab, _) in enumerate(COMMON):
text(40, yw(lvl) + (-2 if k == 0 else 11), lab, fill=BLUE, anchor="end", size=10,
panel="common")
for k in range(ZOOM):
text(xw(Z0 + k), ZY2 - 6, f"S{k + 1}", fill=BLUE, anchor="middle",
text(xw(Z0 + k), ZY2 + 14, f"S{k + 1}", fill=BLUE, anchor="middle",
size=10, bold=True, panel="common")
arrow(470, yw(80.50), xw(8) + 11, yw(80.50), GREEN)
text(476, yw(80.50) - 4, f"weekly: Buy Doji confirmat (close {WK[8][3]:.2f}, peste "
# săgeata verde intră în bara de confirmare pe sub dreptunghiul albastru
AP = round((WK[7][1] + WK[8][2]) / 2, 2)
assert WK[8][2] < AP < WK[8][1], "săgeata verde nu cade în bara de confirmare"
assert yw(AP) > ZY2 + 10, "săgeata verde traversează dreptunghiul S1-S3"
arrow(470, yw(AP), xw(8) + 11, yw(AP), GREEN)
text(476, yw(AP) - 4, f"weekly: Buy Doji confirmat (close {WK[8][3]:.2f}, peste "
f"high-ul doji-ului {WK[7][1]:.2f})", fill=GREEN, bold=True, size=11)
text(476, yw(80.50) + 14, "deci direcția permisă e LONG: pe daily cauți doar Buy Doji",
text(476, yw(AP) + 14, "deci direcția permisă e LONG: pe daily cauți doar Buy Doji",
fill=GREEN, size=11)
text(xw(7) + 5, ZY2 + 8, "doji weekly", fill=ORANGE, anchor="end", bold=True, size=10)
text(xw(7) + 8, w_bottom + 16, "doji weekly", fill=ORANGE, bold=True, size=10)
# ---- panoul de jos: daily -----------------------------------------------------
PANEL = "daily"
@@ -194,8 +200,9 @@ line(ZX1, ZY2, FX1, FT, BLUE, 1.2, "5 4")
line(ZX2, ZY2, FX2, FT, BLUE, 1.2, "5 4")
out.append(f'<rect x="{FX1:.1f}" y="{FT:.1f}" width="{FX2 - FX1:.1f}" height="{FB - FT:.1f}" '
f'fill="none" stroke="{BLUE}" stroke-width="1.5" stroke-dasharray="5 4" rx="3"/>')
text(FX2 + 34, ZY2 + 26, f"daily: aceleași {ZOOM} săptămâni, zi cu zi", fill=BLUE, bold=True)
text(FX2 + 34, ZY2 + 44, f"({GROUP} zile = o bară weekly; open, close și extremele coincid)",
text(FX2 + 34, w_bottom + 12, f"daily: aceleași {ZOOM} săptămâni, zi cu zi",
fill=BLUE, bold=True)
text(FX2 + 34, w_bottom + 30, f"({GROUP} zile = o bară weekly; open, close și extremele coincid)",
fill="#555", size=11)
rect(xd(7) - 8, yd(DY[7][1]) - 3, DGAP + 16, yd(DY[8][2]) - yd(DY[7][1]) + 6, ORANGE, 0.15, ORANGE)