← Alle Insights

OANDA-FX-API in der Praxis: v20 REST und Streaming.

Für reines FX-Trading ist OANDA seit Jahren der Quasi-Standard auf der API-Seite. Die v20-API ist sauber dokumentiert, stabil und für 24/5-Engines ausgelegt. Wer FX algorithmisch handeln will, kommt um OANDA selten herum.

Account-Modell und Authentifizierung.

OANDA stellt drei Endpoint-Sets bereit: fxTrade Practice (Demo), fxTrade Live (echtes Geld) und einen eigenen Streaming- Endpoint für Pricing und Transaktions-Events. Authentifizierung läuft durchgehend über einen Bearer-Token, der im API-Dashboard erzeugt wird.

Eine Account-ID adressiert ein konkretes Konto. Ein Login kann mehrere Account-IDs haben (Sub-Accounts), in der API sind sie unabhängig. Praxis-Tipp: pro Strategie ein eigenes Sub-Account anlegen — saubere P&L-Trennung ohne aufwendiges Tagging.

Erster REST-Roundtrip.

Die offizielle Python-Library oandapyV20 ist solide. Ein minimaler Workflow:

import os
import oandapyV20
import oandapyV20.endpoints.accounts as accounts
import oandapyV20.endpoints.orders as orders
import oandapyV20.endpoints.pricing as pricing

API_TOKEN = os.environ["OANDA_TOKEN"]
ACCOUNT_ID = os.environ["OANDA_ACCOUNT"]

client = oandapyV20.API(access_token=API_TOKEN, environment="practice")

# Account-Status
r = client.request(accounts.AccountSummary(ACCOUNT_ID))
print(f"Balance: {r['account']['balance']} {r['account']['currency']}")

# Aktuelle Preise für EUR/USD und GBP/USD
params = {"instruments": "EUR_USD,GBP_USD"}
r = client.request(pricing.PricingInfo(ACCOUNT_ID, params=params))
for p in r["prices"]:
    print(p["instrument"], "bid", p["bids"][0]["price"], "ask", p["asks"][0]["price"])

# Marktorder: 10000 Units long EUR/USD (Mini-Lot)
order_data = {
    "order": {
        "instrument": "EUR_USD",
        "units": "10000",
        "type": "MARKET",
        "positionFill": "DEFAULT",
    }
}
r = client.request(orders.OrderCreate(ACCOUNT_ID, data=order_data))
print("OrderID:", r["orderCreateTransaction"]["id"])

Wichtig: Units sind nicht Lots. OANDA arbeitet mit absoluten Einheiten der Base-Currency. 10.000 Units EUR/USD entsprechen einem Mini-Lot (10 K). Positive Units = Long, negative Units = Short. Diese Konvention ist konsistent durch die gesamte API.

Pricing-Stream — die Kern-Stärke.

Wer FX algorithmisch handelt, will Tick-Daten in Echtzeit. OANDA bietet dafür einen HTTP-Streaming-Endpoint, der pro Instrument Bid/Ask in Sub-Sekunden-Frequenz liefert.

import oandapyV20
from oandapyV20.endpoints.pricing import PricingStream

client = oandapyV20.API(access_token=API_TOKEN, environment="practice")

stream_req = PricingStream(
    accountID=ACCOUNT_ID,
    params={"instruments": "EUR_USD,GBP_USD,USD_JPY"},
)

try:
    for tick in client.request(stream_req):
        if tick["type"] == "PRICE":
            inst = tick["instrument"]
            bid = float(tick["bids"][0]["price"])
            ask = float(tick["asks"][0]["price"])
            spread = (ask - bid) * 1e4  # in Pips für 4-Decimal-Pairs
            print(f"{inst} {bid:.5f}/{ask:.5f}  spread={spread:.1f}p")
        elif tick["type"] == "HEARTBEAT":
            pass  # alle 5s — wichtig für Connection-Health
except Exception as e:
    print(f"Stream-Fehler: {e}")

