hammer_mbt10: noua diagrame noi (textul urmeaza)
Buy hammer: forma (patru candele cu aceeasi inaltime, DA/limita/NU), trend (aceeasi bara dupa scadere e hammer, dupa urcare e hanging man — verificat prin assert), locatie, trigger in trei panouri, stop, iesire, si oglinda pe short obtinuta prin oglindire bara cu bara. MBT-10: confluente si close peste pivotul daily. Doua serii partajate (bh_ansamblu si mbt_confluente expun serie()), ca sa nu existe doua variante ale aceluiasi trade. Capitolul se imparte in doua proceduri separate, nu una amestecata: partea A buy hammer in 5 pasi cu oglinda pe short, partea B MBT-10 in 5 pasi, cu nivelul 1 comun. Textul e neatins — agentul a atins pragul de context. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ThN7ixZrowca8aTGrK1MUJ
This commit is contained in:
64
gen/strategii/hammer_mbt10_mbt_ppd.py
Normal file
64
gen/strategii/hammer_mbt10_mbt_ppd.py
Normal file
@@ -0,0 +1,64 @@
|
||||
#!/usr/bin/env python3
|
||||
"""MBT-10 — singura bucată reconstituibilă: close peste pivotul daily.
|
||||
|
||||
Aceleași bare ca la pasul „unde" (importate din `hammer_mbt10_mbt_confluente`),
|
||||
tăiate în jurul trigger-ului. Bara 18 atinge pivotul 89.60 în timpul zilei,
|
||||
dar se închide sub el: nu e semnal. Bara 19 se închide la 89.90, peste pivot:
|
||||
aici intri, la close.
|
||||
|
||||
Rulare: python3 gen/strategii/hammer_mbt10_mbt_ppd.py
|
||||
"""
|
||||
import re
|
||||
import sys; sys.path.insert(0, "/workspace/atm-curs-dl")
|
||||
sys.path.insert(0, "/workspace/atm-curs-dl/gen/strategii")
|
||||
from pathlib import Path
|
||||
from hammer_mbt10_mbt_confluente import CLOSE_I, INTRARE, PPD, SUP_W, serie
|
||||
from svg_candles import Arrow, Chart, Level, Zone
|
||||
|
||||
OUT = Path(__file__).with_suffix(".svg")
|
||||
GREEN, RED, BLUE, ORANGE, GREY = "#188a3e", "#c00", "#1a5fb4", "#b06000", "#555"
|
||||
|
||||
cds = serie()
|
||||
I0, I1 = 9, 22
|
||||
w = cds[I0:I1 + 1]
|
||||
sh = lambda i: i - I0 # noqa: E731
|
||||
NU, DA = CLOSE_I - 1, CLOSE_I
|
||||
|
||||
assert cds[NU].h > PPD > cds[NU].c, "bara 18 nu mai e contraexemplul așteptat"
|
||||
assert cds[DA].c > PPD and round(cds[DA].c, 2) == INTRARE
|
||||
assert 0 <= sh(NU) < len(w) and sh(DA) < len(w), "fereastra nu prinde cele două bare"
|
||||
assert max(c.c for c in cds[I0:DA]) < PPD, "o bară din fereastră închide deja peste pivot"
|
||||
|
||||
ch = Chart(
|
||||
candles=w,
|
||||
levels=[Level(PPD, "pivotul daily 89.60", BLUE),
|
||||
Level(SUP_W, "suport weekly 87.50", GREY, label_at="left")],
|
||||
zones=[Zone(sh(NU), sh(DA), "cele două zile care se compară", ORANGE)],
|
||||
arrows=[
|
||||
Arrow(sh(NU), "a atins 89.70 în timpul zilei,\ndar s-a închis la 89.40, sub pivot:\nnu e semnal",
|
||||
where="below", color=RED, dx=-190, dy=40),
|
||||
Arrow(sh(DA), "s-a închis la 89.90, peste pivot:\naici intri, la close-ul zilei",
|
||||
where="above", color=GREEN, dx=-70, dy=-20),
|
||||
],
|
||||
scale=44.0, gap=26, body_w=13, left=64, width=680, vol_h=60, vol_label="volum",
|
||||
title="MBT-10 — condiția de preț: close peste pivotul daily (exemplu construit)",
|
||||
)
|
||||
svg = ch.render()
|
||||
m = re.search(r'viewBox="0 0 (\d+) (\d+)"', svg)
|
||||
W, H = int(m.group(1)), int(m.group(2))
|
||||
linii = [
|
||||
("Pivotul daily se recalculează în fiecare zi din maximul, minimul și închiderea zilei "
|
||||
"precedente;", "#333"),
|
||||
("linia desenată e valoarea din ziua intrării, 89.60, nu un nivel fix.", "#333"),
|
||||
("Asta e tot ce se poate verifica din MBT-10 fără indicatorul proprietar — „prima "
|
||||
"componentă\" din el,", GREY),
|
||||
("cum îi spune materialul; restul formulei nu e publicat nicăieri.", GREY),
|
||||
]
|
||||
add = 16 * len(linii) + 10
|
||||
svg = svg.replace(f'viewBox="0 0 {W} {H}"', f'viewBox="0 0 {W} {H + add}"')
|
||||
svg = svg.replace("</svg>", "".join(
|
||||
f'<text x="24" y="{H + 10 + 16 * i}" fill="{c}">{t}</text>'
|
||||
for i, (t, c) in enumerate(linii)) + "</svg>")
|
||||
assert "\n\n" not in svg, "linie goală în SVG"
|
||||
OUT.write_text(svg, encoding="utf-8")
|
||||
print(f"scris {OUT.name} ({W}x{H + add})")
|
||||
Reference in New Issue
Block a user