Een trade via de API van Bitvavo met VBA

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • W.Stecher
  • Registratie: Juli 2023
  • Laatst online: 08-07-2023
Hallo allemaal,

allereerst wil ik zeggen dat ik uit Duitsland kom, maar ik probeer in het Nederlands te schrijven. Wees alsjeblieft niet boos als je een fout maakt.

Ik probeer met VBA een trade te doen via de API van Bitvavo en heb een problem omdat de 'Signature' engeldig is.

Het opvragen van de prijz van BTC-EUR werkt!
Het opvragen van mijn account werkt!
Een transactie te doen werkt niet!

Obvragen van een prijz (HET WERKT!):

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
Public Function Bitvavo_Marktpreise()

   Dim oRequest As WinHttp.WinHttpRequest
   Dim Signature As Variant
   Dim apiKey As String
   Dim secret As String
   Dim sResult As String
   Dim sURL As String
   Dim sTime As String
     
   sTime = BitvavoTime()   
   sURL = "https://api.bitvavo.com/v2/ticker/price?market=BTC-EUR"

   Set oRequest = New WinHttp.WinHttpRequest
   
   With oRequest
       .Open "GET", sURL
       .SetRequestHeader "Content-Type", "application/json"
       .SetRequestHeader "Bitvavo-Access-Timestamp", sTime
       .SetRequestHeader "Bitvavo-Access-Window", "30000"
       .Send ""
       .WaitForResponse
       sResult = .ResponseText
   End With

End Function



Opvragen van mijn account (HET WERKT!):

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
Public Function Bitvavo_Account_auslesen()

   Dim oRequest As WinHttp.WinHttpRequest
   Dim Signature As Variant
   Dim apiKey As String
   Dim secret As String
   Dim sResult As String
   Dim sURL As String
   Dim sTime As String
   
   apiKey = "-Sleutel-met-leesrecht-"
   secret = "-HetSecret-"
      
   sTime = BitvavoTime()
   Signature = LCase(Base64_HMACSHA256(sTime & "GET/v2/balance", secret))
   
   sURL = "https://api.bitvavo.com/v2/balance"

   Set oRequest = New WinHttp.WinHttpRequest
   
   With oRequest
       .Open "GET", sURL
       .SetRequestHeader "Content-Type", "application/json"
       .SetRequestHeader "Bitvavo-Access-Key", apiKey
       .SetRequestHeader "Bitvavo-Access-Signature", Signature
       .SetRequestHeader "Bitvavo-Access-Timestamp", sTime
       .SetRequestHeader "Bitvavo-Access-Window", "30000"
       .Send ""
       .WaitForResponse
       sResult = .ResponseText
   End With

End Function


Een transactie te doen (HET WERKT NIET!):

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
Public Function Bitvavo_Trade()

   Dim oRequest As WinHttp.WinHttpRequest
   Dim Signature As Variant
   Dim apiKey As String
   Dim secret As String
   Dim totalParams As String
   Dim sResult As String
   Dim sURL As String
   Dim sTime As String
   
   apiKey = "-Sleutel-met-recht-om-te-kopen"
   secret = "-HetSecret-"
      
   sTime = BitvavoTime()
   Signature = LCase(Base64_HMACSHA256(sTime & "POST/v2/order", secret))
   
   sURL = "https://api.bitvavo.com/v2/order"

   Set oRequest = New WinHttp.WinHttpRequest
   
   totalParams = "{" & Chr(34) & "market" & Chr(34) & ": " & Chr(34) & "XRP-EUR" & Chr(34) & ", " & _
                       Chr(34) & "side" & Chr(34) & ": " & Chr(34) & "buy" & Chr(34) & ", " & _
                       Chr(34) & "orderType" & Chr(34) & ": " & Chr(34) & "market" & Chr(34) & ", " & _
                       Chr(34) & "amountQuote" & Chr(34) & ": " & Chr(34) & "5" & Chr(34) & _
                 "}"
   
   With oRequest
       .Open "POST", sURL
       .SetRequestHeader "Content-Type", "application/json"
       .SetRequestHeader "Bitvavo-Access-Key", apiKey
       .SetRequestHeader "Bitvavo-Access-Signature", Signature
       .SetRequestHeader "Bitvavo-Access-Timestamp", sTime
       .SetRequestHeader "Bitvavo-Access-Window", "30000"
       .Send totalParams
       .WaitForResponse
       sResult = .ResponseText
   End With

End Function


Het resultaat is: "{""errorCode"":309,""error"":""The signature is invalid.""}"

Ik heb ook probeerd om de transactie (XRP kopen voor 5 Euro tegen marktprijzen) te integreren in de URL, maar ik weet niet helemaal zeker hoe ik dat moet doen en mijn pogingen is mislukt.

Ik heb probeerd:
Signature = LCase(Base64_HMACSHA256(sTime & "POST/v2/order/market=XRP-EUR&side=buy&orderType=market&amountQuote=5", secret))

Heeft u een idee en kunt u mij helpen alsjeblieft?

Beste antwoord (via W.Stecher op 07-07-2023 17:13)


  • Keeper
  • Registratie: Juni 2001
  • Niet online

