Binance API-serie Deel I - Spot Trading met Postman
StartpaginaArtikelen

Binance API-serie Deel I - Spot Trading met Postman

Geavanceerd
3w ago
13m

Inleiding

Het kunnen implementeren van een API bij het handelen in cryptocurrency, kan een zee aan mogelijkheden bieden als het om het betreden en verlaten van posities gaat. Met relatieve basiskennis van coderen, kan je aansluiten op de backend van een exchange om je handelsstrategieën te automatiseren. Door de website zelf links te laten liggen, kan je veel sneller je strategie managen met behulp van krachtige applicaties.

Het doel van dit artikel is om je kennis te laten maken met de REST API van Binance en hoe je deze moet gebruiken. In theorie zou je na dit artikel in staat moeten zijn om marktinformatie in combinatie met je posities realtime op te vragen en hiermee verschillende soorten orders kan plaatsen.

In dit artikel gebruiken we Postman om met de exchange te communiceren. Maak je overigens geen zorgen: we lopen geen risico over echt geld.


Benodigdheden

Testnet- keys

Voor onze doeleinden zullen we testnet gaan gebruiken. Dit geeft ons de mogelijkheid om wat te uit te proberen met geld zonder echte waarde. Ze werken op precies dezelfde manier als echte coins en tokens, dus zodra je tevreden bent met je kennis over de API, kan je deze echt gaan gebruiken tijdens het handelen.


  1. Om te beginnen ga je naar het Spot Test Network.
  2. Om hier toegang tot te krijgen, moet je inloggen met een GitHub-account. Maak deze eerst aan als je dat nog niet al hebt gedaan.
  3. Klik vervolgens op Authenticate en log in via GitHub.
  4. Onder API-sleutels staat vermeld dat je nog geen sleutels hebt geregistreerd. Klik op Generate HMAC_SHA256 Key om deze te maken.
  5. Geef de keys in het volgende scherm een label. Dit mag elke naam zijn die je wil en klik vervolgens op Generate
  6. Je krijgt vervolgens twee keys te zien: de API-key en de Secret Key. Het is belangrijk dat je deze overneemt en ergens opslaat. Als je dat niet doet, moet je het proces later over doen namelijk. We raden je aan ze op te slaan in een notitie-app van je computer zodat je ze later gemakkelijk kan kopiëren.
Opmerking: het labelen van de keys zal absoluut lonen als je deze op een echte exchange gaat toepassen. Je account kan namelijk meerdere keys hebben met verschillende rechten. Als je meerdere handelsrobots gebruikt, is het makkelijker om verschillende keys met beschrijvende labels te gebruiken. Zo kan je gemakkelijker rechten beheren of afzonderlijke keys verwijderen zonder alle bots te wijzigen.


Postman downloaden en installeren

Postman is een API-samenwerkingsplatform. Het is een perfecte springplank voor een beginner: we hebben hiermee namelijk toegang tot de collectie Binance-requests die we kunnen testen zonder dat we ook maar één regel code hoeven te schrijven.

Het programma is beschikbaar voor Mac, Windows en Linux. Ga naar de downloadpagina en download het .zip-bestand.

Zodra je dat hebt gedaan, zoek je het op in de bestandsverkenner en installeer je het. Start vervolgens de applicatie op en we zijn klaar om echt te beginnen! Je ziet hier dat je een account kan maken om in te loggen, maar dat is niet per se nodig. Als je die stap wil overslaan, selecteer je dit gewoon in de optie onderaan het venster.


De omgeving instellen

In dit stadium zou je een interface moeten hebben die er ongeveer als volgt uitziet.



Eerst moeten we onze omgeving creëren. Dit is een manier voor ons om variabelen toe te voegen aan de set verzoeken waarmee we zullen gaan werken. Om dat te kunnen doen, moeten we eerst wat informatie uit de Binance GitHub-repository halen. Deze kan je hier vinden en download het .zip-bestand.



Het downloaden duurt niet lang. Zoek het op in je bestandsverkenner en pak het vervolgens uit. Hierna kunnen we teruggaan naar Postman.



