Files
claude-regelwerk/.vault-tools/trading-plattform-pruefung/kurs_unter_grenze.py
T
Pascal MichelandClaude Opus 5 67d674cd0b Automatischer Push: 32 Datei(en) geändert
- .claude/agents/executer.md
- .claude/agents/planer.md
- .claude/agents/pruefer.md
- .claude/agents/recherche.md
- .claude/skills/plan-executer-pruefung/SKILL.md
- .claude/workflows/executer-welle.js
- .claude/workflows/plankritik.js
- .claude/workflows/pruefung.js
- .claude/workflows/welle-mit-pruefung.js
- .gitignore
- .vault-tools/regelwerk-check/ENTWURF.md
- .vault-tools/regelwerk-check/regelwerk_check.py
- … und 20 weitere

Erzeugt vom PostToolUse-Hook .vault-tools/auto-push/auto_push.py.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-24 04:00:02 +02:00

58 lines
2.0 KiB
Python

"""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())