[Python] Bitvavo automatische trade

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • ironheart
  • Registratie: September 2022
  • Laatst online: 26-09 19:56
Hoi,

Ik probeer een automatische trade te doen via Python.

Wat ik al heb:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import requests
import os
import time
import hashlib
import hmac

response = requests.get('https://api.bitvavo.com/v2/time')
API_Data = response.json()
bitvavo_tijd =  API_Data['time']

os.system('clear')

#message = str(bitvavo_tijd)+'GET/order'
message = str(bitvavo_tijd)+'GET/order{\"market\":\"BTC-EUR\"}'

print(message)

secret = "Lange sleutel"

signature = hmac.new(bytes(secret , 'utf-8'), msg = bytes(message , 'utf-8'), digestmod = hashlib.sha256).hexdigest().upper()
print(signature)

headers = {
    'Bitvavo-Access-Key': 'Korte_sleutel',
    'Bitvavo-Access-Signature': signature,
    'Bitvavo-Access-Timestamp': str(bitvavo_tijd),
    'Bitvavo-Access-Window': '10000',
    'Content-Type': 'application/json',
}

json_data = {
    'market': 'BTC-EUR',
    'side': 'buy',
    'orderType': 'market',
    'amount': '10',
    'responseRequired': True,
}

response = requests.post('https://api.bitvavo.com/v2/order', headers=headers, json=json_data)
print(response.text)


Ik blijf echter terugkrijgen:
code:
1
{"errorCode":309,"error":"The signature is invalid."}


Ik heb de API documentatie erop nageslagen:
https://docs.bitvavo.com/#tag/Transfer-endpoints
En ik denk dat het in de generering van de signature zit.
Hier op Tweakers is er ook een forum met een .net variant:
https://gathering.tweakers.net/forum/list_messages/2075884
en die heb ik geprobeerd te repliceren in Python maar dat lukt me nog niet helemaal. Wat gaat hier mis?

Alle reacties


Acties:
  • 0 Henk 'm!

  • Tristan
  • Registratie: Maart 2002
  • Laatst online: 10-09 10:37
Ik adviseer je ccxt te gebruiken, daar zit alle api's al voorgebakken in het framework. Super simpel!

Acties:
  • 0 Henk 'm!

  • fopjurist
  • Registratie: Mei 2021
  • Niet online

fopjurist

mr.drs. fopjurist

De signature moet worden berekend op basis van alle velden van json_data:
code:
1
message = str(bitvavo_tijd)+'GET/order'+json.dumps(json_data, separators=(',',':'))

Het argument separators haalt wat spaties uit de output. Ik weet niet of dit nodig is als je de requests library gebruikt. Als het dan nog niet werkt, kun je hier meer inspiratie opdoen.

Beschermheer van het consumentenrecht


Acties:
  • 0 Henk 'm!

  • c-nan
  • Registratie: Juni 2008
  • Laatst online: 17:57
Waarom gebruik je de Bitvavo library niet?

code:
1
2
3
4
5
from python_bitvavo_api.bitvavo import Bitvavo

bitvavo = Bitvavo('<APIKEY>', '<APISECRET>')
response = bitvavo.placeOrder('BTC-EUR', 'sell', 'limit', { 'amount': '0.1', 'price': '5000' })
print(response)

EU DNS: 86.54.11.100


Acties:
  • 0 Henk 'm!

  • ironheart
  • Registratie: September 2022
  • Laatst online: 26-09 19:56
c-nan schreef op woensdag 27 december 2023 @ 19:00:
Waarom gebruik je de Bitvavo library niet?

code:
1
2
3
4
5
from python_bitvavo_api.bitvavo import Bitvavo

bitvavo = Bitvavo('<APIKEY>', '<APISECRET>')
response = bitvavo.placeOrder('BTC-EUR', 'sell', 'limit', { 'amount': '0.1', 'price': '5000' })
print(response)
Omdat ik dan dit terug krijg:

code:
1
2
3
4
  File "/root/bitvavo/bitvavo.py", line 3, in <module>
    bitvavo = Bitvavo('4642__', 'e1a7a__')
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: Bitvavo.__init__() takes from 1 to 2 positional arguments but 3 were given


en eerlijk gezegd niet zo goed weet waar dit in terug te vinden want ik heb maar 2 dingen aangegeven (api en secret) dus waar die derde vandaan komt? Self?

Acties:
  • 0 Henk 'm!

  • c-nan
  • Registratie: Juni 2008
  • Laatst online: 17:57
ironheart schreef op dinsdag 2 januari 2024 @ 14:15:
[...]


Omdat ik dan dit terug krijg:

code:
1
2
3
4
  File "/root/bitvavo/bitvavo.py", line 3, in <module>
    bitvavo = Bitvavo('4642__', 'e1a7a__')
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: Bitvavo.__init__() takes from 1 to 2 positional arguments but 3 were given


en eerlijk gezegd niet zo goed weet waar dit in terug te vinden want ik heb maar 2 dingen aangegeven (api en secret) dus waar die derde vandaan komt? Self?
post je code eens?

EU DNS: 86.54.11.100


Acties:
  • 0 Henk 'm!

  • fopjurist
  • Registratie: Mei 2021
  • Niet online

fopjurist

mr.drs. fopjurist

In de foutmelding staat de relevante coderegel:
code:
1
bitvavo = Bitvavo('4642__', 'e1a7a__')

De juiste syntax staat in de documentatie.

[ Voor 11% gewijzigd door fopjurist op 02-01-2024 16:53 ]

Beschermheer van het consumentenrecht


Acties:
  • 0 Henk 'm!

  • ironheart
  • Registratie: September 2022
  • Laatst online: 26-09 19:56
fopjurist schreef op dinsdag 2 januari 2024 @ 16:52:
[...]

In de foutmelding staat de relevante coderegel:
code:
1
bitvavo = Bitvavo('4642__', 'e1a7a__')

De juiste syntax staat in de documentatie.
Ik heb het doorgenomen en ik vrees dat het (nog) een brugje te ver is voor mij. Ik was op zoek naar een simpele voorbeeldcode waarin een purchase order puur op market order gedaan wordt. Sockets aanmaken is voor mij nog een stapje te ver. Dank in ieder geval voor het aankaarten.
Pagina: 1