atmi: diagramele refacute, cinci noi, si fisa de surse

Noi: pivoti (PPQ/SQ calculati din trimestrul precedent, cu formula pe
desen), perechi_tf (weekly -> daily ca descompunere reala, cu caseta,
ghidaje si PPQ pe ambele panouri), trigger (BIM apoi verde, fata de
verde inainte de BIM — cutitul in cadere), risc (ce inseamna "fara
stop": 24 de bare sub apa, -20 % pe pozitie), reinvestire (ciclul
banilor pe trei cicluri).

aplus devine corectie: diagrama arata un prag de corectie, nu un setup
A+, si numele vechi trimitea la altceva.

Trei bug-uri reale: exemplul era etichetat weekly cu 20 de bare, dar
textul spunea "un an mai tarziu" — trecut pe monthly cu assert pe numarul
de luni; ansamblul avea o trimitere fisier:linie desenata in SVG; si
benzile PPQ/SQ erau inversate ca sens, cu SQ fix pe intrare.

PPQ 95.80 si SQ 90.80 sunt completare proprie — cursul spune explicit ca
nu da valorile; derivate cu formula standard, cu assert.

Textul capitolului e neatins — agentul a atins pragul de context.

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:46:38 +00:00
parent 0ed607134d
commit c08c857274
25 changed files with 2133 additions and 623 deletions

View File