Klik op het tandwielpictogram in de rechterbovenhoek (zoals hierboven geïllustreerd). Je krijgt hierna een Manage Environments popup te zien. 
  1. Selecteer Import en ga naar de map die je zojuist hebt uitgepakt (binance-postman-api). 
  2. Voer het in en ga vervolgens de environments folder in.
  3. Je ziet hier twee bestanden (één voor mainnet en één voor testnet). Degene die we nodig hebben is binance_com_spot_testnet_api.postman_environment.json. Zorg ervoor dat je de juiste hebt, want de keys werken niet met de andere.



We zijn er bijna. Klik op de Binance Spot Testnet API en je ziet de onderstaande variabelen. Bewerk de twee rood omlijnde parameters door de eerder opgeslagen key te plakken. Klik op update en verlaat de pop-up.



Laat op dit scherm de timestamp- en signature velden leeg. Deze twee waarden worden automatisch aangemaakt bij ieder nieuw verzoek.

We hoeven nu nog maar één ding te doen. Rechts van het tandwielpictogram waarop we hebben geklikt om de omgeving in te stellen, zie je een dropdown-menu met de tekst No Environment. Klik erop en selecteer Binance Spot Testnet API.


De collectie importeren

Nu zullen we de collectie importeren. Dit is een ruim assortiment aan verzoeken die het zware werk voor ons zullen doen wanneer we calls plaatsen. Om het in onze omgeving te kunnen laden doe je het volgende:

  1. Klik op Import in de linkerbovenhoek.
  2. Selecteer in de pop-up onder het tabblad File, de optie Upload Files.
  3. Ook nu zoeken we naar de binance-postman-api-map. Lokaliseer en open het.
  4. Voer deze keer collecties in de submap in.
  5. Ook hier zijn weer twee bestanden. De ene is bestemd voor het werken met de futures-API. Maar we zullen de eerste gaan gebruiken, dus je moet het bestand binance_spot_api_v1.postman_collection.json selecteren.
  6. Je zal hierna een bevestigingsscherm moeten zien dat de import identificeert als Postman Collection-formaat. Selecteer vervolgens Import.

Onder de tab Collections aan de linkerkant van het venster zie je nu dat we een map hebben met meer dan 100 verzoeken. Gefeliciteerd! We zijn nu echt klaar om te beginnen. In de volgende sectie zullen we wat dieper in gaan op de soorten verzoeken die we kunnen plaatsen.


Verzoeken plaatsen

Als je de mappen onder het tabblad Collections uitvouwt, zul je zien dat we een aantal verschillende verzoeken kunnen plaatsen. Aan de hand van een kleurcodering kan je herkennen dat er drie soorten methoden zijn die we kunnen gebruiken:


  • GET: De GET-methode wordt gebruikt om het een en ander van een server op te halen. We gebruiken dit om informatie te vinden over het saldo op het account, activaprijzen, enz.
  • POST: Doorgaans gebruiken we de POST-methode om informatie op een server te creëren. Dit is bijvoorbeeld nodig bij het plaatsen van orders, bij opnameverzoeken, etc.
  • DELETE: De DELETE-methode is een verzoek aan de server om informatie te verwijderen. Dit is bruikbaar bij bijvoorbeeld het annuleren van orders.


Zoek de lijst met symbolen en de handelsregels op

Het is nu tijd om ons eerste verzoek te plaatsen! We verkrijgen hier de symbolen die we op de exchange kunnen verhandelen en de handelsregels:

GET /exchangeInfo


Deze heeft geen aanvullende parameters. Je kunt deze simpelweg kopiëren en in je adresbalk plakken en voor een reactie. Maar voor verzoeken waar we verschillende parameters in opnemen, maakt Postman het gemakkelijk om ze in te zien en aan te passen.

Selecteer Market > Exchange Information om dit verzoek in te laden. Er verschijnt een tabblad zoals hieronder:



Verder hoeven we hier niks mee te doen, dus ga je gang en klik op Send. Je krijgt dan de volgende reactie te zien:



In het bovenste gemarkeerde gedeelte zie je belangrijke informatie:

  • de status van de reactie (200 betekent dat we succesvol zijn geweest, 400-499 betekent dat we tegen een probleem zijn aangelopen)
  • de tijd die nodig is geweest om de reactie te ontvangen (minder dan een seconde)

  • de grootte van de reactie (~ 22 KB).


In het tweede vak staat de bulkinformatie van de reactie. Het is enigszins opgefleurd, zodat het wat rustiger is voor de ogen. Dit deel bevat de informatie over de trade zelf, evenals de paren die je kunt verhandelen met hun minimum / maximum bedragen.

