Binance API Serisi 1. Bölüm – Postman ile Spot Alım Satım Yapmak
Binance API Serisi 1. Bölüm – Postman ile Spot Alım Satım Yapmak
Ana sayfaMakaleler

Binance API Serisi 1. Bölüm – Postman ile Spot Alım Satım Yapmak

İleri Seviye
3w ago
13m

Giriş

Kripto para alım satımı için API’leri anlamak ve kullanmak, pozisyonlara girmek ve çıkmak anlamında yepyeni bir olasılıklar dünyasının kapısını açabilir. Kodlamaya yönelik az bir bilgiyle, alım satım stratejinizi otomatik hale getirmek için borsanın arka yüzüne girebilirsiniz. Web sitesini kullanmak zorunda kalmadığınızdan yüksek performanslı uygulamalar için eşleme motoruna çok daha hızlı bir yoldan erişebilirsiniz.

Bu serinin amacı, Binance’in REST API’sini size tanıtmak ve API ile nasıl etkileşim kuracağınızı öğretmektir. Makalenin sonunda, piyasalar ve pozisyonunuz hakkında bilgi sorgulama becerinize yönelik kendinizden emin hale gelmeli ve farklı türlerde emirler verebilmelisiniz.

Bu makalede borsayla iletişim kurmak için Postman’ı kullanacağız. Merak etmeyin, gerçek fonlarımızı riske atmayacağız.


Ön koşullar

Test ağı anahtarları

Bu makale için test ağını kullanacağız. Bu bize deneme yapabilmemiz için gerçek hayatta değeri olmayan bir miktar fon sağlayacak. Deneme fonları da aynı gerçek coinler ve tokenlar gibi çalışır, bu nedenle API kullanma konusunda rahat hissetmeye başladığınızda gerçek fonlarla işlem yapmaya başlayabilirsiniz.


  1. Spot Test Ağına giderek başlayın.
  2. Buraya erişebilmek için bir GitHub hesabıyla giriş yapmanız gereklidir. Henüz hesabınız yoksa bir hesap oluşturun.
  3. Kimlik Doğrulamayı seçin ve GitHub üzerinden giriş yapın.
  4. API Anahtarlarının altında, henüz kayıtlı anahtarlarınızın olmadığı bilgisi sizinle paylaşılacaktır. Bir çift anahtar yaratmak için HMAC_SAH256 Anahtarı Oluştur düğmesine tıklayın.
  5. Bir sonraki ekrandan anahtarlara isim verin. İstediğiniz ismi belirledikten sonra Oluştur düğmesine basın. 
  6. Size iki anahtar sunulacaktır: API Anahtarı ve Gizli Anahtar. Anahtarları bu aşamada kaydetmeniz önemlidir. Kaydetmezseniz, anahtar yaratma sürecini tekrar başlatmanız gerekir. Daha sonra kolayca kopyalayıp yapıştırabilmeniz için bu anahtarları cihazınızın notlar uygulamasında saklamanızı öneririz.
Not: Gerçek borsayı kullanırken farklı anahtarları yönetebilmek için anahtarlara isim vermek faydalı olacaktır. Hesabınız farklı izinlere sahip birden fazla anahtara sahip olabilir. Birden fazla alım satım botu yönetiyorsanız ayırt edici isimlere sahip farklı anahtarlar kullanmak izinleri yönetmenizi ya da tüm botlarınızı değiştirmeden tek bir anahtarı silmenizi kolaylaştırır.


Postman'ı indirmek ve kurmak

Postman bir API İş Birliği platformudur. Bizim için harika bir başlangıç noktasıdır – tek bir satır bile kod yazmak zorunda kalmadan test edeceğimiz Binance istekleri koleksiyonuna erişebiliriz.

Program, Mac, Windows ve Linux’ta kullanılabilir. İndirmeler sayfasına giderek .zip dosyasını indirin.

İndirme işlemini tamamladıktan sonra, dosya tarayıcınızda bu dosyayı bulun ve programı kurun. Uygulamayı çalıştırın ve artık hazırsınız! Giriş yapmak için bir hesap da oluşturabilirsiniz, fakat bunu yapmak zorunda değilsiniz. Bu adımı geçmek isterseniz, sayfanın altından bu seçeneği tıklayın.


Ortamı yapılandırmak