Praktisch: die Heartbeat-Events kommen alle 5 Sekunden. Wenn 15 Sekunden keiner kommt, ist die Verbindung tot — selbst wenn die TCP-Verbindung formal noch steht. Das ist die robusteste Disconnection-Detection in der FX-Welt.

Order-Typen und FX-Spezifika.

Die Trade-bezogenen Stop/TP-Orders sind ein wichtiger Unterschied zu Aktien-APIs: der Stop „lebt" am Trade, schließt also genau jene Position. Wer mehrere Positionen in derselben Währung hat, kann pro Trade individuelle Stops setzen.

Position-Modi: NETTING vs. HEDGING.

OANDA unterstützt beide Modi: im NETTING-Modus kann je Instrument nur eine Netto-Position bestehen — Gegenorders verrechnen direkt. Im HEDGING -Modus existieren Long- und Short-Position parallel, mit getrennten Stops und P&Ls. Der Modus wird auf Account-Ebene gesetzt.

Für die meisten systematischen Strategien ist NETTING die bessere Wahl: einfacher zu verstehen, einfacher zu reconcilen, weniger Margin-Bindung. HEDGING macht nur Sinn, wenn die Strategie wirklich gleichzeitige Gegenpositionen modelliert.

Stabile 24/5-Engines bauen.

FX-Märkte laufen Sonntagabend bis Freitagabend durchgehend. Die Hauptaufgabe einer FX-Engine ist nicht „eine Order absetzen", sondern „durchgehend ohne Eingriff laufen". Die Knackpunkte:

  1. Streaming-Reconnect: HTTP-Streams sterben nach Stunden — meist durch Proxies, NAT-Timeouts oder Cloud-Loadbalancer. Implementieren Sie einen Watchdog: ohne Heartbeat für 15 Sekunden → neue Verbindung aufbauen.
  2. State-Recovery: nach Reconnect zuerst aktuelle Positionen und offene Orders über REST nachladen, dann erst weiterstreamen. Niemals auf den Stream allein verlassen.
  3. Roll-Over-Zeiten: täglicher Rollover (5 p.m. ET) bringt kurzzeitige Liquiditätslöcher. Schließen Sie keine Orders in den ±5 Minuten rund um die Rollover-Zeit.
  4. Server-Failover: für Live-Betrieb min. zwei Regionen aktiv, mit DNS-Failover oder Active/Passive-Setup.
  5. Telemetrie: Latenz vom Tick-Event bis zum Order-Submit messen, pro Stunde tracken. Wenn der Median über 200 ms steigt: Infrastruktur prüfen.

Margin, Leverage und regulatorische Realitäten.

OANDA bietet je nach Regulierungsregion unterschiedliche Hebel: in der EU für Retail-Konten 30:1 auf Majors, 20:1 auf Minors. Für Pro-Konten (institutionell) und außerhalb der EU sind deutlich höhere Hebel möglich. Die Margin-Anforderung errechnet sich aus aktuellem Mark und Hebel — bei Hebel 30 sind das ca. 3,3 % des Notional-Werts.

Wichtig: die Margin wird in Account-Währung berechnet, nicht in Instrument-Währung. Wer also ein EUR-Konto fährt und USD/JPY tradet, muss die FX-Konvertierung intern mit einberechnen. OANDA tut das automatisch — aber das eigene Risiko-Modell sollte es ebenfalls tun.

Wann OANDA die richtige Wahl ist.

OANDA ist für reines FX-Trading meine erste Empfehlung. Die API ist stabil, die Doku ist gut, die Ausführung ist transparent (keine Last-Look-Praktiken bei Standard-Konten), und der Streaming-Endpoint ist robust genug für 24/5-Betrieb.

Wer FX und Aktien in einer Engine kombinieren will, könnte alternativ IBKR nehmen — dort ist der FX-Teil aber bewusst minimalistisch (Cash-Forex, keine CFD-Konvertierung). Für FX-only-Strategien führt der Weg meist über OANDA.

Sie planen eine FX-Engine, die fünf Tage durchläuft und nicht jeden Sonntag manuell angestoßen werden muss? Erstgespräch buchen — wir bauen den Stack, der auch nach 6 Monaten noch ohne Eingriff läuft.