buy_doji: graficul TF-ului mic devine lupa pe candelele TF-ului mare

Userul nu putea vedea ce bucata din weekly e reprezentata de daily. In
perechi_tf si directie, graficul mic nu mai e o serie care vine dupa cel
mare, ci descompunerea lui reala: o candela mare = k candele mici, cu
open, close, max(high) si min(low) care coincid, verificat bara cu bara
prin assert. k per pereche: 5 zile/saptamana, 4 saptamani/luna, 7 bare
de 60 min/zi.

Corespondenta se vede: caseta de lupa peste exact candelele marite,
ghidaje catre colturile cadrului mic, si nivelul-cheie desenat ca aceeasi
linie pe ambele panouri, cu acelasi numar de ambele parti. Interdictia
"eticheta unui panou nu poate numi pretul celuilalt" capata o exceptie
explicita pentru nivelurile comune, cu assert propriu ca numarul apare
identic pe ambele panouri.

Pullback-ul si momentul intrarii sunt acum etichetate pe desen, nu doar
in text. Toate cifrele recalculate din serii.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ThN7ixZrowca8aTGrK1MUJ
This commit is contained in:
Claude Agent
2026-09-20 11:42:29 +00:00
parent e9ae7e4695
commit 7beb3d42fe
8 changed files with 1702 additions and 1316 deletions

View File

