Python dili kullanarak coin botu nasıl yazılır? [Binance, BTCTurk, Cryptopia...]

in #tr6 years ago

Uyarı: Yazdığınız botu kesinlikle gerçek hayatta kullanmayın. Çünkü borsa tahmini yapmak sanılandan çok daha zordur. Doğru algoritmayı bulsanız bile kodunuzdaki bir açık paranızı kaybetmenize neden olabilir. Burada yazılanlar yatırım tavsiyesi değildir.

enter image description here
Atıf: https://pixabay.com/tr/users/The-Contributor-7691421/

Aslında bizim yapacağımız çok bir iş yok. CCXT adında bir API bize bütün arayüzü sağlıyor. Aşağıda verdiğim linkten açık kaynak kodlu projeye göz atabilirsiniz. Bir çok farklı dil desteği ve aynı zamanda bir çok farklı coin borsası desteği var. Gerçekten projeyi çok başarılı buluyorum ve Github'dan bir 'star' bırakıyorum.

Github linki:
https://github.com/ccxt/ccxt

Python API'sini ben Windows'ta denedim, sorunsuz şekilde çalışıyor. Eminim ki Linux'te de çalışıyordur.

Öncelikle bir yükleyelim:

$ pip install ccxt

Tabi bu adımın başarılı olması için bilgisayarınızda Python ve pip'in yüklü olması gerekmektedir.

Test edelim:

$ python -c "import ccxt"

Yukarıdaki satırı çalıştırdığınızda bir hata yazısı çıkmadıysa devam ediyoruz.

CCXT iki farklı bölüme ayrılıyor: Public ve Private

Public kısmını bilgisayarınıza yükler yüklemez kullanmaya başlayabiliyorsunuz. Fakat Private kısmını kullanmak için borsanızdan API key'i oluşturmanız gerekmektedir. Biliyorsunuzdur fakat yine de hatırlatmak istiyorum API key'inizi çok iyi saklamanız gerekmektedir, yanlış ellere geçerse kötüye kullanılabilir. İşiniz bittikten sonra API key'inizi silmeniz önerilir.

Hangi borsalar için bot yazabiliriz? Öğrenmek için:

$ python -c "import ccxt; print(ccxt.exchanges)"

