Python ile Kripto Para Al/Sat Botu Yazalım (Python Trading Bot)

Kripto para grafiklerini saatlerce izlemekten bıktıysan, otomatik olarak belli bir algoritmaya göre al-sat yapabileceğini biliyor musun? Örneğin binance üzerinde python kullanarak otomatik olarak al-sat yapabilirsiniz.

TradingView sitesini bilmeyen trader herhalde yoktur. TradingView pine dili ile alert verebilir, kendi algoritmanızı yazabilirsiniz. TradingView üzerinde belirli bir sayıda indikator ekleyebilir, alert yazabilirsiniz. Belirli bir limiti aştıktan sonra, ücretli bir üyelik almanız gerekiyor.

Aynı şeyi python dilini kullanarak yapacağız arkadaşlar; adım adım nasıl yapacağınızı göstereceğim. Böylece istediğiniz kadar indikator ekleyebilir ve dilediğiniz algoritmaya göre alert verebilir, al-sat yapabilirsiniz.

Python Ide olarak PyCharm kullanıyorum arkadaşlar:

Uygulamayı Yazmaya Başlıyoruz

PyCharm ile yeni proje oluşturalım:

Python 3.6 sürümünü kullanıyorum.

Projemizi oluşturduktan sonra da yeni python dosya oluşturalım:

İsmini de algotrade olarak veriyorum.

Kripto para bilgilerini ve al/sat işlemlerini binance üzerinden alacağım. Binance bildiğiniz gibi çok yaygın bir şekilde kullanılan ve oldukça fazla hacimli işlem yapılan bir kripto para borsasıdır.

Binance Api (Key, Secret) Parametrelerimizi Alalım

Binance borsası üzerinde hesabınızın olduğunu varsayıyorum. Binance hesabınıza login olup, api yönetimi sayfanıza gidiniz:

Api Yönetimi sayfasında yeni api anahtarı oluşturun:

Bir etiket adı verip oluştur tuşuna basınca bizim için yeni bir key ve secret anahtar değerlerini oluşturacaktır.

Bu değerleri (key, secret) python projemizde bir txt dosyasına yazalım (credentials.txt):

credentials.txt (üst satır key, alt satır secret değeri):

3jJ8kD8D5iexxxxx908080980980980980
7VsGh8g4eguHfMj7LA23zkvJLbnbnbbn958585

algotrade.py kodumuza geri dönelim:

from binance.client import Client

class BinanceConnection:
    def __init__(self, file):
        self.connect(file)

    """ Creates Binance client """
    def connect(self, file):
        lines = [line.rstrip('\n') for line in open(file)]
        key = lines[0]
        secret = lines[1]
        self.client = Client(key, secret)

if __name__ == '__main__':
    pass

Bu kodda binance borsasına bağlanmak için bir sınıf oluşturuyoruz.

Kodumuz şu haliyle çalışmayacaktır. Binance client kütüphanesini yükleyelim.

python-binance kütüphanesi

https://github.com/sammchardy/python-binance

Binance borsası tüm fiyat bilgilerini rest apileri ile dışarıya sunmaktadır. python-binance kütüphanesi de bu bilgilere python ortamında erişmemizi kolaylaştıran güzel bir kütüphanedir.

PyCharm settings (ayarlar) menüsüne bağlanalım:

Settings ekranına + düğmesine tıklayarak (python-binance) kütüphanesini ekleyelim:

python-binance kütüphanesinin eklenmesi:

Install Package diyerek kütüphaneyi yüklemiş oluruz.

Artık algotrade.py kodunu çalıştırınca hata vermeyecektir. Binance borsasına bağlandığımıza göre BTCUSDT ikilisinin fiyatlarını çekmeyi deneyelim:

algotrade.py:

from binance.client import Client

class BinanceConnection:
    def __init__(self, file):
        self.connect(file)

    """ Creates Binance client """
    def connect(self, file):
        lines = [line.rstrip('\n') for line in open(file)]
        key = lines[0]
        secret = lines[1]
        self.client = Client(key, secret)

