Userul a cerut ca diagramele de pret sa arate ca un grafic real (TradingView): linie continua de pret si volum, ca sa se vada trendul. Candelele izolate cu spatii mari nu spun nimic despre trend. Adaugat in svg_candles.py: - from_closes() / walk(): serii continue, open = close-ul barei anterioare, cu structura controlata exact din close-uri - panou de volum (vol_h), bare colorate pe directia candelei - MA: medii mobile calculate din close-uri - Mark: etichete ancorate pe candele anume (la 30 de bare, tag-urile per candela se suprapun) - title, Level.label_at - selftest extins: volum proportional, serie fara goluri, structura pastrata STYLE.md: regula noua, cu cele doua stiluri (serie de 25-45 de bare pentru orice grafic de pret; stilul vechi de 3-6 candele doar pentru definitii de pattern-uri de o candela) si obligatia de assert in generator. gen/exemplu_grafic_real.py: referinta de copiat. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MtSTyTmt6AbCL9j5ajEDm1
43 lines
2.5 KiB
Python
43 lines
2.5 KiB
Python
"""Exemplu de referință pentru stilul „grafic real" cerut de user pe 13.09.2026.
|
|
|
|
Rulează-l ca să vezi cum se construiește o serie continuă cu volum, medie
|
|
mobilă și etichete ancorate. Copiază structura în generatoarele tale.
|
|
vezi STYLE.md, secțiunea „Cum trebuie să arate un grafic de preț".
|
|
"""
|
|
import sys; sys.path.insert(0,"/workspace/atm-curs-dl")
|
|
from svg_candles import Chart, Level, Mark, MA, from_closes
|
|
|
|
# close-urile definesc exact structura; wick-urile fixeaza minimele/maximele
|
|
closes = [113.0,111.4,109.9,110.6,108.8,107.4,106.0,106.9,105.2,104.0, # downtrend
|
|
104.6,103.2,102.4,103.8,105.0, # picior 1 (low 101.50)
|
|
104.2,103.0,101.9,101.1,102.6, # picior 2 (low 100.20)
|
|
104.1,105.2,106.8, # breakout peste 105.50
|
|
105.9,106.0, # retest
|
|
106.6,107.0] # intrare 107.00
|
|
wicks = [(0.4,0.4)]*10 + [(0.5,0.5),(0.4,0.6),(0.5,0.90),(0.6,0.4),(0.5,0.4)] \
|
|
+ [(0.4,0.5),(0.4,0.6),(0.5,0.5),(0.4,0.90),(0.5,0.4)] \
|
|
+ [(0.5,0.3),(0.4,0.3),(0.2,0.3)] + [(0.3,0.6),(0.4,0.4)] + [(0.3,0.3),(0.2,0.3)]
|
|
vols = [46,44,41,38,52,47,44,39,48,43, 41,44,39,42,58, 47,44,40,43,70, 86,70,63, 47,44, 58,55]
|
|
cds = from_closes(closes, wicks=wicks, vols=vols, start=114.4)
|
|
|
|
lo1 = min(c.l for c in cds[10:15]); lo2 = min(c.l for c in cds[15:20])
|
|
peak = max(c.h for c in cds[13:15]); entry = cds[-1].c
|
|
assert lo2 < lo1, (lo1, lo2)
|
|
print(f"picior1 {lo1:.2f} picior2 {lo2:.2f} varf {peak:.2f} intrare {entry:.2f}")
|
|
risc = entry - 104.60
|
|
print(f"risc {risc:.2f} TP1 {(117-entry)/risc:.2f}R TP2 {(124-entry)/risc:.2f}R")
|
|
|
|
ch = Chart(candles=cds,
|
|
levels=[Level(104.60,"SL 104.60","#c00",label_at="left"),
|
|
Level(entry,f"intrare {entry:.2f}","#188a3e"),
|
|
Level(117.00,"TP1 117.00 = 4.2R","#1a5fb4"),
|
|
Level(124.00,"TP2 124.00 = 7.1R","#1a5fb4")],
|
|
marks=[Mark(13,f"picior 1: {lo1:.2f}","#c00","below"), Mark(19,f"picior 2: {lo2:.2f} (mai jos)","#c00","below"),
|
|
Mark(22,"breakout","#188a3e"), Mark(24,"retest","#b06000","below"),
|
|
Mark(26,"intrare","#188a3e")],
|
|
mas=[MA(20,"#b06000",dash="4 3",text="SMA-20")],
|
|
scale=8.0, gap=15, body_w=9, left=44, width=620, vol_h=70,
|
|
vol_label="volum", title="Disney — daily",
|
|
caption="Ale lui: pretul de 107 si tintele 117 / 124. Structura si volumul sunt construite de mine, la scara.")
|
|
print(ch.render())
|