Bu aşamada, aşağıdakine benzer bir arayüzle karşılaşacaksınız.



İlk olarak ortamı yapılandırmak istiyoruz. Bu, kullanacağımız istekler grubuna değişkenler ekleyebilmemizin bir yoludur. Bunu yapmak için ilk olarak Binance GitHub deposundan bazı bilgiler almamız gereklidir. Buradan .zip dosyasını indirin.



İndirme işlemi uzun sürmeyecektir. Dosyayı, dosya tarayıcınızda bulun ve açın. Artık, Postman’a geri dönebiliriz.



Sağ üst köşedeki ayarlar simgesine tıklayın (yukarıdaki resimde kırmızıyla işaretli yer). Karşınıza bir Manage Environments (Ortamı Yönet) iletişim kutusu çıkacaktır. 
  1. Import’u (İçe Aktar) seçin ve biraz önce çıkardığınız dosyaya ulaşın (binance-postman-api). 
  2. Bu dosyaya ve daha sonra da environments (ortamlar) klasörüne girin.
  3. Şimdi iki dosya göreceksiniz (biri ana ağ, biri de test ağı için). Bizim istediğimiz binance_com_spot_testnet_api.postman_environment.json olan. Doğru olanı seçtiğinizden emin olun çünkü anahtarlarımız diğeriyle çalışmayacaktır.



Neredeyse bitti. Binance Spot Testnet API’sine (Binance Spot Test Ağı API) tıkladığınızda aşağıda değişkenleri görebilirsiniz. Kırmızıyla işaretli parametreleri daha önce kaydettiğiniz anahtarları yapıştırarak düzenleyin. Update’e (güncelle) tıklayın ve iletişim kutusundan çıkın.



Bu ekranda, timestamp (zaman damgası) ve signature (imza) alanlarını boş bırakın. Bu iki değer, her bir istekle otomatik olarak yaratılacaktır.

Yapmanız gereken son bir şey daha var. Daha önce ortamı yapılandırmak için tıkladığımız ayarlar simgesinin sağında, şu anda No Environment (Ortam Yok) yazan bir açılır menü göreceksiniz. Buna tıklayın ve Binance Spot Testnet API’sini seçin.


Koleksiyonu içe aktarmak

Şimdi koleksiyonu içe aktaracağız. Koleksiyon, çağrı yaptığımızda asıl ağır işi bizim yerimize yapan birçok farklı istekten oluşan bir gruptur. Koleksiyonu ortama eklemek için:

  1. Sol üst köşedeki Import’a (İçe Aktar) tıklayın.
  2. Açılır pencerede, File (Dosya) sekmesinin altından Upload Files’ı (Dosyaları Yükle) seçin.
  3. Yine binance-postman-api klasörünü arıyoruz. Bu klasörü bulun ve açın.
  4. Bu kez, alt dizindeki koleksiyonlara  girin.
  5. Burada da iki dosya göreceksiniz. Biri vadeli işlemler API’si fakat biz spot olanla çalışacağız, bu yüzden binance_spot_api_v1.postman_collection.json dosyasını seçin.
  6. İçe aktarmanın Postman Koleksiyonu formatında olduğunu belirten bir onaylama ekranı göreceksiniz. Import’u (İçe Aktar) seçin.

Pencerenin solundaki Collections (Koleksiyonlar) sekmesinin altında, 100’den fazla istek içeren bir klasör olduğunu göreceksiniz. Tebrikler! Artık hazırsınız. Bir sonraki bölümde, yapabileceğimiz istek türlerini inceleyeceğiz.


İstek Yapma

Koleksiyonlar sekmesinin altındaki klasörleri genişletirseniz, yapabileceğiniz farklı istek türleri olduğunu görebilirsiniz. Renk kodlamasından, kullanabileceğiniz üç yöntem türü olduğunu anlayabilirsiniz:


  • GET (AL): GET yöntemi, sunucudan bir şeyler almak için kullanılır. Bunu, hesap bakiyesi, varlık fiyatları, vb. konular hakkında bilgi almak için kullanacağız.
  • POST (YAYINLA): POST yöntemi genellikle sunucu üzerinde bilgi yaratmak için kullanılır. Emir vermek, çekim talep etmek, vb. konular için gereklidir.
  • DELETE (SİL): DELETE yöntemi, sunucunun bilgi silmesi için bir istektir. Emir iptal etmek için kullanışlıdır.


