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,7 +1,7 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Orizontul de ținere al ATMI — două descrieri incompatibile, pe aceeași axă.
|
||||
|
||||
Pentru `strategii/03_atmi.md`, marcajul `<!-- DIAGRAMA: orizont -->`.
|
||||
Pentru `strategii/05_atmi.md`, marcajul `<!-- DIAGRAMA: orizont -->`.
|
||||
Nu e grafic de preț, e o linie de timp comparativă: SVG scris de mână, doar
|
||||
stdlib — nu se folosește svg_candles / pchart.
|
||||
|
||||
@@ -19,6 +19,7 @@ Barele sunt pe o axă comună 0 → 1 an, ca diferența să fie vizibilă; bara
|
||||
|
||||
Rulare: python3 gen/strategii/atmi_orizont.py -> gen/strategii/atmi_orizont.svg
|
||||
"""
|
||||
import re
|
||||
from pathlib import Path
|
||||
from xml.sax.saxutils import escape
|
||||
|
||||
@@ -102,8 +103,7 @@ def build():
|
||||
p.append(line(AX_X1, 164, AX_X1, 226, BLUE, 1.2, "4 3"))
|
||||
p.append(txt(AX_X1, 244, "TP1 atins — aproximativ un an mai târziu",
|
||||
13, "400", BLUE, "end"))
|
||||
p.append(txt(AX_X0, 262, "Sursă: 04_MODUL_3/03_strategia_2_atmi.md:26-29; "
|
||||
":358-363", 11, "400", GRAY, "start"))
|
||||
p.append(txt(AX_X0, 262, "Sursă: lecția de ATMI", 11, "400", GRAY, "start"))
|
||||
|
||||
# ------- bara de jos: adaptarea pentru prop
|
||||
p.append(txt(AX_X0, 282, "ATMI ca adaptare pentru prop — Q&A 11.06.2025",
|
||||
@@ -127,7 +127,7 @@ def build():
|
||||
"„Ai nevoie de 3 transacții să califici propul.”",
|
||||
13, "400", BLACK))
|
||||
p.append(txt(CARD_X + CARD_W / 2, 382,
|
||||
"Sursă: 09_QA/26_2025-06-11.md:225-227", 11, "400", GRAY))
|
||||
"Sursă: Q&A 11.06.2025", 11, "400", GRAY))
|
||||
|
||||
# ------- cutia de anotare
|
||||
p.append(f'<rect x="{BOX_X}" y="{BOX_Y}" width="{BOX_W}" height="{BOX_H}" '
|
||||
@@ -140,7 +140,7 @@ def build():
|
||||
13, "400", BLACK, "start"))
|
||||
p.append(txt(BOX_X + 20, 510, "iar la atingere pozițiile se pot închide — chiar în profit.",
|
||||
13, "400", BLACK, "start"))
|
||||
p.append(txt(BOX_X + 20, 530, "Sursă: 09_QA/26_2025-06-11.md:216-222",
|
||||
p.append(txt(BOX_X + 20, 530, "Sursă: Q&A 11.06.2025",
|
||||
11, "400", GRAY, "start"))
|
||||
p.append(txt(BOX_X + 20, 560,
|
||||
"Notă: cele două descrieri nu se rezolvă aici — de clarificat "
|
||||
@@ -212,11 +212,15 @@ def verify(svg):
|
||||
"limita zilnică se calculează",
|
||||
"pozițiile se pot închide",
|
||||
"nu se rezolvă aici",
|
||||
"03_strategia_2_atmi.md:26-29",
|
||||
"09_QA/26_2025-06-11.md:225-227",
|
||||
"09_QA/26_2025-06-11.md:216-222"):
|
||||
"Sursă: lecția de ATMI",
|
||||
escape("Sursă: Q&A 11.06.2025")):
|
||||
assert cheie in svg, f"lipsește din desen: {cheie!r}"
|
||||
|
||||
# 6b. nicio trimitere „fișier:linie” în etichetele SVG: sursele trăiesc
|
||||
# doar în fișa capitolului (regulă din șablon, curățată și la cap. 06)
|
||||
assert not re.search(r"\.(md|txt):\d", svg), \
|
||||
"eticheta SVG nu are voie să conțină trimitere fișier:linie"
|
||||
|
||||
# 7. fără cifre de preț inventate
|
||||
for interzis in ("$", "USD", "SL ", "intrare "):
|
||||
assert interzis not in svg, f"nu ar trebui să apară preț: {interzis!r}"
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<text x="350.0" y="198.0" font-size="13" font-weight="400" fill="#000000" text-anchor="middle">„fără stop-loss, poziția ținută luni/ani”</text>
|
||||
<line x1="650.0" y1="164.0" x2="650.0" y2="226.0" stroke="#1a5fb4" stroke-width="1.2" stroke-dasharray="4 3"/>
|
||||
<text x="650.0" y="244.0" font-size="13" font-weight="400" fill="#1a5fb4" text-anchor="end">TP1 atins — aproximativ un an mai târziu</text>
|
||||
<text x="60.0" y="262.0" font-size="11" font-weight="400" fill="#777777" text-anchor="start">Sursă: 04_MODUL_3/03_strategia_2_atmi.md:26-29; :358-363</text>
|
||||
<text x="60.0" y="262.0" font-size="11" font-weight="400" fill="#777777" text-anchor="start">Sursă: lecția de ATMI</text>
|
||||
<text x="60.0" y="282.0" font-size="15" font-weight="700" fill="#b06000" text-anchor="start">ATMI ca adaptare pentru prop — Q&A 11.06.2025</text>
|
||||
<rect x="60.0" y="298.0" width="22.7" height="42" rx="6" fill="#fdf0e0" stroke="#b06000" stroke-width="1.5"/>
|
||||
<line x1="82.7" y1="290.0" x2="82.7" y2="360.0" stroke="#b06000" stroke-width="1.2" stroke-dasharray="4 3"/>
|
||||
@@ -35,12 +35,12 @@
|
||||
<text x="410.0" y="316.0" font-size="13" font-weight="400" fill="#000000" text-anchor="middle">„aștepți o corecție și intri pe ATMI la suport quarterly,</text>
|
||||
<text x="410.0" y="334.0" font-size="13" font-weight="400" fill="#000000" text-anchor="middle">swing, 2 săptămâni în poziție”</text>
|
||||
<text x="410.0" y="358.0" font-size="13" font-weight="400" fill="#000000" text-anchor="middle">„Ai nevoie de 3 transacții să califici propul.”</text>
|
||||
<text x="410.0" y="382.0" font-size="11" font-weight="400" fill="#777777" text-anchor="middle">Sursă: 09_QA/26_2025-06-11.md:225-227</text>
|
||||
<text x="410.0" y="382.0" font-size="11" font-weight="400" fill="#777777" text-anchor="middle">Sursă: Q&A 11.06.2025</text>
|
||||
<rect x="40.0" y="440.0" width="620.0" height="150.0" rx="8" fill="#fafafa" stroke="#777777" stroke-width="1.2"/>
|
||||
<text x="60.0" y="466.0" font-size="14" font-weight="700" fill="#000000" text-anchor="start">Anotare separată — mecanismul care face diferența</text>
|
||||
<text x="60.0" y="492.0" font-size="13" font-weight="400" fill="#000000" text-anchor="start">Pe prop, limita zilnică se calculează și pe pozițiile deschise,</text>
|
||||
<text x="60.0" y="510.0" font-size="13" font-weight="400" fill="#000000" text-anchor="start">iar la atingere pozițiile se pot închide — chiar în profit.</text>
|
||||
<text x="60.0" y="530.0" font-size="11" font-weight="400" fill="#777777" text-anchor="start">Sursă: 09_QA/26_2025-06-11.md:216-222</text>
|
||||
<text x="60.0" y="530.0" font-size="11" font-weight="400" fill="#777777" text-anchor="start">Sursă: Q&A 11.06.2025</text>
|
||||
<text x="60.0" y="560.0" font-size="13" font-weight="700" fill="#000000" text-anchor="start">Notă: cele două descrieri nu se rezolvă aici — de clarificat cu autorul.</text>
|
||||
<text x="350.0" y="626.0" font-size="12" font-weight="400" fill="#777777" text-anchor="middle">Fără axe de preț și fără să alegem una dintre variante.</text>
|
||||
<text x="350.0" y="646.0" font-size="12" font-weight="400" fill="#777777" text-anchor="middle">Bara de 2 săptămâni e scurtă exact pentru că atât ține, pe aceeași scară.</text>
|
||||
|
||||
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.7 KiB |
@@ -13,6 +13,12 @@ Legenda spune explicit lucrul ăsta.
|
||||
Serie continuă de 30 de candele din lista de close-uri din specificație,
|
||||
open = close-ul precedentului, wick-uri alese ca să scoată exact nivelurile
|
||||
(candela 13: high 100.85 = SL), panou de volum dedesubt.
|
||||
|
||||
Bear trail-ul e calculat din serie cu regula capitolului (linia sare pe
|
||||
high-ul barei care se închide sub low-ul precedentei; violare = o bară care
|
||||
se închide PESTE linie) și desenat ca scară portocalie. Seria e construită
|
||||
astfel încât fitilele să atingă linia de trei ori (barele 16, 20, 24) fără
|
||||
s-o violeze, iar ieșirea să vină abia la bara 29, care închide peste linie.
|
||||
"""
|
||||
import re
|
||||
import sys
|
||||
@@ -34,22 +40,36 @@ closes = [
|
||||
97.6, 97.1, 96.7, 96.3, 95.9, 95.6, 95.9, # 0-6 coborâre
|
||||
96.4, 96.9, 97.5, 98.2, 99.0, 99.7, 100.3, # 7-13 pullback Buy (M)
|
||||
100.00, # 14 trigger Sell (A)
|
||||
99.5, 99.0, 98.5, 98.0, 97.6, 97.2, 96.9, 96.6, 96.3, 96.1,
|
||||
95.8, 95.5, 95.2, 95.35, 95.45, # 15-29 bear trail
|
||||
99.45, 99.80, 98.58, 98.10, 97.60, 97.95, 97.40, 96.90, 96.40, 96.75,
|
||||
96.20, 95.70, 95.20, 95.00, 95.45, # 15-29 bear trail
|
||||
]
|
||||
assert len(closes) == 30, len(closes)
|
||||
|
||||
# wick-uri: candela 13 are nevoie de un wick sus până la 100.85 (SL-ul de 4
|
||||
# candele); restul sunt mici, ca seria să arate ca un grafic real.
|
||||
# candele); barele 16, 20 și 24 sunt retestări ale liniei de trail, deci au
|
||||
# fitil lung în sus care atinge linia, dar se închid sub ea. Restul sunt mici,
|
||||
# ca seria să arate ca un grafic real.
|
||||
wicks = [
|
||||
(0.15, 0.20), (0.12, 0.18), (0.15, 0.15), (0.10, 0.20), (0.12, 0.25),
|
||||
(0.10, 0.30), (0.25, 0.15),
|
||||
(0.20, 0.15), (0.15, 0.20), (0.20, 0.15), (0.20, 0.20), (0.20, 0.18),
|
||||
(0.25, 0.15), (SL - 100.3, 0.15), # 13: high = 100.85
|
||||
(0.15, 0.25), # 14: trigger Sell
|
||||
(0.15, 0.20), (0.15, 0.18), (0.12, 0.20), (0.15, 0.18), (0.15, 0.20),
|
||||
(0.12, 0.18), (0.15, 0.20), (0.12, 0.18), (0.15, 0.20), (0.12, 0.18),
|
||||
(0.15, 0.20), (0.12, 0.18), (0.15, 0.20), (0.20, 0.15), (0.30, 0.10),
|
||||
(0.15, 0.15), # 15
|
||||
(0.45, 0.10), # 16 retest trail
|
||||
(0.15, 0.15), # 17
|
||||
(0.15, 0.15), # 18
|
||||
(0.15, 0.15), # 19
|
||||
(0.40, 0.10), # 20 retest trail
|
||||
(0.15, 0.15), # 21
|
||||
(0.15, 0.15), # 22
|
||||
(0.15, 0.15), # 23
|
||||
(0.40, 0.10), # 24 retest trail
|
||||
(0.15, 0.15), # 25
|
||||
(0.15, 0.15), # 26
|
||||
(0.15, 0.15), # 27
|
||||
(0.05, 0.05), # 28: coboară trail-ul
|
||||
(0.20, 0.10), # 29: close peste trail
|
||||
]
|
||||
assert len(wicks) == 30, len(wicks)
|
||||
|
||||
@@ -95,6 +115,53 @@ for a, b in zip(cds, cds[1:]):
|
||||
assert cds[14].c < cds[13].c, (cds[13].c, cds[14].c)
|
||||
assert any(cds[i].c > cds[i].o for i in range(7, 14)), "pullback Buy absent"
|
||||
|
||||
# 10. bara 17 e la 1.42% profit (procentul real din curs)
|
||||
assert abs((ENTRY - cds[17].c) / ENTRY - 0.0142) < 1e-4, cds[17].c
|
||||
|
||||
|
||||
# ── bear trail, recalculat din serie cu regula capitolului ─────────────────
|
||||
# Linia sare pe high-ul fiecărei bare care se închide sub low-ul precedentei;
|
||||
# violarea = prima bară care se închide PESTE linie (fitilul singur nu scoate).
|
||||
def bear_trail(candles, trig):
|
||||
"""linie[i] = nivelul trail-ului în vigoare la începutul barei i (None până
|
||||
se formează linia); iesire = prima bară închisă peste linie."""
|
||||
linie, linie_la, iesire = None, [], None
|
||||
for i, c in enumerate(candles):
|
||||
linie_la.append(linie)
|
||||
if i > trig and linie is not None and c.c > linie:
|
||||
iesire = i
|
||||
break
|
||||
if i > trig:
|
||||
p = candles[i - 1]
|
||||
if c.c < p.l:
|
||||
linie = c.h
|
||||
while len(linie_la) < len(candles):
|
||||
linie_la.append(linie)
|
||||
return linie_la, iesire
|
||||
|
||||
|
||||
LINIE, EXIT_BAR = bear_trail(cds, 14)
|
||||
|
||||
# 11. ieșirea e pe bara 29, care se închide PESTE linia de trail (nu doar fitilul)
|
||||
assert EXIT_BAR == 29, f"ieșirea trebuie să fie pe bara 29, nu {EXIT_BAR}"
|
||||
TRAIL_EXIT = LINIE[29]
|
||||
assert TRAIL_EXIT is not None and cds[29].c > TRAIL_EXIT, (cds[29].c, TRAIL_EXIT)
|
||||
|
||||
# 12. linia nu urcă niciodată (e trail, nu nivel fix)
|
||||
pas = [v for v in LINIE[15:30] if v is not None]
|
||||
assert all(b <= a + 1e-9 for a, b in zip(pas, pas[1:])), pas
|
||||
|
||||
# 13. nicio bară dinainte de ieșire nu închide peste linie
|
||||
for i in range(15, 29):
|
||||
if LINIE[i] is not None:
|
||||
assert cds[i].c < LINIE[i], (i, cds[i].c, LINIE[i])
|
||||
|
||||
# 14. fitilele au atins linia de mai multe ori fără s-o violeze pe close
|
||||
atingeri = [i for i in range(15, 29) if LINIE[i] is not None
|
||||
and cds[i].h >= LINIE[i] - 1e-9 and cds[i].c < LINIE[i]]
|
||||
assert len(atingeri) >= 2, f"fitilele ating linia doar la barele {atingeri}"
|
||||
assert set(atingeri) >= {16, 20, 24}, f"retestările lipsesc: {atingeri}"
|
||||
|
||||
# ── geometria, ca să așez marks-urile „below" fără suprapunere ─────────────
|
||||
SCALE = 42
|
||||
levels = [
|
||||
@@ -177,8 +244,11 @@ definiții = [
|
||||
|
||||
|
||||
def natural_y(i: int, where: str) -> float:
|
||||
# „below": sub candelă, dar înainte de panoul de volum. Plafonul e cu 1 px
|
||||
# sub limita de jos a candidaților, altfel când bara i are chiar minimul
|
||||
# seriei nu mai rămâne niciun y întreg de testat și plasarea pică.
|
||||
return (y(cds[i].h) - 10 if where == "above"
|
||||
else min(y(cds[i].l) + 20, body_bottom + 14))
|
||||
else min(y(cds[i].l) + 20, body_bottom + 13))
|
||||
|
||||
|
||||
# candidați: toate y-urile care nu ating niciun corp de candelă, ordonate
|
||||
@@ -239,6 +309,33 @@ ch = Chart(
|
||||
svg = ch.render()
|
||||
assert "<svg" in svg and svg.count("\n\n") == 0, "linie goală în SVG"
|
||||
|
||||
# ── linia de trail, desenată ca scară portocalie ───────────────────────────
|
||||
# Nivelul desenat la bara i e cel în vigoare după bara i (linia sare pe bara
|
||||
# care a închis sub low-ul precedentei). Eticheta stă la stânga primului
|
||||
# palier, ca să nu treacă peste fitilul lung al barei 13.
|
||||
def nivel_desen(i: int):
|
||||
return LINIE[i + 1] if i + 1 < len(LINIE) else LINIE[i]
|
||||
|
||||
|
||||
trail_parts, prev_y = [], None
|
||||
for i in range(15, len(cds)):
|
||||
v = nivel_desen(i)
|
||||
if v is None:
|
||||
continue
|
||||
x0, x1, yv = cx(i) - GAP / 2, cx(i) + GAP / 2, y(v)
|
||||
trail_parts.append(
|
||||
f'<line x1="{x0:.1f}" y1="{yv:.1f}" x2="{x1:.1f}" y2="{yv:.1f}" '
|
||||
f'stroke="#b06000" stroke-width="2"/>')
|
||||
if prev_y is not None and abs(prev_y - yv) > 1e-9:
|
||||
trail_parts.append(
|
||||
f'<line x1="{x0:.1f}" y1="{prev_y:.1f}" x2="{x0:.1f}" y2="{yv:.1f}" '
|
||||
f'stroke="#b06000" stroke-width="1.2" stroke-dasharray="2 2"/>')
|
||||
prev_y = yv
|
||||
trail_parts.append(
|
||||
f'<text x="{cx(13) - 6:.1f}" y="{y(nivel_desen(15)) - 14:.1f}" fill="#b06000" '
|
||||
f'text-anchor="end" style="font-weight:bold">bear trail</text>')
|
||||
svg = svg.replace("\n</svg>", "\n " + "\n ".join(trail_parts) + "\n</svg>")
|
||||
|
||||
# ── verificare: fiecare etichetă e în pânză și nu se suprapune alta ────────
|
||||
m = re.search(r'viewBox="0 0 (\d+) (\d+)"', svg)
|
||||
W, H = int(m.group(1)), int(m.group(2))
|
||||
|
||||
@@ -34,9 +34,21 @@ Faza 2, candelele 7-13 — pullback în sus = Buy Momentum pe TF mic (M):
|
||||
Faza 3, candela 14 — primul Sell după pullback = trigger (A):
|
||||
open 100.30 (close-ul candelei 13), close 100.00.
|
||||
Faza 4, candelele 15-29 — coborâre cu bear trail:
|
||||
close-uri: 99.5, 99.0, 98.5, 98.0, 97.6, 97.2, 96.9, 96.6, 96.3, 96.1,
|
||||
95.8, 95.5, 95.2, 95.35, 95.45
|
||||
candela 29 (close 95.45) e ieșirea pe violarea bear trail-ului.
|
||||
close-uri: 99.45, 99.80, 98.58, 98.10, 97.60, 97.95, 97.40, 96.90, 96.40,
|
||||
96.75, 96.20, 95.70, 95.20, 95.00, 95.45
|
||||
barele 16, 20 și 24 sunt retestări: fitil lung în sus care atinge linia de
|
||||
trail, dar se închide sub ea (nu o violează). Candela 29 (close 95.45) e
|
||||
ieșirea: se închide PESTE linia de trail (95.25), deci violarea e reală.
|
||||
|
||||
BEAR TRAIL (linia de trail, desenată ca scară portocalie)
|
||||
---------------------------------------------------------
|
||||
Regula capitolului: linia sare pe high-ul fiecărei bare care se închide sub
|
||||
low-ul precedentei; violarea = prima bară care se închide PESTE linie.
|
||||
Linia NU urcă niciodată. Seria e construită astfel încât fitilele barelor
|
||||
16/20/24 să atingă linia fără s-o violeze, iar ieșirea să vină abia la bara
|
||||
29, care închide peste linie (nu doar cu fitilul). Linia se desenează ca
|
||||
scară (un palier pe bară, conector vertical între paliere), etichetă
|
||||
„bear trail" lângă primul palier.
|
||||
|
||||
NIVELURI (Level) — exact acestea
|
||||
--------------------------------
|
||||
@@ -73,6 +85,15 @@ ASSERT-URI OBLIGATORII ÎN GENERATOR
|
||||
8. Fiecare open == close-ul barei anterioare.
|
||||
9. Candela 14 închide în jos față de candela 13 (trigger Sell după pullback Buy);
|
||||
există cel puțin o candelă din 7-13 care închide în sus (pullback-ul Buy).
|
||||
10. Bara 17 e la exact 1.42% profit față de intrare (procentul real din curs).
|
||||
11. Bear trail recalculat din serie: ieșirea e pe bara 29, iar close-ul ei
|
||||
(95.45) e PESTE linia de trail (95.25) — nu doar fitilul. (Pe seria veche
|
||||
close-ul 95.45 era sub linia 95.65 și nu exista nicio ieșire.)
|
||||
12. Linia de trail nu urcă niciodată (e trail, nu nivel fix).
|
||||
13. Nicio bară dinainte de 29 nu închide peste linie (altfel ieșeai mai devreme).
|
||||
14. Fitilele au atins linia de mai multe ori fără s-o violeze: barele 16, 20
|
||||
și 24 au high ≥ linia în vigoare și close < ea. (Pe seria veche, pe
|
||||
barele 15-28 niciun high nu ajungea la linie.)
|
||||
|
||||
SURSA CIFRELOR
|
||||
--------------
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<svg viewBox="0 0 700 440" xmlns="http://www.w3.org/2000/svg" style="width:100%;height:auto;font:12px sans-serif">
|
||||
<svg viewBox="0 0 700 444" xmlns="http://www.w3.org/2000/svg" style="width:100%;height:auto;font:12px sans-serif">
|
||||
<text x="24" y="48" fill="#333" style="font-weight:bold">RIOT — 3 min (TF mare 15 min în Sell)</text>
|
||||
<line x1="24" y1="56.0" x2="686" y2="56.0" stroke="#c00" stroke-width="1.5" stroke-dasharray="4 3"/>
|
||||
<text x="672" y="50.0" fill="#c00" text-anchor="end">SL 100.85 = +0.85%</text>
|
||||
@@ -39,71 +39,97 @@
|
||||
<line x1="254.0" y1="72.8" x2="254.0" y2="102.2" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="249.0" y="79.1" width="10" height="12.6" fill="#c00"/>
|
||||
<line x1="269.0" y1="85.4" x2="269.0" y2="121.1" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="264.0" y="91.7" width="10" height="21.0" fill="#c00"/>
|
||||
<line x1="284.0" y1="106.4" x2="284.0" y2="141.3" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="279.0" y="112.7" width="10" height="21.0" fill="#c00"/>
|
||||
<line x1="299.0" y1="128.7" x2="299.0" y2="163.1" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="294.0" y="133.7" width="10" height="21.0" fill="#c00"/>
|
||||
<line x1="314.0" y1="148.4" x2="314.0" y2="183.3" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="309.0" y="154.7" width="10" height="21.0" fill="#c00"/>
|
||||
<line x1="329.0" y1="169.4" x2="329.0" y2="200.9" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="324.0" y="175.7" width="10" height="16.8" fill="#c00"/>
|
||||
<line x1="344.0" y1="187.5" x2="344.0" y2="216.9" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="339.0" y="192.5" width="10" height="16.8" fill="#c00"/>
|
||||
<line x1="359.0" y1="203.0" x2="359.0" y2="230.3" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="354.0" y="209.3" width="10" height="12.6" fill="#c00"/>
|
||||
<line x1="374.0" y1="216.9" x2="374.0" y2="242.1" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="369.0" y="221.9" width="10" height="12.6" fill="#c00"/>
|
||||
<line x1="389.0" y1="228.2" x2="389.0" y2="255.5" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="384.0" y="234.5" width="10" height="12.6" fill="#c00"/>
|
||||
<line x1="404.0" y1="242.1" x2="404.0" y2="263.1" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="399.0" y="247.1" width="10" height="8.4" fill="#c00"/>
|
||||
<line x1="419.0" y1="249.2" x2="419.0" y2="276.5" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="414.0" y="255.5" width="10" height="12.6" fill="#c00"/>
|
||||
<line x1="434.0" y1="263.1" x2="434.0" y2="288.3" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="429.0" y="268.1" width="10" height="12.6" fill="#c00"/>
|
||||
<line x1="449.0" y1="274.4" x2="449.0" y2="301.7" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="444.0" y="280.7" width="10" height="12.6" fill="#c00"/>
|
||||
<line x1="464.0" y1="278.6" x2="464.0" y2="299.6" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="459.0" y="287.0" width="10" height="6.3" fill="#188a3e"/>
|
||||
<line x1="479.0" y1="270.2" x2="479.0" y2="291.2" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="474.0" y="282.8" width="10" height="4.2" fill="#188a3e"/>
|
||||
<line x1="24" y1="397.7" x2="686" y2="397.7" stroke="#888"/>
|
||||
<rect x="39.0" y="358.2" width="10" height="39.5" fill="#c00" opacity="0.55"/>
|
||||
<rect x="54.0" y="360.6" width="10" height="37.1" fill="#c00" opacity="0.55"/>
|
||||
<rect x="69.0" y="363.1" width="10" height="34.6" fill="#c00" opacity="0.55"/>
|
||||
<rect x="84.0" y="364.8" width="10" height="32.9" fill="#c00" opacity="0.55"/>
|
||||
<rect x="99.0" y="361.5" width="10" height="36.2" fill="#c00" opacity="0.55"/>
|
||||
<rect x="114.0" y="356.5" width="10" height="41.2" fill="#c00" opacity="0.55"/>
|
||||
<rect x="129.0" y="359.8" width="10" height="37.9" fill="#188a3e" opacity="0.55"/>
|
||||
<rect x="144.0" y="363.1" width="10" height="34.6" fill="#188a3e" opacity="0.55"/>
|
||||
<rect x="159.0" y="361.5" width="10" height="36.2" fill="#188a3e" opacity="0.55"/>
|
||||
<rect x="174.0" y="364.8" width="10" height="32.9" fill="#188a3e" opacity="0.55"/>
|
||||
<rect x="189.0" y="362.3" width="10" height="35.4" fill="#188a3e" opacity="0.55"/>
|
||||
<rect x="204.0" y="359.0" width="10" height="38.7" fill="#188a3e" opacity="0.55"/>
|
||||
<rect x="219.0" y="354.9" width="10" height="42.8" fill="#188a3e" opacity="0.55"/>
|
||||
<rect x="234.0" y="341.7" width="10" height="56.0" fill="#188a3e" opacity="0.55"/>
|
||||
<rect x="249.0" y="327.7" width="10" height="70.0" fill="#c00" opacity="0.55"/>
|
||||
<rect x="264.0" y="348.3" width="10" height="49.4" fill="#c00" opacity="0.55"/>
|
||||
<rect x="279.0" y="352.4" width="10" height="45.3" fill="#c00" opacity="0.55"/>
|
||||
<rect x="294.0" y="354.9" width="10" height="42.8" fill="#c00" opacity="0.55"/>
|
||||
<rect x="309.0" y="358.2" width="10" height="39.5" fill="#c00" opacity="0.55"/>
|
||||
<rect x="324.0" y="359.8" width="10" height="37.9" fill="#c00" opacity="0.55"/>
|
||||
<rect x="339.0" y="361.5" width="10" height="36.2" fill="#c00" opacity="0.55"/>
|
||||
<rect x="354.0" y="363.1" width="10" height="34.6" fill="#c00" opacity="0.55"/>
|
||||
<rect x="369.0" y="364.8" width="10" height="32.9" fill="#c00" opacity="0.55"/>
|
||||
<rect x="384.0" y="362.3" width="10" height="35.4" fill="#c00" opacity="0.55"/>
|
||||
<rect x="399.0" y="363.9" width="10" height="33.8" fill="#c00" opacity="0.55"/>
|
||||
<rect x="414.0" y="361.5" width="10" height="36.2" fill="#c00" opacity="0.55"/>
|
||||
<rect x="429.0" y="363.1" width="10" height="34.6" fill="#c00" opacity="0.55"/>
|
||||
<rect x="444.0" y="364.8" width="10" height="32.9" fill="#c00" opacity="0.55"/>
|
||||
<rect x="459.0" y="360.6" width="10" height="37.1" fill="#188a3e" opacity="0.55"/>
|
||||
<rect x="474.0" y="338.4" width="10" height="59.3" fill="#188a3e" opacity="0.55"/>
|
||||
<text x="24" y="321.7" fill="#555">volum</text>
|
||||
<rect x="264.0" y="91.7" width="10" height="23.1" fill="#c00"/>
|
||||
<line x1="284.0" y1="81.2" x2="284.0" y2="119.0" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="279.0" y="100.1" width="10" height="14.7" fill="#188a3e"/>
|
||||
<line x1="299.0" y1="93.8" x2="299.0" y2="157.6" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="294.0" y="100.1" width="10" height="51.2" fill="#c00"/>
|
||||
<line x1="314.0" y1="145.0" x2="314.0" y2="177.8" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="309.0" y="151.3" width="10" height="20.2" fill="#c00"/>
|
||||
<line x1="329.0" y1="165.2" x2="329.0" y2="198.8" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="324.0" y="171.5" width="10" height="21.0" fill="#c00"/>
|
||||
<line x1="344.0" y1="161.0" x2="344.0" y2="196.7" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="339.0" y="177.8" width="10" height="14.7" fill="#188a3e"/>
|
||||
<line x1="359.0" y1="171.5" x2="359.0" y2="207.2" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="354.0" y="177.8" width="10" height="23.1" fill="#c00"/>
|
||||
<line x1="374.0" y1="194.6" x2="374.0" y2="228.2" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="369.0" y="200.9" width="10" height="21.0" fill="#c00"/>
|
||||
<line x1="389.0" y1="215.6" x2="389.0" y2="249.2" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="384.0" y="221.9" width="10" height="21.0" fill="#c00"/>
|
||||
<line x1="404.0" y1="211.4" x2="404.0" y2="247.1" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="399.0" y="228.2" width="10" height="14.7" fill="#188a3e"/>
|
||||
<line x1="419.0" y1="221.9" x2="419.0" y2="257.6" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="414.0" y="228.2" width="10" height="23.1" fill="#c00"/>
|
||||
<line x1="434.0" y1="245.0" x2="434.0" y2="278.6" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="429.0" y="251.3" width="10" height="21.0" fill="#c00"/>
|
||||
<line x1="449.0" y1="266.0" x2="449.0" y2="299.6" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="444.0" y="272.3" width="10" height="21.0" fill="#c00"/>
|
||||
<line x1="464.0" y1="291.2" x2="464.0" y2="303.8" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="459.0" y="293.3" width="10" height="8.4" fill="#c00"/>
|
||||
<line x1="479.0" y1="274.4" x2="479.0" y2="305.9" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="474.0" y="282.8" width="10" height="18.9" fill="#188a3e"/>
|
||||
<line x1="24" y1="401.9" x2="686" y2="401.9" stroke="#888"/>
|
||||
<rect x="39.0" y="362.4" width="10" height="39.5" fill="#c00" opacity="0.55"/>
|
||||
<rect x="54.0" y="364.8" width="10" height="37.1" fill="#c00" opacity="0.55"/>
|
||||
<rect x="69.0" y="367.3" width="10" height="34.6" fill="#c00" opacity="0.55"/>
|
||||
<rect x="84.0" y="369.0" width="10" height="32.9" fill="#c00" opacity="0.55"/>
|
||||
<rect x="99.0" y="365.7" width="10" height="36.2" fill="#c00" opacity="0.55"/>
|
||||
<rect x="114.0" y="360.7" width="10" height="41.2" fill="#c00" opacity="0.55"/>
|
||||
<rect x="129.0" y="364.0" width="10" height="37.9" fill="#188a3e" opacity="0.55"/>
|
||||
<rect x="144.0" y="367.3" width="10" height="34.6" fill="#188a3e" opacity="0.55"/>
|
||||
<rect x="159.0" y="365.7" width="10" height="36.2" fill="#188a3e" opacity="0.55"/>
|
||||
<rect x="174.0" y="369.0" width="10" height="32.9" fill="#188a3e" opacity="0.55"/>
|
||||
<rect x="189.0" y="366.5" width="10" height="35.4" fill="#188a3e" opacity="0.55"/>
|
||||
<rect x="204.0" y="363.2" width="10" height="38.7" fill="#188a3e" opacity="0.55"/>
|
||||
<rect x="219.0" y="359.1" width="10" height="42.8" fill="#188a3e" opacity="0.55"/>
|
||||
<rect x="234.0" y="345.9" width="10" height="56.0" fill="#188a3e" opacity="0.55"/>
|
||||
<rect x="249.0" y="331.9" width="10" height="70.0" fill="#c00" opacity="0.55"/>
|
||||
<rect x="264.0" y="352.5" width="10" height="49.4" fill="#c00" opacity="0.55"/>
|
||||
<rect x="279.0" y="356.6" width="10" height="45.3" fill="#188a3e" opacity="0.55"/>
|
||||
<rect x="294.0" y="359.1" width="10" height="42.8" fill="#c00" opacity="0.55"/>
|
||||
<rect x="309.0" y="362.4" width="10" height="39.5" fill="#c00" opacity="0.55"/>
|
||||
<rect x="324.0" y="364.0" width="10" height="37.9" fill="#c00" opacity="0.55"/>
|
||||
<rect x="339.0" y="365.7" width="10" height="36.2" fill="#188a3e" opacity="0.55"/>
|
||||
<rect x="354.0" y="367.3" width="10" height="34.6" fill="#c00" opacity="0.55"/>
|
||||
<rect x="369.0" y="369.0" width="10" height="32.9" fill="#c00" opacity="0.55"/>
|
||||
<rect x="384.0" y="366.5" width="10" height="35.4" fill="#c00" opacity="0.55"/>
|
||||
<rect x="399.0" y="368.1" width="10" height="33.8" fill="#188a3e" opacity="0.55"/>
|
||||
<rect x="414.0" y="365.7" width="10" height="36.2" fill="#c00" opacity="0.55"/>
|
||||
<rect x="429.0" y="367.3" width="10" height="34.6" fill="#c00" opacity="0.55"/>
|
||||
<rect x="444.0" y="369.0" width="10" height="32.9" fill="#c00" opacity="0.55"/>
|
||||
<rect x="459.0" y="364.8" width="10" height="37.1" fill="#c00" opacity="0.55"/>
|
||||
<rect x="474.0" y="342.6" width="10" height="59.3" fill="#188a3e" opacity="0.55"/>
|
||||
<text x="24" y="325.9" fill="#555">volum</text>
|
||||
<text x="32.0" y="123.0" fill="#c00" text-anchor="start" style="font-weight:bold">TF mare (15 min) în Sell</text>
|
||||
<text x="149.0" y="307.0" fill="#0891b2" text-anchor="middle" style="font-weight:bold">M: Buy Momentum (pullback)</text>
|
||||
<text x="254.0" y="294.0" fill="#c00" text-anchor="middle" style="font-weight:bold">A: primul Sell = trigger, intri short</text>
|
||||
<text x="299.0" y="264.0" fill="#188a3e" text-anchor="middle" style="font-weight:bold">deja peste TP1 (1.42% din curs)</text>
|
||||
<text x="479.0" y="312.0" fill="#188a3e" text-anchor="middle" style="font-weight:bold">close peste bear trail = ieși</text>
|
||||
<text x="24" y="428" fill="#555">Axa de preț e construită (intrarea = 100.00); procentele sunt reale din curs.</text>
|
||||
<text x="299.0" y="251.0" fill="#188a3e" text-anchor="middle" style="font-weight:bold">deja peste TP1 (1.42% din curs)</text>
|
||||
<text x="479.0" y="319.9" fill="#188a3e" text-anchor="middle" style="font-weight:bold">close peste bear trail = ieși</text>
|
||||
<text x="24" y="432" fill="#555">Axa de preț e construită (intrarea = 100.00); procentele sunt reale din curs.</text>
|
||||
<line x1="261.5" y1="85.4" x2="276.5" y2="85.4" stroke="#b06000" stroke-width="2"/>
|
||||
<line x1="276.5" y1="85.4" x2="291.5" y2="85.4" stroke="#b06000" stroke-width="2"/>
|
||||
<line x1="291.5" y1="93.8" x2="306.5" y2="93.8" stroke="#b06000" stroke-width="2"/>
|
||||
<line x1="291.5" y1="85.4" x2="291.5" y2="93.8" stroke="#b06000" stroke-width="1.2" stroke-dasharray="2 2"/>
|
||||
<line x1="306.5" y1="145.0" x2="321.5" y2="145.0" stroke="#b06000" stroke-width="2"/>
|
||||
<line x1="306.5" y1="93.8" x2="306.5" y2="145.0" stroke="#b06000" stroke-width="1.2" stroke-dasharray="2 2"/>
|
||||
<line x1="321.5" y1="165.2" x2="336.5" y2="165.2" stroke="#b06000" stroke-width="2"/>
|
||||
<line x1="321.5" y1="145.0" x2="321.5" y2="165.2" stroke="#b06000" stroke-width="1.2" stroke-dasharray="2 2"/>
|
||||
<line x1="336.5" y1="165.2" x2="351.5" y2="165.2" stroke="#b06000" stroke-width="2"/>
|
||||
<line x1="351.5" y1="171.5" x2="366.5" y2="171.5" stroke="#b06000" stroke-width="2"/>
|
||||
<line x1="351.5" y1="165.2" x2="351.5" y2="171.5" stroke="#b06000" stroke-width="1.2" stroke-dasharray="2 2"/>
|
||||
<line x1="366.5" y1="194.6" x2="381.5" y2="194.6" stroke="#b06000" stroke-width="2"/>
|
||||
<line x1="366.5" y1="171.5" x2="366.5" y2="194.6" stroke="#b06000" stroke-width="1.2" stroke-dasharray="2 2"/>
|
||||
<line x1="381.5" y1="215.6" x2="396.5" y2="215.6" stroke="#b06000" stroke-width="2"/>
|
||||
<line x1="381.5" y1="194.6" x2="381.5" y2="215.6" stroke="#b06000" stroke-width="1.2" stroke-dasharray="2 2"/>
|
||||
<line x1="396.5" y1="215.6" x2="411.5" y2="215.6" stroke="#b06000" stroke-width="2"/>
|
||||
<line x1="411.5" y1="221.9" x2="426.5" y2="221.9" stroke="#b06000" stroke-width="2"/>
|
||||
<line x1="411.5" y1="215.6" x2="411.5" y2="221.9" stroke="#b06000" stroke-width="1.2" stroke-dasharray="2 2"/>
|
||||
<line x1="426.5" y1="245.0" x2="441.5" y2="245.0" stroke="#b06000" stroke-width="2"/>
|
||||
<line x1="426.5" y1="221.9" x2="426.5" y2="245.0" stroke="#b06000" stroke-width="1.2" stroke-dasharray="2 2"/>
|
||||
<line x1="441.5" y1="266.0" x2="456.5" y2="266.0" stroke="#b06000" stroke-width="2"/>
|
||||
<line x1="441.5" y1="245.0" x2="441.5" y2="266.0" stroke="#b06000" stroke-width="1.2" stroke-dasharray="2 2"/>
|
||||
<line x1="456.5" y1="291.2" x2="471.5" y2="291.2" stroke="#b06000" stroke-width="2"/>
|
||||
<line x1="456.5" y1="266.0" x2="456.5" y2="291.2" stroke="#b06000" stroke-width="1.2" stroke-dasharray="2 2"/>
|
||||
<line x1="471.5" y1="291.2" x2="486.5" y2="291.2" stroke="#b06000" stroke-width="2"/>
|
||||
<text x="233.0" y="71.4" fill="#b06000" text-anchor="end" style="font-weight:bold">bear trail</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 11 KiB |
@@ -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
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<svg viewBox="0 0 660 730" xmlns="http://www.w3.org/2000/svg" style="width:100%;height:auto;font:12px sans-serif">
|
||||
<svg viewBox="0 0 660 698" xmlns="http://www.w3.org/2000/svg" style="width:100%;height:auto;font:12px sans-serif">
|
||||
<g transform="translate(0,0)">
|
||||
<text x="24" y="48" fill="#333" style="font-weight:bold">SPY — 15 min: MBAP short 25.11.2025 (risc 0.41 % → ieșire 4.9R)</text>
|
||||
<text x="24" y="48" fill="#333" style="font-weight:bold">SPY — 15 min: MBAP short 25.11.2025</text>
|
||||
<line x1="24" y1="56.0" x2="646" y2="56.0" stroke="#c00" stroke-width="1.5" stroke-dasharray="4 3"/>
|
||||
<text x="632" y="50.0" fill="#c00" text-anchor="end">SL 662.71 (risc 0.41 %)</text>
|
||||
<line x1="24" y1="110.2" x2="646" y2="110.2" stroke="#188a3e" stroke-width="1.5" stroke-dasharray="4 3"/>
|
||||
<text x="30" y="104.2" fill="#188a3e">intrare short 660.00</text>
|
||||
<line x1="24" y1="92.2" x2="646" y2="92.2" stroke="#777" stroke-width="1.5" stroke-dasharray="2 4"/>
|
||||
<text x="30" y="86.2" fill="#777">bandă superioară (schematic)</text>
|
||||
<line x1="24" y1="106.2" x2="646" y2="106.2" stroke="#777" stroke-width="1.5" stroke-dasharray="2 4"/>
|
||||
<text x="632" y="100.2" fill="#777" text-anchor="end">bandă superioară (schematic)</text>
|
||||
<line x1="24" y1="164.4" x2="646" y2="164.4" stroke="#1a5fb4" stroke-width="1.5" stroke-dasharray="4 3"/>
|
||||
<text x="30" y="158.4" fill="#1a5fb4">TP1 657.29 (1:1)</text>
|
||||
<line x1="24" y1="374.2" x2="646" y2="374.2" stroke="#1a5fb4" stroke-width="1.5" stroke-dasharray="4 3"/>
|
||||
@@ -59,7 +59,7 @@
|
||||
<rect x="350.5" y="160.2" width="9" height="24.0" fill="#188a3e"/>
|
||||
<line x1="370.0" y1="128.2" x2="370.0" y2="165.2" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="365.5" y="134.2" width="9" height="26.0" fill="#188a3e"/>
|
||||
<line x1="385.0" y1="90.2" x2="385.0" y2="138.2" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<line x1="385.0" y1="56.0" x2="385.0" y2="138.2" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="380.5" y="100.2" width="9" height="34.0" fill="#188a3e"/>
|
||||
<line x1="400.0" y1="96.2" x2="400.0" y2="118.2" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="395.5" y="100.2" width="9" height="10.0" fill="#c00"/>
|
||||
@@ -77,7 +77,7 @@
|
||||
<rect x="485.5" y="278.2" width="9" height="44.0" fill="#c00"/>
|
||||
<line x1="505.0" y1="316.2" x2="505.0" y2="380.2" stroke="#1a1a1a" stroke-width="1.2"/>
|
||||
<rect x="500.5" y="322.2" width="9" height="52.0" fill="#c00"/>
|
||||
<text x="385.0" y="80.2" fill="#188a3e" text-anchor="middle" style="font-weight:bold">M: candelă verde peste bandă + TICUS ≥ +1000</text>
|
||||
<text x="385.0" y="46.0" fill="#188a3e" text-anchor="middle" style="font-weight:bold">M: close peste bandă</text>
|
||||
<text x="24" y="402.2" fill="#188a3e">M: valori exacte NEACOPERIT în material (bandă + TICUS); bara ~+1000 din panou e ilustrativă</text>
|
||||
<text x="24" y="419.2" fill="#c00">trigger Sell Momentum → intrare short 660.00 (risc 0.41 % = 2.71)</text>
|
||||
<text x="24" y="436.2" fill="#c00">TP1 657.29 (1:1) atins în prima candelă după intrare</text>
|
||||
@@ -92,10 +92,8 @@
|
||||
<text x="385.0" y="509.0" fill="#777" text-anchor="middle">ilustrativ</text>
|
||||
<text x="385.0" y="600.0" fill="#777" text-anchor="middle">candela M</text>
|
||||
<text x="24" y="620.0" fill="#555">Legendă: procentele (risc 0.41 %, ieșire 2 %) sunt ale instructorului.</text>
|
||||
<text x="24" y="636.0" fill="#555">Prețurile absolute (660.00 / 662.71 / 657.29 / 646.80) sunt construite de sumarizator —</text>
|
||||
<text x="24" y="652.0" fill="#555">09_QA/11_2025-11-25.md:716-719.</text>
|
||||
<text x="24" y="668.0" fill="#555">Structura de reținut: risc mic → TP1 (1:1) atins imediat → trail lung (7 candele de 15 min).</text>
|
||||
<text x="24" y="684.0" fill="#555">Valoarea exactă a benzii și a TICUS la candela M nu e dată în sesiune; bara ~+1000 e ilustrativă.</text>
|
||||
<text x="24" y="700.0" fill="#555">„Taurii urcă pe scări, urșii sar de la etaj" — de ce short-ul se consumă în ore.</text>
|
||||
<text x="24" y="716.0" fill="#555">(09_QA/11_2025-11-25.md:643-648).</text>
|
||||
<text x="24" y="636.0" fill="#555">Prețurile absolute (660.00 / 662.71 / 657.29 / 646.80) sunt construite de sumarizator.</text>
|
||||
<text x="24" y="652.0" fill="#555">Structura de reținut: risc mic → TP1 (1:1) atins imediat → trail lung (7 candele de 15 min).</text>
|
||||
<text x="24" y="668.0" fill="#555">Valoarea exactă a benzii și a TICUS la candela M nu e dată în sesiune; bara ~+1000 e ilustrativă.</text>
|
||||
<text x="24" y="684.0" fill="#555">„Taurii urcă pe scări, urșii sar de la etaj" — de ce short-ul se consumă în ore.</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 8.3 KiB |
Reference in New Issue
Block a user