@@ -30,9 +30,10 @@ GRAY, RED, GREEN, BLUE, ORANGE = "#777", "#c00", "#188a3e", "#1a5fb4", "#b06000"
PIVOT = 622.00 # pivot daily, suportul
LEG1 = 622.40 # swing low picior 1
LEG2 = 621.40 # picior 2 (mai jos, rupe pivotul)
ENTRY = 622.60 # close-ul Buy Hammer (construit)
HAMMER_C = 622.60 # close-ul Buy Hammer — cifră reală, din sesiunea Q&A
ENTRY = 623.00 # close-ul candelei care sparge high-ul hammer-ului (construit)
SL = 621.30 # 0.10 sub low-ul piciorului 2 (construit)
TP1 = 623.90 # entry + risc = 1:1 (construit)
TP1 = 624.70 # entry + risc = 1:1 (construit)
# ── seria: 30 de close-uri, exact ca în specificație ───────────────────────
CLOSES = [
@@ -100,11 +101,13 @@ assert abs(corp - 0.30) < 1e-9, corp
assert abs(coada - 0.90) < 1e-9, coada
assert coada > corp, (coada, corp)
# 6. entry = close-ul trigger-ului (construit), SL 0.10 sub low-ul piciorului 2
assert cds[18].c == ENTRY
# 6. regula de intrare a capitolului: close-ul candelei care sparge high-ul
# candelei-trigger (aici bara 19), nu close-ul hammer-ului însuși
assert cds[18].c == HAMMER_C
assert cds[19].c == ENTRY and cds[19].c > cds[18].h, (cds[19].c, cds[18].h)
assert abs(cds[18].l - SL - 0.10) < 1e-9, (cds[18].l, SL)
risk = ENTRY - SL
assert abs(risk - 1.30) < 1e-9, risk
risk = round(ENTRY - SL, 2)
assert risk == 1.70, risk
# 7. TP1 simetric 1:1
assert abs((ENTRY - SL) - (TP1 - ENTRY)) < 1e-9
@@ -112,9 +115,9 @@ assert abs((ENTRY - SL) - (TP1 - ENTRY)) < 1e-9
# 8. după trigger, primul close care atinge 623.90 e bara 21 (nu mai devreme).
# Seria pornește la 627.00, deci „atinge" se citește de jos în sus, din zona
# picioarelor: barele 10-20 rămân sub TP1, bara 21 îl atinge.
assert all(c.c < TP1 for c in cds[10:21]), [c.c for c in cds[10:21]]
assert max(c.h for c in cds[19:21]) < TP1, [c.h for c in cds[19:21]]
assert cds[21].c == TP1, cds[21].c
assert max(c.h for c in cds[19:25]) < TP1, [c.h for c in cds[19:25]]
assert cds[25].h >= TP1 > cds[25].o, (cds[25].h, cds[25].o)
TP_BAR = 25
# 9. divergență: lower low pe preț, higher low pe volum
assert cds[18].l < cds[10].l, (cds[18].l, cds[10].l)
@@ -136,9 +139,8 @@ def cx(i: int) -> float:
levels = [
Level(PIVOT, "pivot daily 622.00", ORANGE, label_at="left"),
Level(SL, "SL 621.30 (construit)", RED, label_at="left"),
Level(ENTRY, "intrare 622.60 (construit)", GREEN, label_at="left"),
Level(TP1, "TP1 623.90 = 1:1 (construit)", GREEN, label_at="left"),
Level(LEG1, "picior 1 = 622.40", BLUE, label_at="right"),
Level(ENTRY, "intrare 623.00 (construit)", GREEN, label_at="right"),
Level(TP1, "TP1 624.70 = 1:1 (construit)", GREEN, label_at="left"),
]
# dy-uri calculate manual ca etichetele „below" să nu calce linia pivotului
@@ -146,7 +148,8 @@ levels = [
marks = [
Mark(10, "picior 1 = 622.40", BLUE, "below", dy=15),
Mark(18, "picior 2 = 621.40 (mai jos) · Buy Hammer", RED, "below"),
Mark(18, "hammer închide 622.60, înapoi peste pivot", GREEN, "above", dy=-20),
Mark(18, "hammer închide 622.60, înapoi peste pivot", GREEN, "above", dy=-42),
Mark(19, "intri aici: close peste high-ul hammer-ului", GREEN, "above", dy=-62),
]
ch = Chart(
@@ -162,7 +165,7 @@ svg = ch.render()
# ── legenda de onestitate (assert 11): ce e real, ce e construit ───────────
legend = [
"Legendă: nivelurile 622.40 / 622.00 / 621.40 / 622.60 și cele 8 candele dintre",
"picioare sunt reale, din curs. Intrarea 622.60, SL-ul 621.30 și TP-ul 623.90",
"picioare sunt reale, din curs. Intrarea 623.00, SL-ul 621.30 și TP-ul 624.70",
"sunt construcția mea — materialul nu le dă.",
]
m = re.search(r'viewBox="0 0 (\d+) ([0-9.]+)"', svg)
@@ -182,8 +185,8 @@ assert "sunt reale, din curs" in svg and "construcția mea" in svg, \
for eticheta in ("pivot daily 622.00", "picior 1 = 622.40",
"picior 2 = 621.40 (mai jos) · Buy Hammer",
"hammer închide 622.60, înapoi peste pivot",
"intrare 622.60 (construit)", "SL 621.30 (construit)",
"TP1 623.90 = 1:1 (construit)"):
"intrare 623.00 (construit)", "SL 621.30 (construit)",
"TP1 624.70 = 1:1 (construit)"):
assert eticheta in svg, f"lipsește eticheta: {eticheta!r}"
assert "SPY — 5 min" in svg, "lipsește titlul"
@@ -218,5 +221,5 @@ OUT.write_text(svg, encoding="utf-8")
print(f"scris {OUT.name}: {len(cds)} candele | picior 1 {cds[10].l:.2f} (close "
f"{cds[10].c:.2f}) | picior 2 {cds[18].l:.2f} (mai jos) | hammer închide "
f"{cds[18].c:.2f} | intrare {ENTRY:.2f} | SL {SL:.2f} (risc {risk:.2f}) | "
f"TP1 {TP1:.2f} = {(TP1 - ENTRY) / risk:.2f}:1 la bara 21 | "
f"TP1 {TP1:.2f} = {(TP1 - ENTRY) / risk:.2f}:1 la bara {TP_BAR} | "
f"vol[18]={VOLS[18]} > vol[10]={VOLS[10]}")