"""Holt die echten IEX-Minutenkerzen eines Handelstags und legt sie als JSON ab. Nur lesend. Koordinator-Werkzeug, nicht Teil des Repos. Der einzige Netzzugriff ist der lesende Kerzenabruf bei Alpaca; ausgegeben werden Anzahl und Eckkurse, nie ein Schluessel. Die Datei ist die Eingabe fuer neustart_echtlauf.py. Entstanden in der Abschlusspruefung zu Paket F (2026-09-20). Aufruf (WSL, aus dem Projektordner): python hole_kerzen.py JJJJ-MM-TT """ import json import sys from datetime import datetime from pathlib import Path sys.path.insert(0, str(Path.cwd())) from trading.paper.config import lade_paper_config from trading.paper.kerzen import HANDELSZONE from trading.paper.kerzen import AlpacaKerzenquelle from trading.paper.kerzen import handelsende def main() -> int: datum, ziel = sys.argv[1], Path(sys.argv[2]) config = lade_paper_config("config/paper.toml") mitternacht = datetime.strptime(datum, "%Y-%m-%d").replace(tzinfo=HANDELSZONE) quelle = AlpacaKerzenquelle.from_secrets("config/secrets.toml", feed=config.feed, timeout=20.0) kerzen = quelle.kerzen_des_tages(config.instrument_id, handelsende(mitternacht)) ziel.write_text( json.dumps( [ {"zeit": k.zeit.isoformat(), "open": k.open, "high": k.high, "low": k.low, "close": k.close, "volume": k.volume} for k in kerzen ] ), encoding="utf-8", ) print(f"{datum}: {len(kerzen)} Kerzen in {config.instrument_id} nach {ziel}") if kerzen: kurse = [k.close for k in kerzen] print(f" erste {kerzen[0].zeit.isoformat()} Schluss {kurse[0]}, " f"letzte {kerzen[-1].zeit.isoformat()} Schluss {kurse[-1]}, " f"Tief {min(kurse)}, Hoch {max(kurse)}") return 0 if kerzen else 2 if __name__ == "__main__": sys.exit(main())