← Alle Insights

Alpaca-API für Trading: REST, Streaming und Praxis.

Alpaca ist das, was IBKR nicht sein wollte: eine reine API-Broker-Plattform, die mit REST und Websocket in der Sprache moderner Entwickler spricht. Für US-Equities und Krypto ist es heute eine der elegantesten Optionen. Für alles andere bleibt es eine Einbahnstraße.

Architektur: REST plus Streaming.

Alpaca trennt sauber zwischen drei Endpoint-Klassen: Trading-API (Orders, Positionen, Account-Status), Market-Data-API (historische Bars, aktuelle Quotes) und Streaming (Live-Quotes, Live-Trades, Order-Updates per Websocket). Jeder Endpoint hat eigene Basis-URLs für Paper und Live — ein simpler Switch über Umgebungsvariablen reicht.

Das wirklich Gute: ein API-Key öffnet alle drei Klassen, kein zusätzliches Setup, keine Gateway-App, keine Client-IDs. Sie können in fünf Minuten vom Account-Signup zum ersten erfolgreichen Paper-Trade kommen — bei IBKR sind das Tage.

Erster Order-Roundtrip.

Mit dem offiziellen Python-SDK (alpaca-py) sieht der minimale Workflow so aus:

from alpaca.trading.client import TradingClient
from alpaca.trading.requests import MarketOrderRequest, LimitOrderRequest
from alpaca.trading.enums import OrderSide, TimeInForce

API_KEY = "PK..."
SECRET = "..."
client = TradingClient(API_KEY, SECRET, paper=True)

# Konto-Status
acct = client.get_account()
print(f"Cash: {acct.cash}  Equity: {acct.equity}")

# Marktorder: 5 Aktien AAPL
req = MarketOrderRequest(
    symbol="AAPL",
    qty=5,
    side=OrderSide.BUY,
    time_in_force=TimeInForce.DAY,
)
order = client.submit_order(req)
print(f"Order-ID: {order.id}  Status: {order.status}")

# Limit-Order mit GTC
limit_req = LimitOrderRequest(
    symbol="MSFT",
    qty=10,
    side=OrderSide.BUY,
    time_in_force=TimeInForce.GTC,
    limit_price=350.00,
)
limit = client.submit_order(limit_req)

Das ist es. Kein Eventloop, kein Wartetimer, kein Reconnect-Loop. Für Strategien, die im Minuten- oder Stunden-Rhythmus traden, reicht REST in 95 % der Fälle.

Streaming und Order-Updates.

Wer schnelle Reaktionen braucht (Tick- oder Sekunden-Logik), kommt um Websockets nicht herum. Alpaca bietet zwei Streams: einen für Marktdaten und einen für Account-Events. Beide laufen parallel.

from alpaca.data.live import StockDataStream
from alpaca.trading.stream import TradingStream
import asyncio

API_KEY = "PK..."
SECRET = "..."

async def on_quote(quote):
    print(f"{quote.symbol}: bid={quote.bid_price} ask={quote.ask_price}")

async def on_order_update(data):
    print(f"Event: {data.event} order={data.order.id} status={data.order.status}")

market_stream = StockDataStream(API_KEY, SECRET)
market_stream.subscribe_quotes(on_quote, "AAPL", "MSFT", "TSLA")

trade_stream = TradingStream(API_KEY, SECRET, paper=True)
trade_stream.subscribe_trade_updates(on_order_update)

async def main():
    await asyncio.gather(
        market_stream._run_forever(),
        trade_stream._run_forever(),
    )

asyncio.run(main())

Wichtig: die Marktdaten-Streams unterscheiden zwischen IEX-Feed (gratis) und SIP- Feed (kostenpflichtig, alle US-Exchanges konsolidiert). Wer ernsthaft tradet, braucht SIP — der IEX-Anteil am Gesamtvolumen liegt unter 3 %, das verzerrt jede Liquiditätsschätzung.

Was Alpaca gut macht.

Wo Alpaca an Grenzen stößt.

Ehrliche Bestandsaufnahme — Alpaca ist nicht für jeden:

Rate-Limits richtig handhaben.

Alpaca limitiert auf 200 Requests pro Minute pro API-Key (höher mit Pro-Plan). In der Praxis ein nicht-triviales Limit: ein Multi-Asset-Loop, der pro Symbol einzeln Quotes abfragt, ist nach 30 Symbolen am Limit. Drei Empfehlungen:

  1. Batch-Endpoints nutzen: get_stock_latest_quote(["AAPL","MSFT","TSLA"]) statt drei einzelner Calls.
  2. Streaming für Live-Daten, REST nur für historische Pulls und Order-Submission.
  3. Lokale Caches mit kurzer TTL — wenn dieselbe Information mehrfach pro Minute gebraucht wird, einmal holen und cachen.

Produktiv-Setup.

Mein bevorzugter Stack für Alpaca-basiertes Trading:

  1. asyncio-Service mit drei Tasks: Market-Data-Stream, Trading-Event-Stream, Order-Engine. Kommunikation über asyncio.Queue.
  2. Postgres als State-Store für Orders, Fills und Positionen. Nicht auf den Broker-State allein verlassen — Websocket-Drops sind selten, aber möglich.
  3. Periodic-Reconciliation: alle 5 Minuten Positionen via REST abgleichen, Divergenzen loggen und alerten.
  4. Kill-Switch: ein einzelner Endpoint, der alle offenen Orders cancelt und Positionen schließt — getriggert durch eine Sentinel-Datei oder ein Slack-Command.
  5. Telemetrie: jede Order vor und nach Submit loggen, Latenz tracken, P&L pro Symbol stündlich snapshotten.

Wann Alpaca die richtige Wahl ist.

Alpaca ist optimal, wenn Ihre Strategie US-Equities oder Crypto handelt, die Time-Granularität in Sekunden bis Stunden liegt, und Sie schnell vom Prototyp zum Live-System wollen. Für Long-Term-Equity-Strategien mit täglichem Rebalancing schlägt Alpaca jeden traditionellen Broker auf Setup-Effizienz und Code-Eleganz.

Wer Multi-Asset über mehrere Kontinente tradet, nutzt Alpaca für den US-Teil und kombiniert ihn mit IBKR oder regionalen Brokern für den Rest. Das gibt das Beste aus beiden Welten: Alpaca für API-Komfort, IBKR für globale Coverage.

Sie wollen mit Alpaca eine Strategie produktiv schalten oder mehrere Broker zu einer Engine verbinden? Erstgespräch buchen — wir bauen den Stack, der sich auch in zwei Jahren noch wartbar anfühlt.