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]>
This commit is contained in:
1 parent
d7ffc9a5b5
commit
67d674cd0b
32 files changed
+1618
-88
No files matched your search
@@ -0,0 +1,57 @@
|
||||
"""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())
|
||||
Reference in new issue
Block a user