3.7 KiB
description, argument-hint
| description | argument-hint |
|---|---|
| Adaugă manual un rând în jurnal.csv (source=manual sau manual_calibration). Pentru calibrare P4 sau forward paper. | [--calibration] <screenshot_path> |
/m2d-log — manual M2D trade entry
Marius extrage manual TOATE câmpurile trade-ului. Folosit pentru calibration P4 (împreună cu /backtest --calibration pe același screenshot) sau ca log direct fără vision.
Workflow
-
Parse
$ARGUMENTS— detectează flag--calibrationși<screenshot_path>. Dacă<screenshot_path>lipsește, întreabă user-ul. Calculeazăbasename = basename(<screenshot_path>)șibasename_no_ext = basenameminus ultima extensie. -
Promptează user-ul în română, pe rând, pentru fiecare câmp din schema
M2DExtraction(veziscripts/vision_schema.py). Ordinea + opțiuni valide:data—YYYY-MM-DDora_utc—HH:MM(conversie din RO local: EEST=UTC+3 vară, EET=UTC+2 iarnă; întreabă user-ul direct dacă nu e clar)instrument—DIA/US30/otherdirectie—Buy/Selltf_mare—5min/15mintf_mic—1min/3mincalitate—Clară/Mai mare ca impuls/Slabă/n/aentry,sl,tp0,tp1,tp2— float-uririsc_pct— float (ex:0.12pentru 0.12%)outcome_path—SL/TP0→SL/TP0→TP1/TP0→TP2/TP0→pending/pending(UNICODE→)max_reached—SL_first/TP0/TP1/TP2be_moved—true/falseconfidence— defaulthigh(manual e by definition high)note— string opțional, default""
screenshot_filese setează automat labasename;ambiguitiesse setează automat la[]. Dacă user-ul dă valoare invalidă, repetă întrebarea. -
Construiește JSON-ul complet, valid contra
M2DExtraction. -
Scrie JSON-ul la
data/extractions/<basename_no_ext>.manual.json— pretty-print indent 2, UTF-8, newline final. Sufixul.manualprevine coliziunea cu output-ul vision (<basename_no_ext>.json). -
Determină source:
manual_calibrationdacă--calibratione prezent, altfelmanual. -
Append la CSV:
python -c "from pathlib import Path; from scripts.append_row import append_extraction; import json; r = append_extraction(Path('data/extractions/<basename_no_ext>.manual.json'), source='<source>'); print(json.dumps(r, default=str))"Parsezi răspunsul JSON.
-
Dacă
status == "ok":python -m scripts.regenerate_mdApoi afișezi:
✅ Trade adăugat la jurnal. ID: <id>. Set: <set>. P/L Marius: <pl_marius>. outcome_path: <outcome_path>. -
Dacă
status == "rejected":❌ Trade respins: <reason>NU regenera MD. Dacă
reasonconține "duplicate":- pentru
--calibration: spui user-ului că există deja rândmanual_calibrationpentru acest screenshot; nu poți avea două leg-uri manual de calibrare pe același screenshot. - pentru
source=manualsimplu: user-ul decide dacă suprascrie (atunci șterge manual rândul dindata/jurnal.csvși re-rulează).
- pentru
Reguli
- NU edita CSV direct — folosește
append_extraction. - NU regenera MD dacă append-ul a fost respins.
Output skeleton JSON
{
"screenshot_file": "2026-05-13-dia-1645.png",
"data": "2026-05-13",
"ora_utc": "14:45",
"instrument": "DIA",
"directie": "Buy",
"tf_mare": "5min",
"tf_mic": "1min",
"calitate": "Clară",
"entry": 497.42,
"sl": 496.80,
"tp0": 497.67,
"tp1": 497.79,
"tp2": 498.04,
"risc_pct": 0.12,
"outcome_path": "TP0→TP1",
"max_reached": "TP1",
"be_moved": true,
"confidence": "high",
"ambiguities": [],
"note": ""
}