Het lijkt van een afstand veel informatie, maar dit format maakt het gemakkelijker om programmatisch te werken. Wanneer je scripts schrijft met als doel er mee te communiceren, kan je eenvoudig specifieke eigenschappen van specifieke elementen uit de reactie kiezen.


Controleren van het saldo van het account

Laten we eens een kijkje nemen naar welke middelen we bezitten en hoeveel hiervan beschikbaar is:

GET /account
Deze kunnen we vinden bij Trade> Account Information. Als je hier op klikt zie je een vergelijkbare lay-out als de vorige. Je zal ook merken dat we twee nieuwe variabelen hebben: timestamp en signature. De handtekening is een veiligheidsmaatregel. Omdat we nu om gevoelige informatie vragen, zal nodig zijn om te kunnen bewijzen dat we de accounthouder zijn. 
Het tijdstempel vertelt de server wanneer het verzoek is verzonden. Omdat netwerken soms onbetrouwbaar kunnen zijn of met downtime te maken kunnen krijgen, kan de server ons verzoek daardoor later ontvangen dan wij voor ogen hadden. Als er te veel tijd is verstreken, wordt het verzoek namelijk afgewezen. Je kan aangeven hoe lang je wilt wachten met de parameter recvWindow, die standaard op 5000 milliseconden staat ingesteld.
Postman verzorgt voor ons de aanmaak van de beide velden. Klik op send en je krijgt een reactie. Onder balances zou je zes assets moeten zien - BNB, BTC, BUSD, ETH, LTC en TRX. Het saldo wordt onderverdeeld in free en locked. Aangezien we nog niks hebben vergrendeld zullen de assets allemaal beschikbaar moeten zijn.

Gefeliciteerd met je zojuist verkregen (niet-bestaande) rijkdom!


Hoe de actuele prijs voor een symbool te krijgen

We kunnen de actuele prijs van een asset op verschillende manieren verkrijgen. Misschien is de eenvoudigste methode via het volgende verzoek:

GET /api/v3/ticker/24hr
Zoals je wellicht al verwacht, geeft dit ons de informatie over de activaprijzen van de afgelopen vierentwintig uur. Je vindt dit onder Market > 24hr Ticker Price Change Statistics. Het standaardpaar is BTCUSDT
Je kan dit meteen verzenden om de prijsinformatie te zien. Je kan ook het symbool wijzigen (in BNBBUSD, LTCUSDT, etc.), of je kan de variabele uitschakelen om gegevens voor 40 verschillende paren op te halen.
We hebben ook een eenvoudigere call (Market > Symbol Price Ticker) die de actule prijs retourneert waarop een asset wordt verhandeld:
GET /api/v3/price

Net als bij het vorige symbool kan je de variabele wijzigen of volledig verwijderen waardoor je de actuele prijs voor alle symbolen krijgt.


Checken van Orderboekdiepte

Orderboekdiepte (ook wel marktdiepte of depth of market - DOM genoemd) kan ons veel inzicht geven in de markt. We zullen deze call plaatsen om de informatie op te halen:

GET api/v3/depth

Wanneer we dit verzenden met de standaardwaarden (Market > Order Book), krijgen we een reactie terug dat ons meer vertelt over de geplaatste biedingen voor BTCUSDT. De testnet-server geeft niet zoveel data als de echte server, dus hieronder is een screenshot van wat je zou kunnen verwachten:



In het gemarkeerde gedeelte hierboven zien we het eerste bod. Aangezien we het boek voor BTCUSDT bekijken, is het hoogste cijfer de prijs die iemand bereid is te betalen voor jouw BTC. Daaronder staat het aantal dat willen kopen. Dit houdt in dat deze bestelling 0,999 BTC vraagt tegen een tarief van 9.704,65 USDT per BTC. Als we naar beneden zouden blijven scrollen, dan zien we dat aanbiedingsprijs zal dalen, wat neerkomt op kopers die minder zouden betalen.

Het bovenste bod is natuurlijk het meest aantrekkelijkst als je op zoek bent een goede prijs. Dit zal niet altijd ook in werkelijkheid zo blijken, als je bijvoorbeeld 3 BTC op de markt wilt brengen, kan je slechts 0.999 BTC verkopen voor deze prijs. Je zal vervolgens de opvolgende (goedkopere) aanbiedingen moeten accepteren totdat de bestelling volledig is gevuld.