Sembol listesini ve alım satım kurallarını bulma

İlk isteğimizi yapmanın zamanı geldi! Borsa üzerinde alım satım yapabileceğimiz sembolleri ve alım satım kurallarını alacağız:

GET /exchangeInfo


Bunda ek parametreler yoktur – yukarıdaki isteği kopyalayarak adres çubuğunuza yapıştırabilir ve bir yanıt alabilirsiniz. Fakat, birkaç parametre ekleyeceğimiz isteklerde, Postman bunları görmemizi ve değiştirmemizi kolaylaştırır.

Bu isteği yüklemek için, Market (Piyasa) > Exchange information (Borsa Bilgisi) sekmelerini seçin. Aşağıdakine benzer bir sekme açılacaktır:



Burada başka bir şey yapmamıza gerek yok, devam edin ve Send (Gönder) düğmesine basın. Daha sonra bir yanıt alacaksınız:



En üstte işaretlenen bölümde önemli bilgiler göreceksiniz:

  • Yanıtın durumu (200 başarılı olduğumuz, 400-499 ise bir sorunla karşılaştığımız anlamına gelir)
  • Yanıtın ne kadar sürede geldiği (bir saniyeden az)

  • Yanıtın büyüklüğü (~22KB).


İkinci kutu yanıt kümesidir. Pretty-print formatında yazıldığı için okuması biraz daha kolaydır. Burada borsanın kendisinin yanı sıra alıp satabileceğiniz çiftler ve bunların minimum/maksimum miktarları hakkında bilgiler yer alır.

Birçok bilgi varmış gibi gözükür, ama format programlanabilir bir biçimde çalışmayı çok kolay hale getirir. Etkileşim kurmak için komut dizileri yazarken, yanıtın içinden belirli öğelerin belirli özelliklerini rahatlıkla seçebilirsiniz.


Hesap bakiyesini kontrol etme

Hangi varlıklara sahip olduğumuzu ve bu varlıkların miktarlarını kontrol edelim:

GET /account
Bunu, Trade (Al-Sat) > Account Information (Hesap Bilgisi) altında bulabilirsiniz. Bu sekmeye tıkladığınızda daha öncekine benzer bir düzenleme görebilirsiniz. Fakat bu sefer iki yeni değişkenimiz daha vardır: Timestamp (zaman damgası) ve signature (imza). İmza, bir güvenlik önlemidir. Şu anda hassas bilgilere ulaşmaya çalıştığımız için hesap sahibi olduğumuzu kanıtlar. 
Zaman damgası, sunucuya isteğin ne zaman gönderildiğini gösterir. Ağlar güvenilir olamayabileceği ya da kimi zaman çalışmıyor durumda olabileceği için isteğimiz sunucuya çok daha geç bir zamanda ulaşabilir. Aradan çok zaman geçtiyse sunucu isteği reddeder. recvWindow parametresiyle ne kadar beklemek istediğinizi belirleyebilirsiniz. Varsayılan ayarda bu süre 5000 milisaniyedir.
Postman, bu iki alanı da bizim yerimize doldurur. Gönder düğmesine tıkladığınızda bir yanıt alırsınız. Bakiyeler altında, altı varlık görebilirsiniz – BNB, BTC, BUSD, ETH, LTC ve TRX. Bakiyeler free (serbest) ve locked (kilitli) olarak ayrılmıştır. Henüz hiçbir varlığımızı kilitlemedik, bu nedenle varlıkların tümü serbest olarak gözükmelidir.

Yeni keşfettiğiniz (ve aslında olmayan) birikimleriniz için tebrik ederiz!


Sembol için güncel fiyatı alma

Bir varlığın güncel fiyatını farklı yollardan alabiliriz. Muhtemelen en kolay yöntem ise şu isteği yapmaktır.