Keeper

<3 Ruby

Je moet even goed lezen hoe je de signature correct berekent: https://docs.bitvavo.com/#section/Signing-REST-requests

Voor POST requests moet je ook de body die je opstuurt meenemen in je signature berekening, zie het voorbeeld in hun docs. Je doet nu alleen de timestamp en URL, maar dat is niet voldoende.

Alle reacties


Acties:
  • Beste antwoord
  • +3 Henk 'm!

  • Keeper
  • Registratie: Juni 2001
  • Niet online

Keeper

<3 Ruby

Je moet even goed lezen hoe je de signature correct berekent: https://docs.bitvavo.com/#section/Signing-REST-requests

Voor POST requests moet je ook de body die je opstuurt meenemen in je signature berekening, zie het voorbeeld in hun docs. Je doet nu alleen de timestamp en URL, maar dat is niet voldoende.

Acties:
  • 0 Henk 'm!

  • W.Stecher
  • Registratie: Juli 2023
  • Laatst online: 08-07-2023
Heel erg bedankt.

Ik was op zoek naar informatie over het maken van de signatur, maar kon deze niet vinden.
En ik had een tweede fout.
Ik heb het ook geprobeerd met
{"market": "XRP-EUR", "side": "buy", "orderType": "market", "amountQuote": "5"}
Veel te veel ruimtes ;-)

Dat werkt:
{"market":"XRP-EUR","side":"buy","orderType":"market","amountQuote":"5"}

Bedankt, bedankt, bedankt

Anoniem: 1657472

Ik loop ook tegen dezelfde problemen aan, maar als iemand mij aan de functie "Base64_HMACSHA256" voor VBA kan helpen kom ik dicht bij mijn oplossing om mijn orders te kunnen krijgen zonder deze te moeten downloaden.
Eerder had ik het geheel werkend met de Bittrex-api, maar deze zijn begin van de maand gestopt.

Wijziging 14 januari
Uiteindelijk oplossing gevonden. Nu alles (account, trades en saldi) werkend in Excel 2010

[ Voor 15% gewijzigd door Anoniem: 1657472 op 14-01-2024 16:37 ]


Acties:
  • 0 Henk 'm!

  • LouisGi
  • Registratie: Oktober 2024
  • Laatst online: 09-10-2024
Beste mensen,

Allereerst dank aan iedereen want alles wat hier staat heeft mij veel geholpen. Toch lukt het mij nog niet om te handelen.

Het opvragen van koersen en het opvragen van de orders en het saldo gaat zonder enig probleem, maar het annuleren van een order lukt mij niet.
Ik heb ook nog wat andere problemen, maar misschien worden die opgelost met de oplossing van dit probleem.

Ik heb van alles uitgeprobeerd met de signatuur en de URL, maar telkens krijg ik de foutmelding 309 “The signature is invalid” of de foutmelding 205 “market parameter is invalid”.
Ik weet simpelweg niet hoe ik de orderId moet toevoegen. Ook heb ik alles geprobeerd als clientOrderId, maar zonder resultaat.
(xxx-xxx-xxx is het lange orderId nummer. Met de schuifbalk is de rest van de signature te zien)

Zou iemand mij willen helpen?

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
Public Function Bitvavo_OrderAnnuleren()

Dim oRequest As WinHttp.WinHttpRequest
Dim Signature As Variant
Dim Apikey As String
Dim secret As String
Dim sResult As String
Dim sURL As String
Dim sTime As String
Dim sDelOrderId As String
   
Apikey = "-kleine sleutel-"
secret = "-geheime sleutel-"
      
sTime = Bitvavo_Time
   
Signature = LCase(Base64_HMACSHA256(sTime & "DELETE/v2/order?market=BTC-EUR,orderId=xxx-xxx-xxx", secret))
   
sURL = "https://api.bitvavo.com/v2/order?market=BTC-EUR,orderId=xxx-xxx-xxx"

Set oRequest = New WinHttp.WinHttpRequest
With oRequest
    .Open "DELETE", sURL
    .SetRequestHeader "Content-Type", "application/json"
    .SetRequestHeader "Bitvavo-Access-Key", Apikey
    .SetRequestHeader "Bitvavo-Access-Signature", Signature
    .SetRequestHeader "Bitvavo-Access-Timestamp", sTime
    .SetRequestHeader "Bitvavo-Access-Window", "30000"
    .Send ""
    .WaitForResponse
    sResult = .ResponseText
End With
MsgBox (sResult)
   
End Function

[ Voor 6% gewijzigd door LouisGi op 02-10-2024 08:19 ]


Acties:
  • 0 Henk 'm!

  • LouisGi
  • Registratie: Oktober 2024
  • Laatst online: 09-10-2024
Probleem opgelost.
Het blijkt dat tussen order?market=BTC-EUR en orderId een & -teken moet staan en geen komma.
Dat had ik al eerder geprobeerd, maar toen kreeg ik telkens een foutmelding. Kennelijk was er toen ergens anders iets fout dat intussen werd opgelost.
In elk geval is het mij nu duidelijk dat de opties worden gescheiden door het &-teken.
Pagina: 1