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?
API-Zugriff bei Kryptobörse FTX
-
- User
- Beiträge: 512
- Registriert: Mittwoch 13. November 2019, 08:38
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.