API-Referenz¶
Allgemeine Konzepte ¶
Volumen, Preise, Ordertypen und Gültigkeitsdauer
Volumen¶
Das Volumen wird in Cents (Einheiten von 0,0000001 Lots) angegeben.
| Lots | Volumen (Cents) |
|---|---|
| 0,01 | 100.000 |
| 0,1 | 1.000.000 |
| 1,0 | 10.000.000 |
Preise¶
Preiswerte werden in Pipetten angegeben. Zur Umrechnung: Anzeigepreis = Pipettenwert / 10^pipDigits
Für EURUSD (5 Stellen) entspricht ein Pipettenwert von 112345 = 1,12345.
Ordertypen¶
| Typ | Beschreibung | Erforderliche Felder |
|---|---|---|
MARKET | Sofortige Ausführung zum aktuellen Preis | symbolId, tradeSide, volume |
LIMIT | Ausführung zum Limitpreis oder besser | + limitPrice |
STOP | Auslösung, wenn der Markt den Stop-Preis erreicht | + stopPrice |
MARKET_RANGE | Ausführung innerhalb einer Preisspanne | + baseSlippagePrice |
STOP_LIMIT | Limit-Order, die beim Stop-Preis ausgelöst wird | + stopPrice, limitPrice |
Gültigkeitsdauer¶
| Richtlinie | Beschreibung |
|---|---|
GOOD_TILL_CANCEL | Order bleibt aktiv, bis sie ausgeführt oder storniert wird |
GOOD_TILL_DATE | Order läuft zum angegebenen expirationTimestamp ab |
IMMEDIATE_OR_CANCEL | Ausführung des verfügbaren Volumens, Rest wird storniert |
Kontoinformationen ¶
GET /v1/balance Get account balance
Gibt Kontosaldo, Eigenkapital und freie Margin zurück.
Keine Parameter.
200 Erfolgreiche Antwort
{
"balance": 10000.00,
"equity": 10250.75,
"freeMargin": 9800.50,
"balanceVersion": 42,
"moneyDigits": 2,
"depositAssetId": 1
}
| Feld | Typ | Beschreibung |
|---|---|---|
balance | double | Kontosaldo in Einzahlungswährung |
equity | double | Saldo + schwebende GuV |
freeMargin | double | Für neue Transaktionen verfügbare Margin |
balanceVersion | int64 | Saldoversionszähler |
moneyDigits | int32 | Dezimalstellen für Geldwerte |
depositAssetId | int64 | Einzahlungswährungs-Asset-ID |
GET /v1/symbols Verfügbare Symbole abrufen
Gibt alle für den Handel auf dem Konto verfügbaren Symbole zurück.
Keine Parameter.
200 Array von Symbol-Objekten
[
{
"symbolId": 1,
"symbolName": "EURUSD",
"enabled": true,
"baseAssetId": 2,
"quoteAssetId": 1,
"description": "Euro vs US Dollar"
}
]
Symbol
| Feld | Typ | Beschreibung |
|---|---|---|
symbolId | int64 | Symbol-ID (wird in anderen API-Aufrufen verwendet) |
symbolName | string | Symbolname (z. B. „EURUSD") |
enabled | boolean | Ob das Symbol handelbar ist |
baseAssetId | int64 | Basis-Asset-ID |
quoteAssetId | int64 | Notierungs-Asset-ID |
description | string | Für Menschen lesbare Beschreibung |
GET /v1/assets Verfügbare Assets abrufen
Gibt verfügbare Assets (Währungen) zurück.
Keine Parameter.
200 Array von Asset-Objekten
[
{
"assetId": 1,
"name": "USD",
"displayName": "US Dollar"
}
]
Asset
| Feld | Typ | Beschreibung |
|---|---|---|
assetId | int64 | Asset-ID |
name | string | Asset-Code (z. B. „USD") |
displayName | string | Anzeigename |
Marktdaten ¶
GET /v1/prices Spot-Kurse abrufen
Gibt aktuelle Geld-/Briefkurse für die angegebenen Symbole zurück. Dies ist eine Momentaufnahme – die API unterstützt kein Streaming.
| Name | Befindet sich in | Typ | Erforderlich | Beschreibung |
|---|---|---|---|---|
symbolId | query | int64[] | Durch Komma getrennte Symbol-IDs |
200 Array von SpotPrice-Objekten
[
{
"symbolId": 1,
"bid": 112340,
"ask": 112355,
"high": 112890,
"low": 111950,
"sessionClose": 112100,
"timestamp": 1700000000000
}
]
SpotPrice
| Feld | Typ | Beschreibung |
|---|---|---|
symbolId | int64 | Symbol-ID |
bid | int64 | Bester Geldkurs (Pipetten) |
ask | int64 | Bester Briefkurs (Pipetten) |
high | int64 | Sitzungshoch (Pipetten) |
low | int64 | Sitzungstief (Pipetten) |
sessionClose | int64 | Schlusskurs der vorherigen Sitzung (Pipetten) |
timestamp | int64 | Kurszeitstempel (Epoch ms) |
GET /v1/trendbars Historische OHLCV-Daten abrufen
Gibt historische Candlestick-Daten (OHLCV) für ein Symbol zurück.
| Name | Befindet sich in | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|---|
symbolId | query | int64 | – | Symbol-ID | |
period | query | string | – | Balkenzeitraum | |
fromTimestamp | query | string | – | Startzeit (ISO-8601) | |
toTimestamp | query | string | – | Endzeit (ISO-8601) | |
count | query | int32 | 100 | Maximale Anzahl zurückzugebender Balken |
Verfügbare Zeiträume
M_1 M_2 M_3 M_4 M_5 M_10 M_15 M_30 H_1 H_2 H_3 H_4 H_6 H_8 H_12 D_1 W_1 MN_1
200 Array von Trendbar-Objekten
[
{
"timestamp": 1700000000000,
"open": 112340.0,
"high": 112890.0,
"low": 111950.0,
"close": 112500.0,
"volume": 4521
}
]
Trendbar
| Feld | Typ | Beschreibung |
|---|---|---|
timestamp | int64 | Eröffnungszeit des Balkens (Epoch ms) |
open | double | Eröffnungskurs (Pipetten) |
high | double | Höchstkurs (Pipetten) |
low | double | Tiefstkurs (Pipetten) |
close | double | Schlusskurs (Pipetten) |
volume | int64 | Tick-Volumen |
Orders ¶
POST /v1/orders Neue Order platzieren
Platziert eine neue Handelsorder. Gibt eine ExecutionResponse zurück.
Keine Pfad- oder Query-Parameter.
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
symbolId | int64 | Zu handelndes Symbol | |
orderType | string | MARKET, LIMIT, STOP, MARKET_RANGE, STOP_LIMIT | |
tradeSide | string | BUY oder SELL | |
volume | int64 | Volumen in Cents | |
limitPrice | double | Limitkurs – erforderlich für LIMIT, STOP_LIMIT | |
stopPrice | double | Stop-Trigger-Kurs – erforderlich für STOP, STOP_LIMIT | |
stopLoss | double | Stop-Loss-Kurs | |
takeProfit | double | Take-Profit-Kurs | |
comment | string | Freitextkommentar (max. 256 Zeichen) | |
label | string | Bot-Label (max. 100 Zeichen) | |
timeInForce | string | GOOD_TILL_CANCEL, GOOD_TILL_DATE, IMMEDIATE_OR_CANCEL | |
baseSlippagePrice | double | Basiskurs für Slippage – erforderlich für MARKET_RANGE | |
slippageInPoints | int32 | Maximale Slippage in Punkten | |
expirationTimestamp | int64 | Ablaufzeitstempel (Epoch ms) – für GOOD_TILL_DATE |
{
"symbolId": 1,
"orderType": "MARKET",
"tradeSide": "BUY",
"volume": 10000000,
"stopLoss": 112000,
"takeProfit": 113000
}
200 ExecutionResponse – Order akzeptiert oder ausgeführt
400 INVALID_REQUEST oder TRADING_BAD_VOLUME
422 NOT_ENOUGH_MONEY
409 MARKET_CLOSED
{
"orderId": 12345,
"positionId": 67890,
"executionType": "ORDER_FILLED",
"order": { "..." : "..." },
"position": { "..." : "..." },
"deal": { "..." : "..." }
}
GET /v1/orders Ausstehende Orders abrufen
Gibt alle ausstehenden (nicht ausgeführten) Orders zurück.
Keine Parameter.
200 Array von ausstehenden Order-Objekten
PUT /v1/orders/{orderId} Ausstehende Order ändern
Ändert eine bestehende ausstehende Order. Gibt eine ExecutionResponse zurück.
| Name | Befindet sich in | Typ | Erforderlich | Beschreibung |
|---|---|---|---|---|
orderId | path | int64 | Die zu ändernde Order |
Beliebige Teilmenge der folgenden Felder.
| Feld | Typ | Beschreibung |
|---|---|---|
volume | int64 | Neues Volumen in Cents |
limitPrice | double | Neuer Limitkurs |
stopPrice | double | Neuer Stop-Kurs |
stopLoss | double | Neuer Stop-Loss-Kurs |
takeProfit | double | Neuer Take-Profit-Kurs |
expirationTimestamp | int64 | Neuer Ablaufzeitstempel (Epoch ms) |
200 ExecutionResponse mit ORDER_REPLACED
404 Order nicht gefunden
DELETE /v1/orders/{orderId} Ausstehende Order stornieren
Storniert eine ausstehende Order. Gibt eine ExecutionResponse zurück.
| Name | Befindet sich in | Typ | Erforderlich | Beschreibung |
|---|---|---|---|---|
orderId | path | int64 | Die zu stornierende Order |
200 ExecutionResponse mit ORDER_CANCELLED
404 Order nicht gefunden
GET /v1/orders/history Order-Verlauf abrufen
Gibt historische Orders innerhalb eines Zeitraums zurück.
| Name | Befindet sich in | Typ | Erforderlich | Beschreibung |
|---|---|---|---|---|
fromTimestamp | query | string | Startzeit (ISO-8601) | |
toTimestamp | query | string | Endzeit (ISO-8601) |
200 OrderListResponse
| Feld | Typ | Beschreibung |
|---|---|---|
orders | Order[] | Array historischer Orders |
hasMore | boolean | Ob zusätzliche Seiten verfügbar sind |
Positionen ¶
GET /v1/positions Offene Positionen abrufen
Gibt alle offenen Positionen und ausstehenden Orders zurück.
Keine Parameter.
200 Array von Position-Objekten
[
{
"positionId": 67890,
"symbolId": 1,
"tradeSide": "BUY",
"volume": 10000000,
"entryPrice": 112345.0,
"stopLoss": 112000.0,
"takeProfit": 113000.0,
"unrealizedPnl": 155.25,
"commission": -7.00,
"swap": -1.20
}
]
Position
| Feld | Typ | Beschreibung |
|---|---|---|
positionId | int64 | Positions-ID |
symbolId | int64 | Symbol-ID |
tradeSide | string | BUY oder SELL |
volume | int64 | Volumen in Cents |
entryPrice | double | VWAP-Einstiegspreis |
stopLoss | double | Stop-Loss-Kurs |
takeProfit | double | Take-Profit-Kurs |
unrealizedPnl | double | Schwebender Gewinn/Verlust |
commission | double | Berechnete Provision |
swap | double | Swap-Betrag |
GET /v1/positions/{positionId} Positionsdetails abrufen
Gibt eine Position mit den zugehörigen Orders und Deals zurück.
| Name | Befindet sich in | Typ | Erforderlich | Beschreibung |
|---|---|---|---|---|
positionId | path | int64 | Die Positions-ID |
200 PositionDetailResponse
| Feld | Typ | Beschreibung |
|---|---|---|
position | Position | Position-Objekt |
orders | Order[] | Zugehörige Orders |
deals | Deal[] | Zugehörige Deals |
PUT /v1/positions/{positionId} SL/TP der Position ändern
Aktualisiert den Stop-Loss und/oder Take-Profit für eine offene Position. Gibt eine ExecutionResponse zurück.
| Name | Befindet sich in | Typ | Erforderlich | Beschreibung |
|---|---|---|---|---|
positionId | path | int64 | Die Positions-ID |
| Feld | Typ | Beschreibung |
|---|---|---|
stopLoss | double | Neuer Stop-Loss-Preis (null zum Entfernen) |
takeProfit | double | Neuer Take-Profit-Preis (null zum Entfernen) |
trailingStopLoss | boolean | Trailing-Stop-Loss aktivieren |
{
"stopLoss": 111500,
"takeProfit": 113500,
"trailingStopLoss": false
}
POST /v1/positions/{positionId}/close Position schließen
Schließt eine offene Position vollständig oder teilweise. Verwenden Sie einen Wert, der kleiner als das vollständige Volumen der Position ist, für eine teilweise Schließung. Gibt eine ExecutionResponse zurück.
| Name | Befindet sich in | Typ | Erforderlich | Beschreibung |
|---|---|---|---|---|
positionId | path | int64 | Die Positions-ID |
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
volume | int64 | Zu schließendes Volumen in Cent |
{
"volume": 10000000
}
422 NOT_ENOUGH_MONEY – unzureichende Margin für teilweise Schließung
Transaktionen ¶
GET /v1/deals Deal-Verlauf abrufen
Gibt ausgeführte Deals innerhalb eines Zeitraums zurück.
| Name | Befindet sich in | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|---|
fromTimestamp | query | string | – | Startzeit (ISO-8601) | |
toTimestamp | query | string | – | Endzeit (ISO-8601) | |
maxRows | query | int32 | 50 | Maximale Anzahl zurückzugebender Deals |
200 Array von Deal-Objekten
[
{
"dealId": 11111,
"orderId": 12345,
"positionId": 67890,
"symbolId": 1,
"tradeSide": "BUY",
"volume": 10000000,
"filledVolume": 10000000,
"executionPrice": 112345.0,
"executionTimestamp": 1700000000000,
"dealStatus": "FILLED",
"commission": -7.00
}
]
Deal
| Feld | Typ | Beschreibung |
|---|---|---|
dealId | int64 | Transaktions-ID |
orderId | int64 | Order, die diesen Deal ausgelöst hat |
positionId | int64 | Positions-ID |
symbolId | int64 | Symbol-ID |
tradeSide | string | BUY oder SELL |
volume | int64 | Angefordertes Volumen in Cent |
filledVolume | int64 | Abgeschlossenes Volumen in Cent |
executionPrice | double | Ausführungspreis |
executionTimestamp | int64 | Ausführungszeit (Epoch ms) |
dealStatus | string | Status – siehe Werte unten |
commission | double | Berechnete Provision |
dealStatus-Werte
| Wert | Bedeutung |
|---|---|
FILLED | Order vollständig abgeschlossen |
PARTIALLY_FILLED | Order teilweise abgeschlossen |
REJECTED | Vom Trading-Server abgelehnt |
INTERNALLY_REJECTED | Intern abgelehnt, bevor der Server erreicht wurde |
ERROR | Während der Ausführung ist ein Fehler aufgetreten |
MISSED | Order verpasst (z. B. Lücke im Markt) |
Schemas { #execution-response-schema } ¶
ExecutionResponse ¶
Alle Vorgänge zur Orderplatzierung, -änderung und -stornierung geben dieses Objekt zurück.
| Feld | Typ | Beschreibung |
|---|---|---|
orderId | int64 | Betroffene Order-ID |
positionId | int64 | Betroffene Positions-ID |
executionType | string | Ergebnistyp – siehe Werte unten |
order | Order | Orderdetails (falls zutreffend) |
position | Position | Positionsdetails (falls zutreffend) |
deal | Deal | Deal-Details (falls zutreffend) |
executionType-Werte
| Wert | Bedeutung |
|---|---|
ORDER_ACCEPTED | Ausstehende Order akzeptiert |
ORDER_FILLED | Order vollständig abgeschlossen |
ORDER_REPLACED | Order geändert |
ORDER_CANCELLED | Order storniert |
ORDER_EXPIRED | Order abgelaufen |
ORDER_REJECTED | Order abgelehnt |
ORDER_CANCEL_REJECTED | Stornierungsanfrage abgelehnt |
ORDER_PARTIAL_FILL | Order teilweise abgeschlossen |
SWAP | Positions-Swap angewendet |
DEPOSIT | Kontoeinzahlung |
WITHDRAW | Kontoauszahlung |
BONUS_DEPOSIT_WITHDRAW | Bonus-Einzahlung oder -Auszahlung |
Ratenbegrenzungen ¶
Das Gateway erzwingt Ratenbegrenzungen auf mehreren Ebenen.
| Niveau | Beschreibung |
|---|---|
| Pro IP | Begrenzt die Gesamtanfragen von einer einzelnen IP-Adresse |
| Pro Benutzer | Begrenzt die Gesamtanfragen über alle Konten für ein einzelnes Token |
| Pro Konto | Begrenzt Anfragen, die auf ein einzelnes Handelskonto abzielen |
Ratenbegrenzung überschritten
Wenn eine Ratenbegrenzung überschritten wird, gibt die API 429 Too Many Requests mit einem Retry-After-Header zurück.
Fehlerbehandlung ¶
Wenn eine Anfrage fehlschlägt, gibt die API eine JSON-Fehlerantwort zurück.
{
"error": {
"code": "NOT_ENOUGH_MONEY",
"message": "Insufficient free margin for this order",
"httpStatus": 422,
"retryAfter": null
}
}
Fehlercodes ¶
| Code | HTTP | Beschreibung |
|---|---|---|
INVALID_REQUEST | 400 | Ungültige oder fehlende Anfrageparameter |
UNAUTHORIZED | 401 | Ungültiges, abgelaufenes oder fehlendes Token |
TRADING_BAD_VOLUME | 400 | Volumen ist ungültig (unter Minimum oder überschreitet Position) |
NOT_ENOUGH_MONEY | 422 | Unzureichende freie Margin |
SYMBOL_NOT_FOUND | 404 | Symbol-ID existiert nicht |
MARKET_CLOSED | 409 | Markt für das Symbol ist derzeit geschlossen |
MAINTENANCE | 503 | Trading-Server befindet sich im Wartungsmodus |
TIMEOUT | 504 | Trading-Server hat nicht rechtzeitig geantwortet |
GATEWAY_RATE_LIMIT | 429 | Ratenbegrenzung überschritten – siehe Retry-After-Header |
Behandlung von Ratenbegrenzungen
Wenn Sie eine 429-Antwort erhalten, geben der Retry-After-Header und das retryAfter-Feld an, wie viele Sekunden Sie warten müssen, bevor Sie die nächste Anfrage senden.