Bitget Order Bot?
Moin, ich möchte gerne einen python Bot bauen, welcher für mich Future Postionen auf Bitget eröffnet.
Ich bekomme nur leider immer den gleichen fehler und weiß nicht wie ich das umgehen soll. Kann mir da jemand weiterhelfen?
Fehler:
Versuch 1 von 10...
Fehler beim Platzieren der Order:
{
"code": "40009",
"msg": "sign signature error",
"requestTime" :1738611623938,
"data": null
}
Warte 30 Sekunden vor dem nächsten Versuch...
Code:
import requests
import time
import hmac
import hashlib
import configparser
import json
# Lade die Konfiguration aus der config.ini Datei
config = configparser.ConfigParser()
config.read('config.ini')
api_key = config['bitget']['api_key']
secret_key = config['bitget']['secret_key']
passphrase = config['bitget']['passphrase']
# Bitget API Endpoints
BASE_URL = 'https://api.bitget.com'
END_POINT = '/api/mix/v1/order/placeOrder'
# Funktion zur Generierung der Signatur
def generate_signature(secret_key, message):
return hmac.new(secret_key.encode('utf-8'), message.encode('utf-8'), hashlib.sha256).hexdigest()
# Funktion zur Erstellung der Headers
def create_headers(api_key, secret_key, passphrase, request_path, body):
timestamp = str(int(time.time() * 1000))
message = timestamp + request_path + json.dumps(body, separators=(',', ':')) # Wichtig: Keine Leerzeichen im JSON
signature = generate_signature(secret_key, message)
headers = {
'Content-Type': 'application/json',
'ACCESS-KEY': api_key,
'ACCESS-SIGN': signature,
'ACCESS-TIMESTAMP': timestamp,
'ACCESS-PASSPHRASE': passphrase
}
return headers
# Funktion zum Kauf von Bitcoin im Futures-Markt
def buy_bitcoin_futures(amount_usdt):
request_path = END_POINT
body = {
"symbol": "BTCUSDT_UMCBL",
"marginCoin": "USDT",
"side": "open_long",
"orderType": "market",
"price": "0",
"size": str(amount_usdt),
"timeInForce": "normal"
}
headers = create_headers(api_key, secret_key, passphrase, request_path, body)
response = requests.post(BASE_URL + request_path, headers=headers, json=body)
if response.status_code == 200:
print("Order erfolgreich platziert:", response.json())
return True # Erfolg
else:
print("Fehler beim Platzieren der Order:", response.text)
return False # Fehler
# Hauptfunktion
if __name__ == "__main__":
amount_usdt = 5 # 5 USDT
max_retries = 10 # Maximale Anzahl von Versuchen
retry_delay = 30 # Verzögerung zwischen den Versuchen in Sekunden
for attempt in range(max_retries):
print(f"Versuch {attempt + 1} von {max_retries}...")
success = buy_bitcoin_futures(amount_usdt)
if success:
break # Erfolg, Schleife beenden
else:
print(f"Warte {retry_delay} Sekunden vor dem nächsten Versuch...")
time.sleep(retry_delay) # Warte 30 Sekunden
if not success:
print("Maximale Anzahl von Versuchen erreicht. Order konnte nicht platziert werden.")
1 Antwort
Hey,
der Fehler
"sign signature error"
kommt ziemlich sicher daher, dass die Signatur, die du für die Anfrage generierst, nicht mit dem übereinstimmt, was die API erwartet. Das ist ein ziemlich häufiger Stolperstein, wenn man mit APIs arbeitet. Lass uns mal schauen, woran es liegen könnte:
1. Signatur überprüfenDie API erwartet, dass die Signatur aus der Kombination von
timestamp
,
request_path
und dem Body gebildet wird. Achte darauf, dass der Body exakt formatiert ist. Du machst das zwar schon mit
json.dumps(body, separators=(',', ':'))
, aber es kann trotzdem schnell passieren, dass irgendwo ein Leerzeichen oder ein Formatierungsfehler drin ist.
Du kannst die Signatur debuggen, indem du dir die Zwischenschritte ausgibst, zum Beispiel:
print("Timestamp:", timestamp)
print("Message:", message)
print("Signature:", signature)
So siehst du, ob da etwas falsch ist.
2. Pfad und HeaderEin häufiger Fehler ist, dass der
request_path
falsch ist. Wichtig: Der Pfad in der Signatur darf nur der relative Teil sein, also
/api/mix/v1/order/placeOrder
. Wenn du versehentlich den kompletten URL-Pfad nimmst, klappt es nicht.
Außerdem: Vergewissere dich, dass die Header korrekt sind. Da reicht schon ein Tippfehler in einem Schlüsselwort wie
ACCESS-KEY
, und es funktioniert nicht.
3. API-Key und PassphraseManchmal ist es so banal: Ein falsch kopierter API-Key oder eine nicht aktivierte API-Verbindung kann genau diesen Fehler auslösen. Check das nochmal in deinem Bitget-Konto, ob der Key korrekt und aktiv ist.
4. Zeitproblem?Die API nutzt den
ACCESS-TIMESTAMP
, und der muss genau mit der Serverzeit übereinstimmen. Wenn dein System nicht synchronisiert ist (z. B. die Zeit geht ein paar Sekunden vor oder nach), kann das ebenfalls diesen Fehler auslösen. Am besten kurz prüfen, ob die Systemzeit korrekt ist.
FazitDas Problem ist höchstwahrscheinlich entweder in der Signaturberechnung oder in den Headern. Debugge die Zwischenschritte, um herauszufinden, wo genau es klemmt. Falls du nicht weiterkommst, kannst du auch mal ein simples Beispiel aus der API-Dokumentation testen und schauen, ob das funktioniert – dann hast du zumindest einen Vergleichspunkt.
Hoffe, das hilft dir weiter! Gib Bescheid, ob du das Problem lösen konntest!
Lg lex