API-Zugriff bei Kryptobörse FTX
Verfasst: Freitag 4. November 2022, 10:55
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?
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?