- .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]>
88 lines
3.6 KiB
Python
88 lines
3.6 KiB
Python
"""Liest die Antwortformen dreier Alpaca-Endpunkte fuer Paket M (zehn Aktien). Nur lesend, keine Order.
|
|
|
|
Koordinator-Werkzeug, nicht Teil des Repos (entstanden 2026-09-24 nachts). Ausgegeben werden Schluessel,
|
|
Typen, Seitenmarken und die Handelsfelder der Anlagen (tradable, shortable, easy_to_borrow, fractionable,
|
|
marginable) -- keine Kontodaten, kein Schluessel. Endpunkte:
|
|
GET /v2/assets/{symbol} (Handels-API, paper-api)
|
|
GET /v2/stocks/trades/latest?symbols=... (Daten-API, feed=iex)
|
|
GET /v2/stocks/bars?symbols=...&timeframe=1Min (Daten-API, feed=iex, Seitenverhalten ueber Symbole)
|
|
Aufruf (WSL, TRADING_GEHEIMNISSE gesetzt): python alpaca_formen_lesen.py JJJJ-MM-TT SYMBOL [SYMBOL ...]
|
|
"""
|
|
|
|
import sys
|
|
import tomllib
|
|
from pathlib import Path
|
|
|
|
import requests
|
|
|
|
sys.path.insert(0, str(Path.cwd()))
|
|
|
|
from trading import geheimnisse # noqa: E402
|
|
|
|
HANDEL = "https://paper-api.alpaca.markets"
|
|
DATEN = "https://data.alpaca.markets"
|
|
|
|
|
|
def form(wert, tiefe=0):
|
|
if isinstance(wert, dict):
|
|
if tiefe > 1:
|
|
return "{...}"
|
|
return "{" + ", ".join(f"{k}: {form(v, tiefe + 1)}" for k, v in list(wert.items())[:14]) + "}"
|
|
if isinstance(wert, list):
|
|
return f"[{len(wert)} x {form(wert[0], tiefe + 1) if wert else '-'}]"
|
|
return type(wert).__name__
|
|
|
|
|
|
def main() -> int:
|
|
tag, symbole = sys.argv[1], sys.argv[2:]
|
|
werte = tomllib.loads(geheimnisse.pfad().read_text(encoding="utf-8"))["alpaca"]
|
|
s = requests.Session()
|
|
s.trust_env = False
|
|
s.headers.update({"APCA-API-KEY-ID": werte["key_id"], "APCA-API-SECRET-KEY": werte["secret_key"]})
|
|
|
|
print("== /v2/assets/{symbol}")
|
|
for sym in symbole:
|
|
a = s.get(f"{HANDEL}/v2/assets/{sym}", timeout=20)
|
|
if a.status_code != 200:
|
|
print(sym, "HTTP", a.status_code)
|
|
continue
|
|
j = a.json()
|
|
felder = {k: j.get(k) for k in ("symbol", "exchange", "status", "tradable", "shortable", "easy_to_borrow", "fractionable", "marginable")}
|
|
print(felder)
|
|
print("Schluessel einer Anlage:", sorted(j.keys()) if symbole else "-")
|
|
|
|
print("== /v2/stocks/trades/latest (gebuendelt)")
|
|
t = s.get(f"{DATEN}/v2/stocks/trades/latest", params={"symbols": ",".join(symbole), "feed": "iex"}, timeout=20)
|
|
print("HTTP", t.status_code, "Form:", form(t.json()))
|
|
trades = t.json().get("trades", {})
|
|
print("Symbole mit Trade:", len(trades), "von", len(symbole), "; Felder eines Trades:", sorted(next(iter(trades.values())).keys()) if trades else "-")
|
|
|
|
print("== /v2/stocks/bars (gebuendelt, Seiten)")
|
|
start, ende = f"{tag}T13:30:00Z", f"{tag}T20:00:00Z"
|
|
seiten, gesamt, je_symbol, token = 0, 0, {}, None
|
|
while True:
|
|
p = {"symbols": ",".join(symbole), "timeframe": "1Min", "start": start, "end": ende, "feed": "iex", "limit": 10000, "adjustment": "raw"}
|
|
if token:
|
|
p["page_token"] = token
|
|
b = s.get(f"{DATEN}/v2/stocks/bars", params=p, timeout=30)
|
|
if b.status_code != 200:
|
|
print("HTTP", b.status_code, b.text[:200])
|
|
return 1
|
|
j = b.json()
|
|
seiten += 1
|
|
if seiten == 1:
|
|
print("Form erste Seite:", form(j))
|
|
for sym, liste in (j.get("bars") or {}).items():
|
|
je_symbol[sym] = je_symbol.get(sym, 0) + len(liste)
|
|
gesamt += len(liste)
|
|
token = j.get("next_page_token")
|
|
if not token or seiten > 20:
|
|
break
|
|
print("Seiten:", seiten, "Balken gesamt:", gesamt)
|
|
print("Balken je Symbol:", dict(sorted(je_symbol.items())))
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|