['_1broker', '_1btcxe', 'acx', 'allcoin', 'anxpro', 'bibox', 'binance', 'bit2c',
 'bitbay', 'bitcoincoid', 'bitfinex', 'bitfinex2', 'bitflyer', 'bithumb', 'bitli
sh', 'bitmarket', 'bitmex', 'bitso', 'bitstamp', 'bitstamp1', 'bittrex', 'bl3p',
 'bleutrade', 'braziliex', 'btcbox', 'btcchina', 'btcexchange', 'btcmarkets', 'b
tctradeua', 'btcturk', 'btcx', 'bter', 'bxinth', 'ccex', 'cex', 'chbtc', 'chileb
it', 'coincheck', 'coinexchange', 'coinfloor', 'coingi', 'coinmarketcap', 'coinm
ate', 'coinsecure', 'coinspot', 'cryptopia', 'dsx', 'exmo', 'flowbtc', 'foxbit',
 'fybse', 'fybsg', 'gatecoin', 'gateio', 'gdax', 'gemini', 'getbtc', 'hitbtc', '
hitbtc2', 'huobi', 'huobicny', 'huobipro', 'independentreserve', 'itbit', 'jubi'
, 'kraken', 'kucoin', 'kuna', 'lakebtc', 'liqui', 'livecoin', 'luno', 'lykke', '
mercado', 'mixcoins', 'nova', 'okcoincny', 'okcoinusd', 'okex', 'paymium', 'polo
niex', 'qryptos', 'quadrigacx', 'quoinex', 'southxchange', 'surbitcoin', 'theroc
k', 'tidex', 'urdubit', 'vaultoro', 'vbtc', 'virwox', 'wex', 'xbtce', 'yobit', '
yunbi', 'zaif', 'zb']

Gördüğünüz gibi çok fazla sayıda borsayı destekliyorlar. Fakat uyarmalıyım ki Binance'te sorun çıkıyor. Biraz çözmeye uğraştım fakat hep geçici çözümler bulabildim.

Bir coin'in fiyatını öğrenmeye çalışalım:

Ben Cryptopia borsasını kullanacağım fakat siz farklı bir borsa da kullanabilirsiniz.

#!/usr/bin/env python
import ccxt
account = ccxt.cryptopia() # ya da account = ccxt.binance()
pair = 'ETH/BTC'
account.fetch_ticker(pair)
# account.fetch_ticker(pair)['info']['BidPrice'] Ek olarak bu şekilde istediğiniz alandaki değişkene ulaşabilirsiniz

Çıktı:

 {'info': {u'SellVolume': 398.04320018, u'Volume': 2386.93749061, u'LastPrice': 0
.09470788, u'SellBaseVolume': 15938372.33538493, u'TradePairId': 5203, u'Label':
 u'ETH/BTC', u'High': 0.096, u'BidPrice': 0.09470788, u'Low': 0.09261111, u'BuyB
aseVolume': 58.16254747, u'Close': 0.09470788, u'BaseVolume': 225.02810343, u'Op
en': 0.09270001, u'AskPrice': 0.09472033, u'Change': 2.17, u'BuyVolume': 1138361
6.91663406}, 'last': 0.09470788, 'timestamp': 1516920496962L, 'symbol': u'ETH/BT
C', 'vwap': None, 'datetime': '2018-01-25T22:48:16.962Z', 'high': 0.096, 'averag
e': None, 'low': 0.09261111, 'quoteVolume': 225.02810343, 'ask': 0.09472033, 'cl
ose': 0.09470788, 'percentage': None, 'baseVolume': 2386.93749061, 'open': 0.092
70001, 'bid': 0.09470788, 'change': 2.17, 'first': None}

pair değişkeninin değiştirerek istediğiniz coin ikilisinin değerini öğrenebilirsiniz.

Şimdi de hesabımızda ne kadar DOGE coin var onu öğrenelim:

Atıf:https://pixabay.com/tr/users/robbentley-1878004/
Atıf:https://pixabay.com/tr/users/robbentley-1878004

#!/usr/bin/env python
import ccxt
account = ccxt.cryptopia({                        
    'apiKey': 'sizin api keyiniz',
    'secret': 'secret keyiniz',
    'enableRateLimit': True
     })
coin = 'DOGE'
account.fetch_balance()[coin]['free']

Bu şekilde hesabınızda kullanabileceğiniz ne kadar DOGE var görebilirsiniz. 'coin' değişkeninin değerini değiştirerek kendi coinlerinizi görebilirsiniz.

Nasıl alım satım yaparız? Dikkat: Tehlikeli komutlar!

import ccxt
account = ccxt.cryptopia({                        
    'apiKey': 'sizin api keyiniz',
    'secret': 'secret keyiniz',
    'enableRateLimit': True
    })
coin = 'BTC'
pair = 'ETH/BTC'

hesap = account.fetch_balance()[coin]['free']

son_fiyat = float(account.fetch_ticker(pair)['info']['BidPrice'])

alis_fiyati = son_fiyat

# Hesabımızdaki miktarın %90'ı ile alış emri verelim
miktar = 0.90*(hesap/alis_fiyati) 

print 'Alinacak miktar: ' + str(hesap)

alis = account.create_limit_buy_order(pair, hesap, alis_fiyati)

print alis

Evet! İlk alis emrimizi verdik!

Coin Marketplace

STEEM 0.27
TRX 0.13
JST 0.032
BTC 62513.70
ETH 2949.39
USDT 1.00
SBD 3.60