Blijf scrollen en je zult de vraag-sectie zien. Deze zijn vergelijkbaar met biedingen, behalve dat ze bestellingen vertegenwoordigen om BTC te verkopen voor USDT. 


Een testorder plaatsen

We zullen nu een test order plaatsen.

POST api/v3/order/test
Hoewel we alleen testnet-fondsen gebruiken, plaatst dit verzoek niet echt een bestelling. Het kan handig zijn om bestellingen te testen voordat ze daadwerkelijk worden verzonden. Je vindt het onder Trade> Test New Order (TRADE).



Zoals je ziet, zijn er veel meer parameters betrokken. Laten we degene die aangevinkt zijn eens nader bekijken:


  • symbool – deze zijn we al eens eerder tegengekomen. Dit is het paar dat u wilt verhandelen.
  • side - hier bepaal je of je wil kopen of verkopen. Met het BTCUSDT-paar geeft BUY aan dat je BTC voor USDT wil kopen, terwijl SELL daarentegen BTC voor USDT verkoopt.
  • type - het type bestelling dat je wil plaatsen. Mogelijke waarden (hierbeschreven):
    • LIMIT
    • MARKET
    • STOP_LOSS
    • STOP_LOSS_LIMIT
    • TAKE_PROFIT
    • TAKE_PROFIT_LIMIT
    • LIMIT_MAKER
  • timeInForce– deze parameter geeft weer hoe je wil dat de order wordt uitgevoerd:
    • GTC (good till canceled) - misschien wel de meest populaire configuratie, GTC zorgt ervoor dat je bestelling geldig blijft totdat deze is gevuld of tot jij deze zelf annuleert.
    • FOK (fill or kill) - FOK instrueert de exchange om een bestelling in één keer uit te voeren. Als dit niet mogelijk is, dan wordt de bestelling onmiddellijk geannuleerd.
    • IOC (immediate or cancel) - de gehele of een deel van de order moet onmiddellijk worden uitgevoerd of het wordt geannuleerd. In tegenstelling tot FOK worden de bestellingen niet geannuleerd als ze gedeeltelijk kunnen worden ingevuld.
  • quantity - eenvoudigweg de hoeveelheid van het asset dat je wil kopen of verkopen.
  • price - de prijs waartegen je wil verkopen. Voor het BTCUSDT-paar wordt dit uitgedrukt in USDT.
  • newClientOrderId - een ID voor de bestelling. Dit is geen verplicht veld, maar je kan het instellen waardoor je later makkelijker kunt zoeken. Dit wordt overigens willekeurig gegenereerd door de exchange.
Goed! Laten we nu een test order plaatsen. We gaan voor de automatisch gegenereerde waarden: een limietorder om 0,1 BTC te verkopen voor USDT tegen $ 9000. Klik op Send. Als dit is gelukt, krijgen we {} als reactie. 

 

Een order plaatsen

Tijd om een echte nepbestelling te plaatsen

POST /api/v3/order
Navigeer naar Trade> New Order. Je zal inmiddels al beter bekend zijn met testorders, dus deze parameters zullen geen verrassing meer moeten zijn. We zullen alle waarden laten staan zoals ze zijn, maar aangezien we permabulls zijn, zullen we de verkoopprijs veranderen in $ 40.000. Pas de prijswaarde aan om dit weer te geven. Druk vervolgens op Send.

De reactie retourneert vervolgens een berg info over de order als deze succesvol is.


Controleer de status van een openstaande order

We hebben een bevestiging gekregen dat de bestelling in de vorige sectie is geplaatst, maar wat als we deze later opnieuw willen controleren? We hebben hiervoor meerdere requests tot onze beschikking.