if __name__ == '__main__':
    filename = 'credentials.txt'
    connection = BinanceConnection(filename)

    symbol = 'BTCUSDT'
    interval = '5m'
    limit = 500

    try:
        klines = connection.client.get_klines(symbol=symbol, interval=interval, limit=limit)
    except Exception as exp:
        print(exp.status_code, flush=True)
        print(exp.message, flush=True)

    open = [float(entry[1]) for entry in klines]
    high = [float(entry[2]) for entry in klines]
    low = [float(entry[3]) for entry in klines]
    close = [float(entry[4]) for entry in klines]

    last_closing_price = close[-1]

    previous_closing_price = close[-2]

    print('anlık kapanış fiyatı', last_closing_price, ', bir önceki kapanış fiyatı', previous_closing_price)

Örneğimizde BTC’nin 5 dakikalık mum grafiğini USDT (tether) cinsinden bize dönen bir kod yazmış olduk:

anlık kapanış fiyatı 9354.79 , bir önceki kapanış fiyatı 9349.01

Parametreleri daha iyi anlamak için, binance’ın resmi api dokümanlarını incelemenizde fayda olacaktır:

https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md

close değişkeninde kapanışları bir liste olarak elde ettik.

Listenin son ve bir önceki değerlerine aşağıdaki kod satırları ile ulaşmış oluruz:

last_closing_price = close[-1]
previous_closing_price = close[-2]

Indikatörleri Nasıl Hesaplarız?

Şimdi belirli bir sistem dahilinde uyarı (alert, mail) ya da al/sat komutu vermek istiyoruz. Bir algoritmamız olduğunu basit bir örnek olmak üzere, macd ve macd sinyalinin üst tarafa doğru kesiştiği zaman alım emri verelim.

Bunu yapmak için, macd değerini hesaplamamız gerekiyor. Halihazırda böyle bir kütüphane olduğu için bizim yazmamıza gerek kalmayacaktır.

TA-Lib Python kütüphanesi ile 150’ye yakın indikatörü kolayca hesaplayabiliriz

Ta-lib kütüphanesi bu konudaki ihtiyacımızı rahatlıkla görecektir.

https://github.com/mrjbq7/ta-lib

Şöyle bir mantık düşünelim: 5 dakikalık rsi değeri 50’nin üzerinde olsun ve macd değeri macd sinyal değerini yukarı doğru kessin.

Bu mantığın pek çok durumda işe yaramayacağını söyleyelim. Sırf basit bir örnek olsun diye yapıyoruz. Amacımız örnek bir algoritmanın yazılıma nasıl uyarlanacağıdır.

TA-Lib kurulumu

Daha önce python-binance kütüphanesini kurmak için settings sayfasına giderek eklemiştik. TA-Lib kütüphanesi ise 3.6 python sürümünü tam olarak desteklemediği için farklı bir şekilde kuracağız:

https://www.lfd.uci.edu/~gohlke/pythonlibs/

Yukarıdaki siteden TA_Lib‑0.4.18‑cp36‑cp36m‑win_amd64.whl dosyasını kendi bilgisayarıma indirdim.

Siz bu dosya yerine hangi python sürümünü kullanıyorsanız onunla uyumlu sürümü indirin. Dosyayı projenin kök dizinine indiriyorum.

Dosyayı indirdikten sonra, pycharm terminal ekranından pip3 install diyerek kurulumu gerçekleştiriyorum:

pip3 install TA_Lib-0.4.17-cp36-cp36m-win_amd64.whl

Bu şekilde kurulumu başarıyla gerçekleştirdikten sonra artık istediğimiz ta-lib fonksiyonunu kullanmaya başlayabiliriz:

Öncelikle başka bir kütüphane daha ekleyelim (numpy). Numpy kütüphanesini yine pycharm File-> Settings (ayarlar) -> Project -> Project Interpreter menüsünden kolayca ekleyebiliriz.

numpy kütüphanesini ekledikten sonra algotrade.py kodunu son haline getirelim:

from binance.client import Client
import talib as ta
import numpy as np
import time

class BinanceConnection:
    def __init__(self, file):
        self.connect(file)

    """ Creates Binance client """
    def connect(self, file):
        lines = [line.rstrip('\n') for line in open(file)]
        key = lines[0]
        secret = lines[1]
        self.client = Client(key, secret)