@@ -1,101 +1,149 @@
SPEC DIAGRAMĂ — buy_doji_perechi_tf
====================================
tip: PRET (trei rânduri, câte două grafice pe rând)
tip: PRET (trei rânduri, câte două grafice pe rând, legate prin lupă)
destinație: summaries/17_STRATEGII/01_buy_doji.md, Pasul 2 („Alegi perechea…")
cheie markdown: <!-- DIAGRAMA: perechi_tf -->
generator: gen/strategii/buy_doji_perechi_tf.py (de scris de agentul de diagrame)
titlu SVG: „Aceeași regulă pe trei perechi — exemplu construit (fără ticker)"
generator: gen/strategii/buy_doji_perechi_tf.py
titlu SVG: „Aceeași regulă pe trei perechi — graficul mic e lupa pe ultimele
candele mari"
stil: STYLE.md §„Cum trebuie să arate un grafic de preț": candele lipite
(gap 15-18, body_w 9-10), fără volum, open = close-ul precedentului.
(gap 15, body_w 9), fără volum, open = close-ul precedentului.
Un singur SVG, 3 rânduri stivuite vertical (lățime 720, mobil).
Pe fiecare rând: stânga = TF mare (11 candele), dreapta = TF mic
(15 candele). Scară proprie pe fiecare grafic, dar UNA singură pe
tot graficul (px/unitate constant în interiorul lui).
Scară proprie pe fiecare panou, dar UNA singură în interiorul lui.
CE S-A SCHIMBAT (20.09.2026) ȘI DE CE
-------------------------------------
Userul: „ar trebui să aibă corespondență la prețuri, ca să îmi dau seama care
bucată din graficul weekly este reprezentată de graficul daily — adică care
candelă weekly e reprezentată de candelele din graficul daily, cu aceleași
linii de preț."
Versiunea veche punea în dreapta o serie care VENEA DUPĂ graficul mare (o
săgeată „apoi cobori pe graficul mic"). Nu se vedea nicio corespondență.
Acum graficul mic e **descompunerea reală** a ultimelor candele mari:
caseta de lupă + două ghidaje + nivelul comun cu același număr pe ambele
panouri.
CE TREBUIE SĂ DEMONSTREZE
-------------------------
1. Regula e identică pe toate trei perechile: TF mare dă buy doji confirmat
(direcția: long permis), TF mic face pullback de 8 candele până la high-ul
dojiului mare, face un doji acolo, confirmă, intri.
2. Ce se schimbă când cobori: stopul pe TF mic e de 4-5 ori mai mic decât
stopul pe TF mare pentru același setup; „8 candele" înseamnă alt timp.
3. Săgeată/paranteză „zoom" de la ultima candelă a graficului mare spre
graficul mic: graficul mic începe după confirmarea de pe TF mare.
1. Regula e identică pe toate trei perechile: pe TF-ul mare, buy doji +
confirmare dau direcția (long permis); în interiorul ultimelor candele
mari, pe TF-ul mic, se vede pullback-ul de 8 candele până la high-ul
dojiului mare, doji-ul acolo, confirmarea = intrarea, stopul, ținta 1:1.
2. **Agregarea, vizibilă și adevărată**: fiecare candelă mare din casetă se
sparge în k candele mici. Graficul mic nu e „altă serie", e aceeași serie
privită mai de aproape.
3. Ce se schimbă când cobori: stopul pe TF mic e de ~4 ori mai mic decât cel
măsurat pe TF mare pentru același setup → de ~4 ori mai multe acțiuni la
același risc.
SERIA — rândul A (weekly → daily), f = 1.0
------------------------------------------
TF mare (weekly), (open, high, low, close), index 0-10:
0 (122.0,122.6,119.4,120.0) 1 (120.0,120.5,117.0,117.5) 2 (117.5,119.0,117.1,118.4)
3 (118.4,118.8,114.3,114.8) 4 (114.8,115.3,111.5,112.0) 5 (112.0,113.4,111.6,112.9)
6 (112.9,113.2,109.1,109.6) 7 (109.6,110.0,106.3,106.8) 8 (106.8,107.2,103.6,104.0)
9 (104.0,105.2,101.9,103.8) <- doji weekly
10 (103.8,107.4,103.5,107.0) <- confirmare (close 107.0 > high doji 105.2)
TF mic (daily), index 0-14 (open[0] = 107.0 = close-ul barei mari 10):
0 (107.0,107.2,106.4,106.6) 1 (106.6,106.8,106.0,106.1) 2 (106.1,106.6,105.95,106.4)
3 (106.4,106.5,105.8,105.9) 4 (105.9,106.0,105.5,105.6) 5 (105.6,105.95,105.5,105.8)
SERIILE — cum se construiesc
----------------------------
Sursa de adevăr e seria FINĂ (TF mic), 15 bare, rândul A, f = 1.0:
0 (107.0,107.2,106.4,106.6) 1 (106.6,106.8,106.0,106.1)
2 (106.1,106.6,105.95,106.4) 3 (106.4,106.5,105.8,105.9)
4 (105.9,106.0,105.5,105.6) 5 (105.6,105.95,105.5,105.8)
6 (105.8,105.9,105.4,105.5) 7 (105.5,105.6,105.25,105.35)
8 (105.35,105.75,105.10,105.40) <- doji daily, low-ul atinge nivelul 105.20
8 (105.35,105.75,105.10,105.40) <- doji mic, low 105.10 la nivelul 105.20
9 (105.40,106.40,105.30,106.30) <- confirmare => intrare 106.30
10 (106.3,107.0,106.2,106.9) 11 (106.9,107.5,106.7,107.4) 12 (107.4,107.55,107.0,107.2)
13 (107.2,108.0,107.1,107.9) 14 (107.9,108.6,107.8,108.5)
10 (106.3,107.0,106.2,106.9) 11 (106.9,107.5,106.7,107.4)
12 (107.4,107.55,107.0,107.2) 13 (107.2,108.0,107.1,107.9)
14 (107.9,108.6,107.8,108.5)
barele 0-7 = pullback-ul de 8 candele; 10.. = drumul spre țintă.
SERIA — rândul B (monthly → weekly) și rândul C (daily → 60 min)
----------------------------------------------------------------
Aceeași formă, scalată: p' = round(100 + f*(p - 100), 2), cu f = 2.5 (B) și
f = 0.4 (C), aplicat pe fiecare o/h/l/c din rândul A. Generatorul calculează
seriile, NU le copiază de mână. Valorile care rezultă (de verificat cu assert):
Barele TF-ului mare DINAINTEA lupei (BASE), 8 bare, rândul A:
0 (118.4,118.8,114.3,114.8) 1 (114.8,115.3,111.5,112.0)
2 (112.0,113.4,111.6,112.9) 3 (112.9,113.2,109.1,109.6)
4 (109.6,110.0,106.3,106.8) 5 (106.8,107.2,103.6,104.0)
6 (104.0,105.2,101.9,103.8) <- doji mare (high 105.20 = nivelul comun)
7 (103.8,107.4,103.5,107.0) <- confirmare mare (close 107.00 = open fine[0])
Candelele mari din casetă NU se scriu de mână: se CALCULEAZĂ prin agregare
pe k bare fine. Per rând:
rând TF mare → TF mic k candele mari mărite bare fine folosite
A weekly → daily 5 3 15 (0..14)
B monthly → weekly 4 3 12 (0..11)
C daily → 60 min 7 2 14 (0..13)
Rândurile B și C se obțin din A prin p' = round(100 + f*(p - 100), 2), cu
f = 2.5 (B) și f = 0.4 (C). Transformarea e afină, deci agregarea se
păstrează; gruparea (k) diferă însă per rând, deci barele mari se recalculează.
VALORI CARE REZULTĂ (verificate cu assert)
------------------------------------------
A: doji mare h 105.20 / l 101.90; confirmare mare close 107.00;
lupă 105.10-108.60; intrare 106.30; SL 105.10; risc 1.20 (1.13 %); TP1 107.50
doar pe TF mare: intrare 107.00, SL 101.90, risc 5.10 (4.77 %) → x4.22
B: doji mare h 113.00 / l 104.75; confirmare mare close 117.50;
doji mic l 112.75; intrare 115.75; SL 112.75; risc 3.00 (2.59 %); TP1 118.75
doar pe TF mare: intrare 117.50, SL 104.75, risc 12.75 (10.85 %)
lupă 112.75-118.75; intrare 115.75; SL 112.75; risc 3.00 (2.59 %); TP1 118.75
doar pe TF mare: intrare 117.50, SL 104.75, risc 12.75 (10.85 %) → x4.19
C: doji mare h 102.08 / l 100.76; confirmare mare close 102.80;
doji mic l 102.04; intrare 102.52; SL 102.04; risc 0.48 (0.47 %); TP1 103.00
doar pe TF mare: intrare 102.80, SL 100.76, risc 2.04 (1.98 %)
A (pentru comparație): intrare 106.30; SL 105.10; risc 1.20 (1.13 %); TP1 107.50
doar pe TF mare: intrare 107.00, SL 101.90, risc 5.10 (4.77 %)
lupă 102.04-103.20; intrare 102.52; SL 102.04; risc 0.48 (0.47 %); TP1 103.00
doar pe TF mare: intrare 102.80, SL 100.76, risc 2.04 (1.98 %) → x4.24
NIVELURI (pe fiecare rând)
--------------------------
Pe graficul mare: linie punctată gri la high-ul dojiului mare („high doji
weekly 105.20" / „high doji monthly 113.00" / „high doji daily 102.08").
Pe graficul mic: aceeași linie, dar etichetată „nivel din <TF mare>", FĂRĂ
preț: un preț al TF-ului mare pe panoul TF-ului mic se citește ca trigger al
panoului mic. Prețurile de pe panoul mic sunt doar ale lui:
intrare verde; SL roșu; TP1 verde punctat.
LEGĂTURA DINTRE PANOURI (miezul diagramei)
-------------------------------------------
1. **Caseta de lupă** (albastru) pe graficul mare, peste EXACT candelele
mărite, întinsă pe intervalul de preț [low zonă, high zonă].
2. **Două ghidaje** punctate albastre de la colțurile din dreapta ale casetei
la colțurile din stânga ale cadrului graficului mic — convenția clasică de
zoom. Ghidajele sunt exacte: cadrul mic acoperă exact intervalul de preț al
casetei (assert: max/min din barele mici == max/min din candelele mari
mărite). Între ghidaje, textul „lupă: ultimele N candele <TF mare>".
3. **Nivelul comun**: high-ul dojiului mare, desenat ca aceeași linie punctată
gri pe AMBELE panouri, cu ACELAȘI număr de ambele părți — stânga
„high doji weekly 105.20", dreapta „nivel weekly 105.20". Scările rămân
proprii fiecărui panou; nivelul comun face legătura.
Extremele zonei mărite sunt repere comune implicite: le arată ghidajele.
(Nu le etichetăm cu cifre: coloana din dreapta s-ar aglomera.)
ETICHETE
--------
Titlu rând: A „weekly → daily" B „monthly → weekly" C „daily → 60 min"
Pe graficul mare: zonă peste doji + confirmare, etichetată dedesubt
„doji + confirmare: aici se decide direcția".
Pe graficul mic: zonă peste doji + confirmare, etichetată „doji la nivel:
aici intri"; Level „stop <preț>" (pe rândul A și „sub ultimele 4 candele"),
Level „ținta 1:1 <preț>", Level „intrare <preț>".
Săgeata-zoom dintre grafice: „apoi cobori pe graficul mic".
Subtitluri: stânga „<TF mare>: direcția";
dreapta „<TF mic>: descompunerea ultimelor N candele <TF mare>".
Pe graficul mare: zonă verde peste doji + confirmare, etichetată dedesubt
„doji + confirmare: aici se decide direcția"; nivelul comun la stânga.
Pe graficul mic: zonă verde peste doji-ul mic + confirmare, cu o linie de
legătură spre eticheta „doji la nivel, apoi confirmare: aici intri";
paranteză sub cadru peste primele 8 bare: „pullback: 8 candele în jos, fără
minim nou"; coloana din dreapta: „ținta 1:1 <preț>", „intrare <preț>",
„nivel <TF mare> <preț>", „stop <preț>" (pe rândul A și „sub ultimele 4 bare").
Doar pe rândul A: paranteză de stop pe TF-ul mare („stop 4,77 %") și pe cel
mic („stop 1,13 %"), cu o săgeată între ele: „același setup, stop de 4 ori
mai mic → de 4 ori mai multe acțiuni la același risc".
mic („stop 1,13 %"), cu o săgeată roșie între ele: „același setup, stop de
4,2 ori mai mic → de 4,2 ori mai multe acțiuni la același risc". Raportul
se calculează, nu se scrie.
Restul cifrelor (praguri, „8 candele" pe fiecare pereche, cât ții) stau în
tabelul din capitol, nu în SVG: diagrama nu repetă tabelul.
ASSERT-URI OBLIGATORII ÎN GENERATOR
-----------------------------------
Pe fiecare rând (A, B, C), pe seriile calculate:
1. Fiecare bară: h >= max(o,c) și l <= min(o,c); open[i] == close[i-1]
(pe fiecare grafic separat).
2. open-ul primei bare mici == close-ul barei mari 10.
3. Doji mare (9) și doji mic (8): abs(o-c) <= 0.10*(h-l).
4. close mare[10] > high mare[9]; close mic[9] > high mic[8].
5. SL == min(l for bare mici 6..9) == low mic[8] (extrema ultimelor 4).
6. risc == intrare - SL; TP1 == intrare + risc; primul i>9 cu high >= TP1 este 11.
7. Valorile din lista „valori care rezultă" de mai sus, egale la 2 zecimale,
inclusiv procentele din textul de sub rând.
8. abs(low mic[8] - high mare[9]) / high mare[9] <= 0.005 (doji mic la nivel,
sub pragul cel mai strict, 0,5 %).
9. Raportul pixeli SL-intrare / intrare-TP1 == 1 pe fiecare grafic mic.
10. Fiecare preț stă pe panoul lui: nicio etichetă din dreapta (x >= SL_X1-20)
nu conține dh/dl/conf/b_sl/b_entry, nicio etichetă din stânga nu conține
entry/sl/tp/sdl; și invers, dh apare pe panoul mare, iar entry/sl/tp pe
cel mic. Asta e assert-ul care prinde „high doji 105.20" pus pe daily.
1. Fiecare bară: h >= max(o,c) și l <= min(o,c); open[i] == close[i-1]
(pe fiecare grafic separat, inclusiv peste joncțiunea BASE→lupă).
2. AGREGAREA, per candelă mare mărită j: open == open-ul primei mici,
close == close-ul ultimei mici, high == max(high mici), low == min(low mici).
3. len(fine) == k * nz; open fine[0] == close-ul confirmării mari.
4. Doji mare (BASE 6) și doji mic (fine 8): abs(o-c) <= 0.10*(h-l).
5. Confirmări: close BASE[7] > high BASE[6]; close fine[9] > high fine[8].
6. SL == min(l for fine 6..9) == low fine[8] == minimul întregii zone mărite.
7. risc == intrare - SL; TP1 == intrare + risc; primul i>9 cu high >= TP1 e 11.
8. Pullback: fine[0].close > fine[7].close (coboară) ȘI min(low 0..7) >
low-ul dojiului mare (deci „fără minim nou").
9. Extremele zonei mărite == extremele candelelor mari mărite.
10. abs(low fine[8] - high doji mare) / high doji mare <= 0.005.
11. Raportul pixeli SL-intrare / intrare-TP1 == 1 pe fiecare grafic mic.
12. 4 <= stop% pe TF mare / stop% pe TF mic < 4.5.
13. Valorile din „VALORI CARE REZULTĂ", egale la 2 zecimale.
14. PANOURI. Nicio etichetă din dreapta (x >= FRAME_L-20) nu conține un preț
al TF-ului mare, nicio etichetă din stânga nu conține unul al TF-ului mic.
**Excepție explicită: NIVELURILE COMUNE** (setul COMUNE din generator,
acum {dh} = high-ul dojiului mare). Ele sunt scoase din ambele seturi de
interdicție ȘI au un assert propriu: numărul trebuie să apară pe AMBELE
panouri, formatat identic (2 zecimale). O scutire fără assert ar permite
ca nivelul să dispară de pe un panou sau să apară cu alt număr.
15. Fiecare text încape în viewBox și nicio pereche de texte nu se suprapune
(aceeași regulă ca audit_diagrams.py: |Δy| < 13 și suprapunere pe x).
SURSA
-----