GET /api/v3/ticker/24hr
Tahmin edebileceğiniz gibi bu istek son yirmi dört saat için varlık fiyatları hakkında bize bilgi sunar. İsteğe, Market (Piyasa) > 24hr Ticker Price Change Statistics (24s Kısa Kod Fiyat Değişimi İstatistikleri) sekmelerinden ulaşabilirsiniz. Sembol değişkeni olarak karşımıza ilk çıkan, varsayılan çift olan BTCUSDT olacaktır. 
Fiyat bilgisinin bir dağılımını görmek için doğrudan bu isteği gönderebilirsiniz. Bunun dışında, sembolü değiştirebilir (BNBBUSD, LTCUSDT vb. olarak) ya da 40 çiftin verilerine ulaşmak için değişken seçimini kaldırabilirsiniz.
Ayrıca bir varlığın işlem gördüğü güncel fiyatı veren ve Market (Piyasa) > Symbol Price Ticker (Sembol Fiyat Kısa Kodu) sekmelerinden ulaşabileceğiniz daha basit bir çağrı da mevcuttur:
GET /api/v3/price

Daha önceki gibi sembol değişkenini değiştirebilir ya da tüm sembollerin son fiyatına ulaşmak için seçiminizi kaldırabilirsiniz.


Güncel emir defteri derinliğini kontrol etme

Emir defteri derinliği de (piyasa derinliği ya da DOM olarak da bilinir) bize piyasa hakkında birçok bilgi verebilir. Bazı faydalı bilgiler getirecek bir çağrı yapacağız:

GET api/v3/depth

Bu çağrıyı varsayılan değerlerle yaptığımızda - Market (Piyasa) > Order Book (Emir Defteri), BTCUSDT için alış ve satış fiyatları hakkında bilgi veren bir yanıt alırız. Test ağı sunucusu gerçek sunucu kadar çok bilgi vermez. Bu nedenle, gerçek ortamda neyle karşılaşacağınızı aşağıdaki ekran görüntüsünden görebilirsiniz:



Yukarıda kırmızıyla işaretlenen bölümde ilk alış fiyatını görebilirsiniz. BTCUSDT emir defterine baktığımız için, üstteki sayı bir kişinin sizin BTC’leriniz için ödemeyi kabul ettiği fiyattır. Alttaki sayı ise bu kişinin almak istediği BTC miktarıdır. Dolayısıyla bu bilgi bize emrin, BTC başına 9704,65 USDT’den 0,999 BTC almak istediğini söyler. Aşağıya doğru devam edersek teklif fiyatının düştüğünü görürüz – bu fiyatlar daha az ödeme yapmak isteyen alıcıları temsil eder. 

En yukarıdaki teklif, daha çok para kazanmak istiyorsanız doğal olarak sizin için en çekici teklif olacaktır. Bununla birlikte, örneğin 3 BTC’lik bir piyasa satışı yapmaya çalışıyorsanız, en iyi fiyattan yalnızca 0,999 BTC satabilirsiniz. Emrinizin tamamı doldurulana kadar daha sonraki (daha ucuz) teklifleri de kabul etmeniz gerekecektir.



Aşağıya kaydırmaya devam ettiğinizde satış fiyatlarını görebilirsiniz. Bunlar da işlevsel olarak alış fiyatlarına benzerdir, fakat USDT karşılığında BTC satan emirleri temsil eder.  


Test emri verme

Şimdi bir test emri yayınlayacağız.

POST api/v3/order/test
Yalnızca test ağı fonlarını kullanıyor olsak da bu istek gerçekte bir emir vermez. Bu işlem, emirleri göndermeden önce test etmek için kullanışlıdır. Test emrine, Trade (Alım satım) > Test New Order (Yeni Emri Test Et) (TRADE) sekmelerinden ulaşabilirsiniz.



