Automatischer Push: 8 Datei(en) geändert

- .vault-tools/trading-plattform-pruefung/LIESMICH.md
- .vault-tools/trading-plattform-pruefung/angriffe.py
- .vault-tools/trading-plattform-pruefung/browserlauf_zugang.py
- .vault-tools/trading-plattform-pruefung/handabruf_kerzen.py
- .vault-tools/trading-plattform-pruefung/lies_paper_protokoll.py
- .vault-tools/trading-plattform-pruefung/pruef_beobachtung_echt.py
- .vault-tools/trading-plattform-pruefung/start_probe_backend.py
- .vault-tools/trading-plattform-pruefung/start_probe_zugang.py

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

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
Pascal MichelandClaude Opus 5 committed 2026-09-18 04:00:01 +02:00
1 parent 3bb28e4b3c
commit 371a1f5d2a
8 files changed
+890 -3

No files matched your search

@@ -0,0 +1,74 @@
"""Handabruf: Wie alt ist die juengste Minutenkerze, die Alpaca per REST fuer AAPL liefert?
Koordinator-Werkzeug zu Teil 10, nicht fuers Repo. Beantwortet vor dem ersten Paper-Lauf die
ungemessene Frage, ob der IEX-Feed eine gerade abgeschlossene Minute innerhalb von Sekunden
liefert (der Runner wartet `kerze_verzoegerung_s` und versucht es `kerze_versuche` mal) oder
ob die Kerzen verzoegert kommen. Sinnvoll, solange gehandelt wird -- Vorboerse ab 10:00 Uhr
Berliner Zeit (04:00 ET), regulaer ab 15:30 Uhr. Nachts zeigt es nur die letzte Kerze des
Vortags; dann belegt es nur, dass Schluessel und Abruf funktionieren.
Liest config/secrets.toml aus dem Projektordner, gibt die Schluessel nie aus.
Aufruf aus dem Projektordner (WSL, Venv):
~/venvs/trading/bin/python /mnt/d/Claude/.vault-tools/trading-plattform-pruefung/handabruf_kerzen.py [feed]
feed: iex (Standard) oder sip.
"""
import sys
import tomllib
from datetime import UTC, datetime, timedelta
from pathlib import Path
import requests
DATEN_URL = "https://data.alpaca.markets"
FRISCH_S = 120 # eine abgeschlossene Minute plus die Wartezeit des Runners
def main() -> int:
feed = sys.argv[1] if len(sys.argv) > 1 else "iex"
secrets = Path("config/secrets.toml")
if not secrets.exists():
print(f"VORAUSSETZUNG FEHLT: {secrets} (aus dem Projektordner starten)")
return 3
werte = tomllib.loads(secrets.read_text(encoding="utf-8"))["alpaca"]
kopf = {"APCA-API-KEY-ID": werte["key_id"], "APCA-API-SECRET-KEY": werte["secret_key"]}
jetzt = datetime.now(UTC).replace(microsecond=0)
parameter = {
"symbols": "AAPL",
"timeframe": "1Min",
"start": (jetzt - timedelta(hours=36)).strftime("%Y-%m-%dT%H:%M:%SZ"),
"end": jetzt.strftime("%Y-%m-%dT%H:%M:%SZ"),
"feed": feed,
"adjustment": "raw",
"limit": 10_000,
"sort": "desc",
}
gesendet = datetime.now(UTC)
antwort = requests.get(f"{DATEN_URL}/v2/stocks/bars", headers=kopf, params=parameter, timeout=30)
dauer_s = (datetime.now(UTC) - gesendet).total_seconds()
print(f"Feed {feed}, Anfrage bis {jetzt.isoformat()} (jetzt), Antwort {antwort.status_code} in {dauer_s:.2f} s")
if antwort.status_code >= 400:
print("Antworttext:", antwort.text[:300])
return 2
kerzen = (antwort.json().get("bars") or {}).get("AAPL") or []
if not kerzen:
print("keine Kerze in den letzten 36 Stunden -- das ist bei einem laufenden Handelstag ein Befund")
return 2
juengste = kerzen[0]
zeit = datetime.fromisoformat(juengste["t"].replace("Z", "+00:00"))
alter_s = (jetzt - zeit).total_seconds()
berlin = zeit.astimezone().strftime("%H:%M:%S %Z")
print(f"{len(kerzen)} Kerzen; juengste Kerze beginnt {zeit.isoformat()} ({berlin}), "
f"Alter {alter_s:.0f} s, Schluss {juengste['c']}, Volumen {juengste['v']}")
if alter_s <= FRISCH_S:
print(f"FRISCH: innerhalb von {FRISCH_S} s -- der Runner bekommt seine Kerze rechtzeitig")
else:
print(f"ALT: {alter_s / 60:.1f} min -- entweder wird gerade nicht gehandelt, oder der Feed kommt verzoegert; "
"waehrend der Handelszeit ist das ein Befund")
return 0
if __name__ == "__main__":
sys.exit(main())