diagrame: ultimele patru etichete ramase in urma textului corectat
selectia_rvol: 'sub jumatate fata de normal' pentru 0,61 -> '61 % dintr-o zi normala'. mdsrt_exemplu: legenda spunea ca nivelurile SPY sunt 'reale, din curs'; sunt reconstruite dupa ilustratia unui sumar Q&A. mbt_iesire: 2.04R -> 2,0R, cifra sursei, prin rotunjire la afisare, fara sa se atinga nicio serie; assert-ul verifica acum textul din SVG-ul randat, nu doar valoarea bruta. atmi_exemplu: '13 luni mai tarziu' era citit ca fapt al materialului - acum spune ca 13 e cifra desenului, materialul da 'aproximativ un an'; si cele patru marcaje de completare din desenele atmi sunt uniformizate. Plus cei trei agenti opencode scrisi pentru rundele astea: verif_strat, corector_strat, reparator_grafic. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ThN7ixZrowca8aTGrK1MUJ
This commit is contained in:
@@ -1,15 +1,17 @@
|
||||
"""Diagrama din `gen/strategii/mdsrt_exemplu.spec.txt` (TIP: PRET).
|
||||
|
||||
Exemplul real din Q&A 15.07.2025 (`09_QA/24_2025-07-15.md`): SPY pe 5 min,
|
||||
double bottom cu al doilea picior mai jos (MDSRT pe 5 min, suportul = pivotul
|
||||
daily). Downtrend → picior 1 la 622.40 → revenire → picior 2 la 621.40 (rupe
|
||||
pivotul 622.00) → Buy Hammer care închide la 622.60, înapoi peste pivot. După
|
||||
trigger, un plan construit de mine (marcat) duce trade-ul până la TP1.
|
||||
Sesiunea de Q&A 15.07.2025 (`09_QA/24_2025-07-15.md`): SPY pe 5 min, double
|
||||
bottom cu al doilea picior mai jos (MDSRT pe 5 min, suportul = pivotul daily).
|
||||
Downtrend → picior 1 la 622.40 → revenire → picior 2 la 621.40 (rupe pivotul
|
||||
622.00) → Buy Hammer care închide la 622.60, înapoi peste pivot. După trigger,
|
||||
un plan construit de mine (marcat) duce trade-ul până la TP1.
|
||||
|
||||
Reale din curs: nivelurile 622.40 / 622.00 / 621.40 / 622.60 și cele 8 bare
|
||||
dintre picioare. Construcția mea: entry 622.60, SL 621.30, TP1 623.90 (1:1) —
|
||||
materialul nu le dă (transcrierea planului se întrerupe). Volumele sunt
|
||||
relative, alese de generator.
|
||||
Nivelurile 622.40 / 622.00 / 621.40 / 622.60 și cele 8 bare dintre picioare
|
||||
sunt reconstruite după ilustrația sumarului Q&A — NU sunt rostite în
|
||||
transcriere: sumarul însuși le dă ca „ale mele", construite
|
||||
(`09_QA/24_2025-07-15.md:601-602`). Construcția mea: entry 623.00, SL 621.30,
|
||||
TP1 624.70 (1:1) — materialul nu le dă (transcrierea planului se întrerupe).
|
||||
Volumele sunt relative, alese de generator.
|
||||
|
||||
Rulează:
|
||||
python3 gen/strategii/mdsrt_exemplu.py
|
||||
@@ -26,11 +28,11 @@ OUT = Path(__file__).resolve().parent / "mdsrt_exemplu.svg"
|
||||
|
||||
GRAY, RED, GREEN, BLUE, ORANGE = "#777", "#c00", "#188a3e", "#1a5fb4", "#b06000"
|
||||
|
||||
# ── nivelurile reale din curs + planul construit (marcat) ──────────────────
|
||||
PIVOT = 622.00 # pivot daily, suportul
|
||||
LEG1 = 622.40 # swing low picior 1
|
||||
LEG2 = 621.40 # picior 2 (mai jos, rupe pivotul)
|
||||
HAMMER_C = 622.60 # close-ul Buy Hammer — cifră reală, din sesiunea Q&A
|
||||
# ── nivelurile reconstruite din ilustrația sumarului + planul construit ────
|
||||
PIVOT = 622.00 # pivot daily, suportul (reconstruit după ilustrație)
|
||||
LEG1 = 622.40 # swing low picior 1 (reconstruit)
|
||||
LEG2 = 621.40 # picior 2 (mai jos, rupe pivotul; reconstruit)
|
||||
HAMMER_C = 622.60 # close-ul Buy Hammer — reconstruit după ilustrația sumarului
|
||||
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 = 624.70 # entry + risc = 1:1 (construit)
|
||||
@@ -112,9 +114,9 @@ assert risk == 1.70, risk
|
||||
# 7. TP1 simetric 1:1
|
||||
assert abs((ENTRY - SL) - (TP1 - ENTRY)) < 1e-9
|
||||
|
||||
# 8. după trigger, primul close care atinge 623.90 e bara 21 (nu mai devreme).
|
||||
# 8. după trigger, primul high care atinge TP1 624.70 e bara 25 (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.
|
||||
# picioarelor: barele 19-24 rămân sub TP1, bara 25 îl atinge.
|
||||
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
|
||||
@@ -162,11 +164,12 @@ ch = Chart(
|
||||
)
|
||||
svg = ch.render()
|
||||
|
||||
# ── legenda de onestitate (assert 11): ce e real, ce e construit ───────────
|
||||
# ── legenda de onestitate (assert 11): ce e reconstruit, 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 623.00, SL-ul 621.30 și TP-ul 624.70",
|
||||
"sunt construcția mea — materialul nu le dă.",
|
||||
"picioare sunt reconstruite după ilustrația sumarului Q&A, nu valori rostite în",
|
||||
"transcriere. 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)
|
||||
W, H0 = int(m.group(1)), float(m.group(2))
|
||||
@@ -178,8 +181,16 @@ svg = re.sub(r'(viewBox="0 0 \d+ )[0-9.]+(")',
|
||||
svg = svg.replace("\n</svg>", "\n " + "\n ".join(legend_svg) + "\n</svg>")
|
||||
|
||||
assert svg.count("\n\n") == 0, "linie goală în SVG rupe blocul din markdown"
|
||||
assert "sunt reale, din curs" in svg and "construcția mea" in svg, \
|
||||
"legenda nu spune explicit ce e real și ce e construit"
|
||||
assert "reconstruite după ilustrația sumarului Q&A" in svg, \
|
||||
"legenda trebuie să spună că nivelurile sunt reconstruite după sumarul Q&A"
|
||||
assert "nu valori rostite în" in svg, \
|
||||
"legenda trebuie să nege că nivelurile ar fi rostite în transcriere"
|
||||
assert "construcția mea" in svg, \
|
||||
"legenda nu spune explicit ce e construit"
|
||||
# defectul vechi: legenda pretindea că nivelurile ar fi „reale, din curs",
|
||||
# deși vin din ilustrația sumarului, nu din transcriere.
|
||||
assert "reale, din curs" not in svg, \
|
||||
"legenda veche pretindea că nivelurile sunt reale, din curs"
|
||||
|
||||
# toate etichetele cerute de specificație sunt prezente
|
||||
for eticheta in ("pivot daily 622.00", "picior 1 = 622.40",
|
||||
|
||||
Reference in New Issue
Block a user