Burada daha fazla parametrenin olduğunu görebilirsiniz. İşaretlenmiş olanlardan teker teker bahsedelim:


  • sembol – bununla daha önce de karşılaştık. Bu sizin işlem yapmak istediğiniz çifttir.
  • taraf – buradan, ALIM mı yoksa SATIŞ mı yapmak istediğinizi belirleyebilirsiniz. BTCUSDT çiftinde ALIM, USDT karşılığında BTC almak istediğiniz, SATIŞ ise USDT karşılığında BTC satmak istediğiniz anlamına gelir.
  • tür – göndermek istediğiniz emrin türü. Olası değerler şunlardır (emir türleri hakkında ayrıntılı bilgiye buradanulaşabilirsiniz):
    • LIMIT (limit)
    • MARKET (piyasa)
    • STOP_LOSS (kayıp durdurma)
    • STOP_LOSS_LIMIT (kayıp durdurma limit)
    • TAKE_PROFIT (kar al)
    • TAKE_PROFIT_LIMIT (kar al limit)
    • LIMIT_MAKER (limit yapıcı)
  • timeInForce– bu parametre emrinizin nasıl çalışmasını istediğinizi ifade eder:
    • GTC (iptale kadar geçerli) – Muhtemelen en popüler düzen olan GTC, emrinizin tamamen gerçekleştirilene ya da siz iptal edene kadar geçerli olmasını sağlar.
    • FOK (gerçekleşmezse iptal et) – FOK, borsaya bir emrin tamamen gerçekleştirilmesi talimatını verir. Borsa bunu yapamıyorsa, emir hemen iptal edilir.
    • IOC (kalanı iptal et) – emir hemen kısmen ya da tamamen gerçekleştirilmelidir yoksa iptal edilir. FOK’un aksine, emirler kısmen gerçekleştirilebiliyorsa iptal edilmez.
  • adet – bu sizin almak ya da satmak istediğiniz varlık adedidir.
  • fiyat – satış yapmak istediğiniz fiyattır. BTCUSDT çifti için değer USDT üzerinden temsil edilir.
  • newClientOrderId – emir için bir tanımlayıcıdır. Bu doldurulması zorunlu bir alan değildir, fakat daha sonra sorgulama yapmayı daha kolay hale getirecek bir tanımlayıcıyı buraya girebilirsiniz. Aksi takdirde, burası borsa tarafından rastgele doldurulur.
Tamam! Haydi şimdi bir test emri oluşturalım. Otomatik olarak yaratılmış değerleri kullanacağız: USDT karşılığında 9.000 USD’den 0,1 BTC satmak için bir limit emri. Send’e (Gönder) basın. Eğer emir başarılı olduysa yanıt olarak {} alırız.  

 

Gerçek bir emir verme

Sıra gerçek bir sahte emir vermede. 

POST /api/v3/order
Trade (Alım Satım) > New Order (Yeni Emir) sekmelerine gidin. Artık test emirlerine aşina olduğunuz için parametreler sizi şaşırtmayacaktır. Bütün değerleri olduğu gibi bırakalım, ama biz fiyatta büyük bir artış beklediğimiz için satış fiyatını 40.000 USD olarak değiştireceğiz. Fiyat değerini bu şekilde değiştirin. Daha sona Send (Gönder) düğmesine basın.

Emir başarılı olursa, alacağınız yanıt emir hakkında bilgiler içerecektir. 


Açık bir emrin durumunu kontrol etme

Bir önceki bölümde emrin verildiğine yönelik doğrulama almıştık, peki ya bu emri daha sonra tekrar kontrol etmek istersek ne olur? Birkaç istekten birini kullanabiliriz.

GET /api/v3/openOrders
Bu isteğe Trade (Alım Satım) > Current Open Orders (Mevcut Açık Emirler - USER_DATA) sekmelerinden ulaşabilirsiniz. Varsayılan olarak BTCUSDT seçilidir. Send’e (Gönder) basarsanız tüm açık BTCUSDT emirlerinize ulaşırsınız (şu an için, yalnızca daha önce belirlediğimiz emri görmelisiniz). Bir sembol belirtmemeyi tercih edebilirsiniz, bu da tüm açık emirlerinizi getirilmesini sağlar.
GET /api/v3/allOrders
Trade (Alım Satım) > All Orders (Tüm Emirler -USER_DATA), size tüm emirlerinizin (hem açık hem de gerçekleştirilmiş) genel bir özetini sunar. Burada bir sembol girmeniz gerekir. orderId, startTime, endTime ve limit, aramanızı sınırlamanıza yardımcı olabilecek opsiyonel parametrelerdir. Burada onları kullanmayacağınız, bu nedenle işaretlerini kaldırın. Send’e (Gönder) bastığınızda daha önceki yanıtın aynısıyla karşılaşırsınız. Kapanmış ya da iptal edilmiş bir emiriniz olsaydı, onları da burada görebilirdiniz. 


Son olarak belirli emirleri sorgulamak için şunu kullanabilirsiniz:

