Seite 1 von 1

API-Zugriff bei Kryptobörse FTX

Verfasst: Freitag 4. November 2022, 10:55
von JWS
Guten Tag allerseits,
für das automatische Handeln an Kryptobörsen stellen diese den Benutzern APIs zur Verfügung, über welche man mit seinem Account interagieren kann. Viele Börsen unterstützen dabei u.a. insbesondere Python und zeigen i.d.R. Beispielcode auf. So auch FTX, wobei es mir wohl nicht gelingt, meine Anmeldedaten formgerecht zu übertragen.

Nachfolgend der angegebene Code für die Authentifizierung (https://docs.ftx.com/reference/authentication):

Here is an example of handling authentication for FTX in Python:

import time
import hmac
from requests import Request

ts = int(time.time() * 1000)
request = Request('GET', '<api_endpoint>')
prepared = request.prepare()
signature_payload = f'{ts}{prepared.method}{prepared.path_url}'
if prepared.body:
signature_payload += prepared.body
signature_payload = signature_payload.encode()
signature = hmac.new('YOUR_API_SECRET'.encode(), signature_payload, 'sha256').hexdigest()

request.headers['FTX-KEY'] = 'YOUR_API_KEY'
request.headers['FTX-SIGN'] = signature
request.headers['FTX-TS'] = str(ts)

Und hier für einen Handelsauftrag (https://docs.ftx.com/reference/place-order):

import requests

url = "https://ftx.com/api/orders"

payload = {
"reduceOnly": False,
"ioc": False,
"postOnly": True,
"rejectOnPriceBand": False
}
headers = {
"accept": "application/json",
"Content-Type": "application/json",
"FTX-KEY": "{{api_key}}",
"FTX-SIGN": "{{signature}}",
"FTX-TS": "{{timestamp}}",
"FTX-SUBACCOUNT": "{{string}}",
"authorization": "Basic TWVpblVzZXJuYW1lOk1laW5QVw=="
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)

(Für die Autorisierung wurde in obigen Beispielcode und auch nachfolgend jeweils ein Fantasie-Code eingegeben)
Den letztendliche Anwendungscode habe ich wie folgt übernommen:

import requests
import time
import hmac
from requests import Request

FAK=open('F-AK.txt','r')
FPK=open('F-PK.txt','r')
API = FAK.read()
SECRET = FPK.read()

ts = int(time.time() * 1000)
request = Request('POST', 'https://ftx.com/api')
prepared = request.prepare()
signature_payload = f'{ts}{prepared.method}{prepared.path_url}'
if prepared.body:
signature_payload += prepared.body
signature_payload = signature_payload.encode()
signature = hmac.new(SECRET.encode(), signature_payload, 'sha256').hexdigest()

url = "https://ftx.com/api/orders"

payload = {
"market": "FTT/USDT",
"side": "buy",
"type": "limit",
"size": 0.1,
"price": 24.5,
"reduceOnly": False,
"ioc": False,
"postOnly": False,
#"clientId": "string",
"rejectOnPriceBand": False,
"rejectAfterTs": 0
}
headers = {
"accept": "application/json",
"Content-Type": "application/json",
"FTX-KEY": API,
"FTX-SIGN": signature,
"FTX-TS": str(ts),
"authorization": "Basic TWVpblVzZXJuYW1lOk1laW5QVw=="
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)

Das zurückgegebene Ergebnis sieht so aus:

{"success":false,"error":"Not logged in"}

Ausgeschlossen werden kann, dass die Zugangsdaten falsch sind, da bereits an anderer Stelle damit ein erfolgreiches Einloggen erfolgt ist.
Aber sicherlich ist mir an anderer Stelle bei der Umsetzung ein Fehler passiert, den ich leider nicht erkennen kann.
Auch der FTX-Support antwortet seit fast einer Woche nicht, obwohl ich schon mehrmals nachgehakt habe.

Weiß jemand Rat?

Re: API-Zugriff bei Kryptobörse FTX

Verfasst: Freitag 4. November 2022, 11:12
von einfachTobi
Mir fällt spontan auf, dass du bei der Erzeugung des Hashes den Hostname im API-Endpoint hast, der aber laut Doku nicht enthalten sein sollte. Ich würde es mir aber auch einfach machen und wie in der Doku vorgeschlagen den fertigen Client verwenden: https://github.com/ftexchange/ftx/blob/ ... /client.py.

Re: API-Zugriff bei Kryptobörse FTX

Verfasst: Freitag 4. November 2022, 11:13
von Sirius3
Die Signatur muß mit dem richtigen Payload generiert werden und nicht mit irgendeinem beliebigen, der nichts mit den eigentlichen Daten zu tun hat.