if __name__ == '__main__':
    filename = 'credentials.txt'
    connection = BinanceConnection(filename)

    symbol = 'BTCUSDT'
    interval = '5m'
    limit = 500

    while True:
        # 10 saniye bekliyoruz. Sürekli sorgu göndermeye gerek yok.
        time.sleep(10)

        try:
            klines = connection.client.get_klines(symbol=symbol, interval=interval, limit=limit)
        except Exception as exp:
            print(exp.status_code, flush=True)
            print(exp.message, flush=True)

        open = [float(entry[1]) for entry in klines]
        high = [float(entry[2]) for entry in klines]
        low = [float(entry[3]) for entry in klines]
        close = [float(entry[4]) for entry in klines]

        last_closing_price = close[-1]

        previous_closing_price = close[-2]

        print('anlık kapanış fiyatı', last_closing_price, ', bir önceki kapanış fiyatı', previous_closing_price)

        close_array = np.asarray(close)
        close_finished = close_array[:-1]

        macd, macdsignal, macdhist = ta.MACD(close_finished, fastperiod=12, slowperiod=26, signalperiod=9)
        rsi = ta.RSI(close_finished, timeperiod=14)

        if len(macd) > 0:
            last_macd = macd[-1]
            last_macd_signal = macdsignal[-1]

            previous_macd = macd[-2]
            previous_macd_signal = macdsignal[-2]

            rsi_last = rsi[-1]

            macd_cross_up = last_macd > last_macd_signal and previous_macd < previous_macd_signal

            if macd_cross_up and rsi_last > 50:
                print('al sinyali', flush=True)

                # mail atabilirsiniz, sms gönderebilirsiniz.

                # alım yapabilirsiniz (0.1 miktarında market ya da limit alım emri girebiliriz):

                # buy_order = connection.client.order_market_buy(
                #     symbol=symbol,
                #     quantity=0.1)

Kodun üzerinde biraz duracak olursak, öncelikle sonsuz bir döngü kuruyoruz.

Program sürekli 10 saniyelik aralarla binance borsasını dinleyerek, rsi ve macd değerlerinin bizim belirlediğimiz şartlara uyup uymadığını denetliyor. Eğer uyuyorsa:

macd_cross_up and rsi_last > 50:

Bize uyarı vermesini sağlamış oluyoruz.

close_array = np.asarray(close)
close_finished = close_array[:-1]

Yukarıdaki kodda close değişkenine attığımız değerleri direkt almıyoruz. Çünkü anlık mum çubuğunu değil, tamamlanmış çubuğu hesaplamaya esas alıyoruz.

close_array[:-1] ile son çubuk hariç diğer değerleri almış oluyoruz.

Sonuç ve İyileştirme

Böylece dünyada en çok kullanılan dillerden birisi olan python dili ile nasıl bir al sat botu yazabileceğimizi görmüş olduk.

Binance çok yaygın bir kripto para borsası. Diğer borsaların da benzer api (rest, socket) arabirimleri var. O yüzden onlara da aynı mantığı uyarlayabilirsiniz. Daha güzeli ise CCXT kütüphanesini kullanmak olacaktır:

https://github.com/ccxt/ccxt

Bu kütüphane tüm borsalara standart bir arabirimle bağlanmaya imkan tanımaktadır. O yüzden iyileştirme adımı olarak kullanabilirsiniz.

TA-Lib içerisinde bulunmayan bazı indikatörleri de implement ettim (Tillson T3, supertrend). Eğer fırsat bulursam onları da onbirkod üzerinde paylaşacağım.

Yararlı olmasını umuyorum.

Faydalandığım Kaynaklar

https://steemit.com/cryptocurrency/@genesiscrypto/cryptocurrency-trading-bot-part-1-setup-and-connect-to-binance

https://steemit.com/cryptocurrency/@genesiscrypto/cryptocurrency-trading-bot-part-2-ta-lib-setup-and-beginning-strategy

Python ile Mail Göndermek için tıklayın

Yorum Gönder

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Scroll to Top