strategii: diagramele puse in capitole

36 din 37 de diagrame substituite in .md. substituie.py accepta acum si
cheia cu slug inclus (unii agenti au scris mp2_exemplu, altii exemplu) si
marcajul indentat. A ramas mdsrt_aplus: agentul a raportat OK fara sa scrie
niciun fisier — exact capcana din CLAUDE.md, un raport de agent nu e dovada.
Relansat separat.

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-18 19:34:11 +00:00
parent 01599d2e9d
commit ccfc4a7f7f
25 changed files with 5821 additions and 60 deletions

View File

@@ -117,7 +117,7 @@ def render_pivot_panel(cds, pivots, title) -> tuple[str, float, Chart]:
"""Randază un panou cu pivot weekly (Level) + pivot daily (polilinie injectată)."""
ch = Chart(candles=cds,
levels=[Level(WEEKLY, f"pivot weekly (cel MARE) {WEEKLY:.2f}",
BLUE, dash="", label_at="left")],
BLUE, dash="", label_at="right")],
marks=[],
scale=SCALE, gap=15, body_w=9, left=44, width=W,
title=title)
@@ -145,26 +145,30 @@ circle = (f'<circle cx="{xc:.1f}" cy="{yc:.1f}" r="13" fill="none" '
f'stroke="{GREEN}" stroke-width="2"/>')
cross_txt = (f'<text x="{xc + 16:.1f}" y="{ch_da._y(PDA[cross_da - 1]) + 18:.1f}" '
f'fill="{GREEN}" style="font-weight:bold">crossing: 61.70 → 62.20</text>')
mark_txt = (f'<text x="{ch_da._cx(trigger):.1f}" y="{ch_da._y(cds_da[trigger].h) - 10:.1f}" '
f'fill="{GREEN}" text-anchor="middle" style="font-weight:bold">'
f'intrare: trigger (prima candelă verde)</text>')
mark_txt = (f'<text x="{ch_da._cx(trigger) + 4:.1f}" y="{ch_da._y(cds_da[trigger].h) - 10:.1f}" '
f'fill="{GREEN}" text-anchor="end" style="font-weight:bold">'
f'intrare: trigger</text>')
i = body_da.rindex("</text>") + len("</text>") # după candele/marks, ca să fie vizibile
body_da = body_da[:i] + "\n " + circle + "\n " + cross_txt + "\n " + mark_txt + body_da[i:]
# panoul NU: eticheta din spec pe semnalele ulterioare
body_nu, h_nu, ch_nu = render_pivot_panel(
cds_nu, PNU, "NU — continuare/buy the dip (+1)")
body_nu = body_nu.rstrip() + (f'\n <text x="{ch_nu._cx(13):.1f}" y="{h_nu - 12:.1f}" '
f'fill="{GRAY}" text-anchor="middle" style="font-weight:bold">'
f'semnale ulterioare = BUY THE DIP, nu crossing</text>')
body_nu = body_nu.rstrip() + (
f'\n <text x="24" y="68.0" fill="{GRAY}">'
f'fără crossing nou; nu a mai căzut sub pivotul mare</text>'
f'\n <text x="{ch_nu._cx(13):.1f}" y="{h_nu - 12:.1f}" '
f'fill="{GRAY}" text-anchor="middle" style="font-weight:bold">'
f'semnale ulterioare = BUY THE DIP, nu crossing</text>')
# ------------------------------------------------- lipirea celor două panouri
CAPS = [
"Pivot weekly 62.00 = linia orizontală (pivotul MARE).",
"Pivot daily (cel MIC) se recalculează zilnic și sare pe nivel nou.",
"Crossing = pivotul mic traversează 62.00 în sus.",
"Fără re-încrucișare, semnalele ulterioare sunt buy the dip,",
"nu crossing.",
"Trigger = prima candelă verde după crossing,",
"care închide peste pivotul daily.",
"Crossing = pivotul mic traversează 62.00 în sus; fără re-încrucișare,",
"semnalele ulterioare sunt buy the dip, nu crossing.",
]
cap_top = h_da + VGAP + h_nu + 16
H = cap_top + 17 * len(CAPS) + 10