"""Prüft für eine Liste von Symbolen den letzten Tagesschluss gegen eine Kursgrenze. Nur lesend. Koordinator-Werkzeug, nicht Teil des Repos. Anlass: Paket M (zehn Aktien, 2026-09-25) — eine Order darf höchstens max_notional_je_order (10.000 USD) haben, ein Bein ist basis_menge (10) Stück, also muss jeder Kurs unter 1.000 USD liegen. Einziger Netzzugriff: ein lesender Abruf der Tageskerzen bei Alpaca (IEX). Ausgegeben werden Symbol, Datum der Kerze, Schlusskurs (öffentlicher Börsenkurs, kein Depotwert) und ob er unter der Grenze liegt; nie ein Schlüssel. Aufruf (WSL, aus dem Projektordner, TRADING_GEHEIMNISSE gesetzt): python kurs_unter_grenze.py 1000 AAPL MSFT NVDA ... """ import sys import tomllib from pathlib import Path import requests sys.path.insert(0, str(Path.cwd())) from trading import geheimnisse # noqa: E402 DATEN_URL = "https://data.alpaca.markets" def main() -> int: grenze = float(sys.argv[1]) symbole = sys.argv[2:] werte = tomllib.loads(geheimnisse.pfad().read_text(encoding="utf-8"))["alpaca"] sitzung = requests.Session() sitzung.trust_env = False antwort = sitzung.get( f"{DATEN_URL}/v2/stocks/bars/latest", params={"symbols": ",".join(symbole), "feed": "iex"}, headers={"APCA-API-KEY-ID": werte["key_id"], "APCA-API-SECRET-KEY": werte["secret_key"]}, timeout=20, ) print("HTTP", antwort.status_code) if antwort.status_code != 200: print(antwort.text[:300]) return 1 bars = antwort.json().get("bars", {}) fehler = 0 for symbol in symbole: bar = bars.get(symbol) if not bar: print(f"{symbol:6} keine Kerze") fehler += 1 continue schluss = float(bar["c"]) ok = schluss < grenze fehler += 0 if ok else 1 print(f"{symbol:6} {bar['t'][:16]} {schluss:9.2f} {'unter' if ok else 'UEBER'} {grenze:.0f}") return 0 if fehler == 0 else 2 if __name__ == "__main__": raise SystemExit(main())