6.8 KiB
Plan: ATM — Automated Trading Monitor (M2D, Faza 1)
Context
User tranzacționează manual strategia M2D pe DIA (TradeStation) cu execuție pe TradeLocker US30 CFD (cont prop firm). Aceeași strategie merge și pe GLD → XAUUSD. 4 ore/seară trebuie să urmărească 2 ecrane. Obiectiv Faza 1: bot detectează automat trigger-ul și trimite notificare Telegram/Discord cu screenshot + nivele SL/TP1/TP2, user execută manual în TradeLocker. Faza 2 (auto-execution) deferată până prop firm TOS verificat + Faza 1 dovedită.
Design doc complet salvat la ~/.gstack/projects/romfast-workspace/claude-master-design-20260415-atm-trading.md (include strategia M2D cu toate detaliile).
Approach: B — Structured Python service + dry-run + audit log
Rulează pe aceeași mașină Windows cu TradeStation. ROI color sampling pe strip-ul M2D MAPS, state machine pentru secvența 3-dot, notifier abstraction (Discord/Telegram), calibration Tkinter, dry-run pe screenshot-uri salvate.
Files to Create
/workspace/atm/pyproject.toml— packaging, deps:mss,opencv-python,numpy,requests,pygetwindow,tomli/workspace/atm/config.toml— populat de calibration tool (ROI coords, culori referință + toleranțe, y-axis scale)/workspace/atm/src/atm/detector.py— screenshot loop + color classification + state machine 3-dot/workspace/atm/src/atm/levels.py— extragere SL/TP1/TP2 din liniile orizontale (pixel y → preț)/workspace/atm/src/atm/notifier/__init__.py— interfaceNotifier.send(signal, screenshot, levels)/workspace/atm/src/atm/notifier/discord.py— webhook POST/workspace/atm/src/atm/notifier/telegram.py— bot API/workspace/atm/src/atm/audit.py— JSONL logger, fiecare ciclu/workspace/atm/src/atm/calibrate.py— Tkinter UI: click pe dot → capture RGB + tolerance; click pe colț ROI → salvează; click pe 2 puncte pe axa Y cu prețurile → calibrare scale/workspace/atm/src/atm/dryrun.py— replay detector pe folder de screenshot-uri/workspace/atm/src/atm/main.py— orchestration, CLI (atm run,atm calibrate,atm dryrun <dir>)/workspace/atm/samples/— director screenshot-uri pentru dry-run corpus/workspace/atm/logs/— director JSONL audit/workspace/atm/README.md— setup + calibration workflow
Build Order
pyproject.toml+ scaffold package —pip install -e .,atm --helpfuncționează.- Script standalone de capture samples (înainte de orice logică) — rulezi în timpul următoarelor sesiuni trading, dump screenshot la 5s interval în
samples/. Ai corpus pentru dry-run. calibrate.py— fără config calibrat, nimic nu merge. Tkinter cu: pas 1 (select TradeStation window by title), pas 2 (click pe colțuri ROI M2D MAPS), pas 3 (click pe fiecare culoare: turquoise, verde închis, verde deschis, galben, roșu închis, roșu deschis + gri neutru; capturează RGB + rază de toleranță implicită 20), pas 4 (2 click-uri pe axa Y + valori preț introduse → scale factor pixel→preț). Salveazăconfig.toml.detector.py— loop 1s: locate window, screenshot ROI, sample rightmost 5 dots pe pozițiile calibrate, clasifică fiecare la cea mai apropiată culoare (Euclidean in RGB cu toleranță). Rolling window ultimele 10 clasificări + timestamp. State machine: ultimele 3 non-gri consecutive = secvență BUY sau SELL? Fire o dată pe trigger (dedup set cu TTL 10min).levels.py— după trigger, scan chart region pentru liniile orizontale roșii (SL) și verzi (TP1/TP2). Extrage y-pixel al fiecărei linii, convertește la preț folosind scale-ul calibrat.notifier/discord.py— POST multipart cu screenshot adnotat + mesaj formatat:🟢 BUY DIA→US30 | SL: 484.35 | TP1: 485.20 | TP2: 485.90 | 22:47:03.dryrun.py— itereazăsamples/, rulează detector, printează ce AR fi trimis. Validare logică detecție înainte de live.audit.py— wrap detector loop, scrie JSONL:{ts, window_found, roi_ok, dots:[...], classification:[...], trigger:null|"BUY"|"SELL", notified:true|false, reason}.main.py— CLI unificat.atm calibrate,atm dryrun ./samples,atm run(loop live cu audit).- Windows Task Scheduler — 2 task-uri: start 16:30 (stop 18:30), start 21:00 (stop 23:00).
atm run --duration 2h. notifier/telegram.py— opțional după ce Discord e stabil.
Existing Utilities to Reuse
N/A — greenfield project. No internal utilities to reuse.
Verification
End-to-end, în ordinea din build:
- Calibration workflow:
atm calibrate→ urmezi pașii → rezultăconfig.tomlcomplet. Verifică manual că RGB-urile sunt plauzibile pentru culorile descrise. - Dry-run corpus: ai ≥20 screenshot-uri din sesiuni reale în
samples/. Ruleziatm dryrun ./samples→ output per screenshot: clasificare + decizie trigger. Manual verifici că cazurile unde ai văzut tu semnal reali → trigger; cazurile neutre → no-trigger. False-positives = 0 țintă, false-negatives ≤ 5%. - Live test notification-only (2 sesiuni):
atm runîn fereastra trading. Verifici:- Notificările Discord apar în 3s de când vezi trigger-ul pe chart.
- Screenshot atașat e clar, lizibil.
- SL/TP1/TP2 extrase sunt la ≤$0.05 de nivelele reale pe chart.
- Audit log (
logs/YYYY-MM-DD.jsonl) conține fiecare ciclu; poți reproduce un missed signal.
- Sanity alerts: mută/redimensionează fereastra TradeStation → bot detectează "window lost" în 60s → notificare. Restabilește fereastra → bot reia.
- Scheduler validation: Windows Task Scheduler pornește
atm runla 16:30, se oprește curat la 18:30, audit log salvează fără corupere.
Risk Register
- Prop firm TOS (Faza 2 blocker, NU Faza 1): înainte de orice extensie spre auto-execution în TradeLocker, citești TOS-ul prop-ului, cauți "EA / automation / bot / copy trading / external signals". Dacă e interzis, Faza 2 e moartă și rămâi permanent pe Faza 1.
- Indicator layout change: dacă TradeStation update schimbă render-ul M2D MAPS → re-calibration. Audit log va arăta degradare graduală a confidence-ului → alert activ via "bot lost sight".
- Price divergence DIA↔US30: trigger-ul se dă pe DIA; poate fi o secundă unde US30 deja a mișcat diferit. Risc acceptabil (judgment user), dar monitorizat în Faza 2 prin slippage analysis.
- Screenshot pe ecran sharing / AnyDesk / RDP: dacă cineva se conectează remote la Windows-ul tău în timpul trading, screenshot-urile pot cuprinde overlay-uri nepotrivite. Mic, dar notabil.
Out of Scope (Faza 1)
- Orice click automat în TradeLocker
- Multi-symbol concurrent monitoring (single chart la un moment dat)
- Backtesting pe date istorice (strategia e deja validată manual)
- UI / dashboard web — totul rulează headless cu notificări externe