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}"
|
||||
|
||||
Reference in New Issue
Block a user