GET /api/v3/openOrders
Je zal zien onder Trade> Current Open Orders (USER_DATA). BTCUSDT standaard is geselecteerd. Als je op Send klikt, ontvang je al je openstaande BTCUSDT-bestellingen (tot nu toe zou je alleen die we eerder hebben ingesteld moeten zien). Je kan er ook voor kiezen om geen symbool op te geven, waardoor alle openstaande orders worden geretourneerd.
GET /api/v3/allOrders
Trade > All Orders (USER_DATA) geeft een overzicht van alle order, maar niet alleen de openstaande. Hier moet een symbool opgeven worden. orderId, startTime, endTime en limit zijn optionele parameters die kunnen helpen bij het verfijnen van de zoekopdracht. We zullen ze nu niet gebruiken, dus schakel deze voor nu uit. Klik op <0>Send en je ziet hetzelfde responce als eerder. Als je afgehandelde of geannuleerde orders had, dan zou je deze hier ook moeten zien. 


Tot slot kunnen we een specifieke bestellingen opvragen met:

GET /api/v3/order
Dit vindt je onder Trade> Query Order (USER_DATA). Je moet de orderId of de origClientOrderId opgeven (de optionele tag 'newClientOrderId' waarmee je bestellingen kunt toevoegen). Schakel orderId uit. Voor origClientOrderId geven we de standaardtag van eerder - "my_order_id_1". Vul het veld in en klik op Send om een responce te krijgen.


Annuleren van een order

Na verloop van tijd kunnen we besluiten dat het doel van $ 40.000 iets te optimistisch is en we deze dus willen annuleren. In dat geval gebruiken we:

DELETE /api/v3/order
Onder Trade > Cancel Order kunnen we de order annuleren. Haal het vinkje weg bij orderId en newClientOrderId en voer "my_order_id_1" in als de waarde voor origClientOrderId.
Wanneer u dit verzoek verstuurt, wordt de bestelling geretourneerd. Als je naar 'status' scrolt, zie je dat het inderdaad is geannuleerd. Om dit te bevestigen, gebruikt je het GET /api/v3/openOrders -eindpunt opnieuw (dit geeft een lege lijst) of GET /api/v3/order met de origClientOrderId.


Plaats een bestelling die onmiddellijk wordt gevuld

Onze vorige bestelling werd niet uitgevoerd omdat het een limietorder was die alleen zou worden geactiveerd wanneer de BTC-prijs $ 40.000 bereikte. Met een marktorder zeggen we in feite 'kopen / verkopen tegen de prijs waarvoor het asset momenteel wordt verhandeld'. Dit wordt daarom ook onmiddellijk gevuld.
Hiervoor moeten we teruggaan naar Trade > New Order. We zullen het reactietype (newOrderRespType) demonstreren, wat in feite een parameter is die we kunnen aanpassen, afhankelijk van het antwoord dat we van de server willen krijgen. Er zijn hier drie opties: ACK, RESULT of FULL - u kunt hier voorbeelden van elke reactie zien. We kiezen voor nu voor ACK, wat ons een bevestiging geeft dat de bestelling is ontvangen.

Hieronder kan je zien dat we op het punt staan een marktorder te plaatsen om BNB voor BUSD te verkopen tegen de huidige marktprijs.



Merk op dat het antwoord ons maar minimale informatie geeft:



Je kan controleren of de bestelling is gevuld met het /api/v3/allOrders -eindpunt.


De transacties controleren

Laten we tot slot kijken naar het eindpunt voor het controleren van de transacties:

GET /api/v3/myTrades
Deze bevindt zich onder Trade> Account Trade List (USER_DATA). Hiermee kan elke transactie op een bepaald symbool gecontroleerd worden. Als je alle transacties voor het standaardsymbool (BTCUSDT) wilt zien, schakel je startTime, endTime en fromId uit. Het antwoord levert tot een maximum van 500 transacties op. Pas simpelweg limit aan als je er meer wilt zien.


Debuggen met Postman

In Postman is het mogelijk om het onbewerkte HTTP-verzoek en antwoord verder inzichtelijk te maken.



Dit menu opent de Postman-console, die de details van elk verzoek weergeeft.



Slotwoord

Het doel van deze handleiding is om je kennis te laten maken met de Binance API zonder dat je een enkele regel code te schrijven. Als je het bovenstaande onder de knie hebt, dan zou je nu een idee moeten hebben hoe we informatie kunnen opvragen en indienen.

In de volgende delen van deze serie introduceren we enkele basiscoderingsconcepten waarmee we het kopen en verkopen van cryptocurrencies en andere digitale activa verder kunnen automatiseren. 
Mocht je nog vragen hebben? Ga naar ons groeiende Binance Developer Community-forum of bekijk de documentatie.