diagrame: trei desene care aratau altceva decat spune regula
m2d_exemplu (Riot): eticheta zicea 'close peste bear trail = iesi' pe o bara
care se inchidea SUB linie - doar fitilul trecea, adica exact cazul pe care
capitolul il interzice de trei ori. Seria refacuta, cu assert care recalculeaza
trail-ul din serie si cere ca bara de iesire sa inchida peste el.
mbp_exemplu: candela M se inchidea la 660.50 sub banda de 660.90, iar
generatorul chiar afirma relatia inversa ('assert BAND > c'); desenul arata un
setup invalid ca valid. Plus stopul 662.71, care plutea 1.71 deasupra extremei
celor 4 bare - exact marja pe care capitolul o declara absenta la MBP.
Ambele reparate, cu assert pe fiecare.
atmi_orizont: trei etichete purtau 'fisier:linie' in desen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ThN7ixZrowca8aTGrK1MUJ
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
"""Diagrama din `gen/strategii/mbp_exemplu.spec.txt` (TIP: PRET).
|
||||
|
||||
Trade-ul short complet din material (SPY, 15 min, 25.11.2025): ~12 candele
|
||||
de urcare violentă spre vârful ~661, candela M (verde, peste bandă + TICUS
|
||||
≥ +1000), trigger Sell Momentum → intrare short 660.00, SL 662.71
|
||||
(risc 0.41 %), TP1 657.29 (1:1) atins în prima candelă, apoi trail pe 7
|
||||
candele de 15 min până la ieșirea la 646.80 = 2 % = ~4.9R.
|
||||
de urcare violentă spre vârful 662.71, candela M (verde, close 660.50 peste
|
||||
banda superioară + TICUS ≥ +1000), trigger Sell Momentum → intrare short
|
||||
660.00, SL 662.71 = chiar maximul ultimelor 4 candele (risc 0.41 %), TP1
|
||||
657.29 (1:1) atins în prima candelă, apoi trail pe 7 candele de 15 min până
|
||||
la ieșirea la 646.80 = 2 % = ~4.9R.
|
||||
|
||||
Serie continuă de 32 de candele (`from_closes`, open = close anterior), cu
|
||||
context înainte de urcare, panou TICUS dedesubt (bar ilustrativ la candela M)
|
||||
@@ -28,7 +29,7 @@ ENTRY = 660.00 # 09_QA/11_2025-11-25.md:565, 632-636
|
||||
SL = 662.71 # risc 0.41 % → (sl-entry)/entry*100
|
||||
TP1 = 657.29 # entry - (sl - entry) = 1:1
|
||||
EXIT = 646.80 # ieșire pe trail = 2 % = ~4.9R
|
||||
BAND = 660.90 # bandă superioară schematică (peste close-ul lui M)
|
||||
BAND = 660.20 # bandă superioară schematică (sub close-ul lui M)
|
||||
W, GAP, BODY_W, LEFT = 660, 15, 9, 40
|
||||
SCALE = 20.0
|
||||
|
||||
@@ -54,7 +55,7 @@ assert len(closes) == 32, len(closes)
|
||||
|
||||
wicks = [(0.35, 0.35)] * 12 # context
|
||||
wicks += [(0.30, 0.25)] * (M_I - 12) # urcarea (idx 12..22)
|
||||
wicks += [(0.50, 0.20)] # M: high = 661.00 (vârful)
|
||||
wicks += [(SL - closes[M_I], 0.20)] # M: high = 662.71 = SL (vârful)
|
||||
wicks += [(0.20, 0.40), # trigger
|
||||
(0.25, 0.51), # TP1: low = 657.80-0.51 = 657.29
|
||||
(0.30, 0.30), (0.30, 0.30), (0.30, 0.30),
|
||||
@@ -80,7 +81,14 @@ assert abs((entry - exit_) / entry * 100 - 2.0) < 0.05, (entry - exit_) / entry
|
||||
assert abs((entry - exit_) / (sl - entry) - 4.9) < 0.1, (entry - exit_) / (sl - entry)
|
||||
assert EXIT_I - E_I == 7, EXIT_I - E_I
|
||||
assert sl > entry > tp1, "short: SL deasupra intrării, TP1 sub intrare"
|
||||
assert BAND > cds[M_I].c, "banda schematică nu e deasupra close-ului lui M"
|
||||
assert cds[M_I].c > BAND, "candela M nu se închide peste banda superioară"
|
||||
|
||||
# stopul stă FIX pe cel mai înalt high al ultimelor 4 candele (trigger inclus)
|
||||
FEREASTRA = cds[E_I - 3:E_I + 1]
|
||||
assert len(FEREASTRA) == 4 and FEREASTRA[-1] is cds[E_I], "fereastra de stop nu are 4 bare"
|
||||
assert abs(max(c.h for c in FEREASTRA) - sl) < 1e-9, \
|
||||
f"stopul {sl:.2f} nu e fix pe maximul celor 4 bare " \
|
||||
f"({max(c.h for c in FEREASTRA):.2f})"
|
||||
|
||||
# structura care susține afirmațiile din text
|
||||
assert cds[M_I].c > cds[M_I].o, "candela M trebuie să fie verde"
|
||||
@@ -96,13 +104,13 @@ assert all(cds[i].c > cds[i - 1].c for i in range(13, M_I + 1)), "urcarea nu e m
|
||||
levels = [
|
||||
Level(SL, "SL 662.71 (risc 0.41 %)", "#c00", label_at="right"),
|
||||
Level(ENTRY, "intrare short 660.00", "#188a3e", label_at="left"),
|
||||
Level(BAND, "bandă superioară (schematic)", "#777", dash="2 4", label_at="left"),
|
||||
Level(BAND, "bandă superioară (schematic)", "#777", dash="2 4", label_at="right"),
|
||||
Level(TP1, "TP1 657.29 (1:1)", "#1a5fb4", label_at="left"),
|
||||
Level(EXIT, "ieșire trail 646.80 = 2 % = ~4.9R", "#1a5fb4", label_at="left"),
|
||||
]
|
||||
|
||||
marks = [
|
||||
Mark(M_I, "M: candelă verde peste bandă + TICUS ≥ +1000", "#188a3e", "above"),
|
||||
Mark(M_I, "M: close peste bandă", "#188a3e", "above"),
|
||||
]
|
||||
|
||||
cds[M_I].note = ("M: valori exacte NEACOPERIT în material (bandă + TICUS); "
|
||||
@@ -118,7 +126,7 @@ ch = Chart(
|
||||
marks=marks,
|
||||
mas=[MA(20, "#b06000", dash="4 3", text="SMA-20")],
|
||||
scale=SCALE, width=W, gap=GAP, body_w=BODY_W, left=LEFT,
|
||||
title="SPY — 15 min: MBAP short 25.11.2025 (risc 0.41 % → ieșire 4.9R)",
|
||||
title="SPY — 15 min: MBAP short 25.11.2025",
|
||||
caption="",
|
||||
)
|
||||
price_svg = ch.render()
|
||||
@@ -158,14 +166,14 @@ ticus = [
|
||||
]
|
||||
|
||||
# ── legenda (cifrele/sursele) ───────────────────────────────────────────────
|
||||
# Fără trimiteri „fișier:linie" în etichetele SVG: sursele trăiesc doar în
|
||||
# fisa capitolului (STYLE.md, secțiunea Referințe).
|
||||
legend = [
|
||||
"Legendă: procentele (risc 0.41 %, ieșire 2 %) sunt ale instructorului.",
|
||||
"Prețurile absolute (660.00 / 662.71 / 657.29 / 646.80) sunt construite de sumarizator —",
|
||||
"09_QA/11_2025-11-25.md:716-719.",
|
||||
"Prețurile absolute (660.00 / 662.71 / 657.29 / 646.80) sunt construite de sumarizator.",
|
||||
"Structura de reținut: risc mic → TP1 (1:1) atins imediat → trail lung (7 candele de 15 min).",
|
||||
"Valoarea exactă a benzii și a TICUS la candela M nu e dată în sesiune; bara ~+1000 e ilustrativă.",
|
||||
"„Taurii urcă pe scări, urșii sar de la etaj\" — de ce short-ul se consumă în ore.",
|
||||
"(09_QA/11_2025-11-25.md:643-648).",
|
||||
]
|
||||
cap_top = Y0 + TICUS_H + 20
|
||||
H = cap_top + 16 * (len(legend) - 1) + 14
|
||||
|
||||
Reference in New Issue
Block a user