GET /api/v3/order
Bu isteğe Trade (Alım Satım) > Query Order (Emir Sorgulama - USER_DATA) sekmelerinden ulaşabilirsiniz. orderId ya da origClientOrderId’yi (emirlere ekleyebileceğiniz opsiyonel “newClientOrderId” etiketi) girmeniz gerekir. orderId seçimini kaldırın. origClientOrderId için daha önceki varsayılan etiket olan ”my_order_id_1”i gireceğiz. Alanı doldurun ve bir yanıt almak için Send (Gönder) düğmesine basın.


Bir emri iptal etme

Bir süre sonra, 40.000 USD hedefinin fazla iyimser olduğuna karar verebilir, bu nedenle emri iptal etmek isteyebilirsiniz. Bu durumda şunu kullanmanız gerekir:

DELETE /api/v3/order
Trade (Alım Satım) > Cancel Order (Emri İptal Et) sekmelerinin altındaki bu istek, iptal etmek için emirler arasından seçim yapmamıza imkan tanır. orderId ve newClientOrderId seçimlerini kaldırın ve origClientOrderId için değeri “my_order_id_1” olarak belirleyin.
Bu isteği gönderdiğinizde yanıt olarak emirler getirilir. Sayfayı aşağı kaydırarak “status”a (durum) geldiğinizde emrin gerçekten de iptal edilmiş olduğunu görebilirsiniz. Bunu doğrulamak için tekrar GET /api/v3/openOrders uç noktasını (size boş bir liste verecektir) ya da origClientOrderId ile GET /api/v3/order'ı kullanabilirsiniz.


Hemen gerçekleştirilecek bir emir verme

Bir önceki emrimiz, BTC fiyatının 40.000 USD’ye ulaşması koşulunda tetiklenecek bir limit emri olduğu için gerçekleştirilmemişti. Bir piyasa emrinde ise en temelde “varlığın şu anda işlem gördüğü fiyat üzerinden al/sat” demiş oluruz. Bu emir hemen gerçekleştirilir.
Bunun için Trade (Alım Satım) > New Order (Yemi Emir) sekmelerine geri dönelim. Sunucudan almak istediğimiz yanıta göre değiştirebileceğimiz bir parametre olan yanıt türünü (newOrderRespType) bir örnekle açıklayacağız. Burada üç seçenek vardır: ACK, RESULT ve FULL – her bir yanıtın örneklerini burada görebilirsiniz. Emrin alındığının onayını bizimle paylaşan ACK ile devam edeceğiz.

Aşağıdan, güncel piyasa fiyatı üzerinden BUSD karşılığında BNB satmak için bir piyasa emri vereceğimizi görebilirsiniz.



Yanıt bize minimum bilgi verecektir:



/api/v3/allOrders uç noktasıyla, emrin gerçekleştirildiğini doğrulayabilirsiniz.


İşlemleri kontrol etme

Son olarak, alım satımları kontrol etmek için uç noktayı inceleyelim:

GET /api/v3/myTrades
Bu istek Trade (Alım Satım) > Account Trade List (Hesap Alım Satım Listesi USER_DATA) sekmesinin altındadır. Belirli bir sembol için yapılan her bir işlemi kontrol etmenize imkan tanır. Varsayılan sembol (BTCUSDT) için tüm işlemlerinizi görmek istiyorsanız startTime, endTime ve fromId seçimlerini kaldırmanız yeterlidir. Yanıt, 500 işleme kadarını gösterecektir daha fazlasını görmek isterseniz limiti değiştirebilirsiniz.


Postman ile hata ayıklama

Postman’da ham HTTP isteklerini ve yanıtları da görmek mümkündür.



Bu menü, her bir talebin ayrıntılarını gösteren Postman konsolunu açar.



Son düşünceler

Bu rehberin amacı, tek bir satır bile kod yazmadan Binance API'sini kullanabilmeniz için size anlaşılır bir şekilde yol göstermekti. Adımları takip ettiyseniz artık nasıl istek yapacağınız ve bilgi gönderebileceğiniz hakkında fikir sahibi olmalısınız.

Bu serinin bir sonraki makalesinde, kripto paraların ve diğer dijital varlıkların alım satımını otomatik hale getirmemize imkan tanıyan bazı temel kodlama kavramlarından bahsedeceğiz. 
Bu arada sorularınız olursa Binance Geliştirici Topluluğu forumunu ziyaret edebilir ya da bu dokümantasyonları inceleyebilirsiniz.