Binance Websocket ile Performanslı Kripto Botlar Geliştirin

Daha önce yazmış olduğum (Python ile kripto bot geliştirin) yazısında python-binance kütüphanesini kullanarak binance borsasına bağlanıp, ohcl (open, high, close, low) değerlerini çekmiş, ve onun üzerinde bazı indikatörleri hesaplayarak al-sat sinyalleri üretmiştik. Bu kütüphane arka planda binance rest apisini kullanmaktadır. Binance Websocket ise websocket teknolojisini baz alarak, gerçek zamanlı veri elde etmeyi kolaylaştırmaktadır.

Daha önce incelememiş olanlar için binance resmi rest api dokümanlarını incelemenizi tavsiye ederim: binance-spot-api-docs/rest-api.md at master · binance/binance-spot-api-docs (github.com)

Rest api kullanarak bir bot yazmak istediğimizde ise genelde yapmamız gereken program mantığı şöyle oluyordu. Sonsuz bir döngü içerisinde mum grafiği (candlestick) verilerini çekerek, bu verileri işleyerek, al-sat yapmaya karar veriyorduk.

Aşağıdaki yazdığıma benzer bir mantıkta kod yazıyorduk. While döngüsü içerisinde sürekli verileri çekerek, verilerin örneğin supertrend indikatörüne göre al sinyali verip vermediğini kontrol ediyor, eğer olumlu ise market al emri veriyorduk.

from binance.client import Client
import time
client = Client("API_KEY", "API_SECRET")

pair = "ETHUSDT"
interval = "4h"
limit = 500

def supertrend_buy_sinyali_veriyor(klines):
    # kontrol ediliyor
    pass

while True:

    time.sleep(10)

    klines = client.get_klines(symbol=pair, interval=interval, limit=limit)

    if supertrend_buy_sinyali_veriyor(klines):
        buy_order = client.order_market_buy(
            symbol=pair,
            quantity=100)
100 ether biraz fazla oldu 🙂

Bu yöntem işimizi görmekle beraber, bazı dezavantajlarının olduğunu söylemekte fayda var.

Binance Rest Api’nin Dezavantajları

Performans anlamında ideal bir yöntem değildir. Sürekli sorgu göndermek, bekleme süresi koysak da gelen kayıtları işlemek işlemci ve hafıza anlamında daha fazla kaynak kullanımına yol açacaktır.

İkinci bir dezavantajı ise, Binance’ın koymuş olduğu api çağırma limitlerini aşma tehlikesi. Bu limitleri aşmamız durumunda, binance bize hata dönecektir. Paralel olarak aynı binance hesabı için bir kaç tane bot çalıştırmanız durumunda, hatalar ile karşılaşmanız mümkün olacaktır.

Üçüncü bir dezavantaj, rest üzerinden binance verilerini okumanız için binance arayüzü içerisinden api key-secret değerlerini alıp programda kullanmanız gerekecek. Web socket için ise böyle bir gereksinim yok.

Son olarak ise döngü mantığı içerisinde kripto bot tasarlamak, kod bakımı ve anlaşılırlığı açısından daha verimsiz kodlar yazmanıza sebep olacaktır.

Websocketler ise bu anlamda daha güzel ve anlaşılır bir tasarıma sahiptirler.

Binance Websocket Kullanımının Dezavantajları

Dezavantajı olarak gördüğüm noktalardan birisi de binance verilerini yönetmenin bizim sorumluluğumuzda olmasıdır. Verileri saklama, ya da bütünlüğünü sağlama işini yazdığımız kodda yönetmek durumundayız. Örneğin geçmiş verilere ihtiyacımız varsa bu durumda verileri toplayana kadar beklememiz ya da önceden çektiğimiz verileri kullanabilmek için ekstra bir takım şeyler yapmamız gerekiyor.

Rest api de ise ihtiyacımız olan veriyi istediğimiz zaman sıfırdan çekerek işlem yapabiliriz.

Genel olarak avantajlarından, dezavantajlarından bahsettikten sonra, örnek bir uygulama ile binance websocket kullanımının nasıl olacağını görelim:

Binance Websocket resmi tanıtım linki: binance-spot-api-docs/web-socket-streams.md at master · binance/binance-spot-api-docs (github.com)

Binance geliştiricilere yönelik farklı akışlar sunmaktadır. Temel websocket uç noktası, wss://stream.binance.com:9443 adresidir.

Genel olarak binance’ın sunduğu akışların üzerinden geçelim.

Aggregate Trade Streams

Akış adı: <sembol>@aggTrade

Güncelleme Hızı: Gerçek zamanlı

Açıklama: Binance üzerinde gerçekleşen her emrin yayınlandığı akış. Verilen emir, bir kaç aşamada (trade) gerçekleşebilir. Bu akış bu emirleri toplam olarak yayınlar.

Trade Streams

Akış adı: <sembol>@trade

Güncelleme hızı: Gerçek zamanlı

Açıklama: Önceki akışa benzer, fakat bir emre bağlı olarak gerçekleşen her trade’ı ayrı ayrı verir.

Kline/Candlestick Streams

Akış adı: <sembol>@kline_<interval>

Güncelleme hızı: 2 saniye

Açıklama: En çok ilgilendiğim akış. Mum açılış, kapanış, en yüksek, en düşük fiyat değerlerini bize periyodik olarak gönderen akış. Örnek bir akış adı dogeusdt@kline_1m olarak verebiliriz. dogeusdt paritesinin 1 dakikalık mum verisi.

Individual Symbol Book Ticker Streams

Akış adı: <sembol>@bookTicker

Güncelleme hızı: Gerçek zamanlı

Açıklama: O anda emir defterinde geçerli olan en iyi alıs-satış fiyatlarını gönderen akış.

Örnek Uygulama Geliştiriyoruz

Örnek botumuz, 1 dakikalık dogeusdt verilerini çekecek, supertrend indikatörüne göre al durumu oluştuysa, market alım emri verecek. Hedefimiz bu.

Öncelikle kurulması gereken python paketlerinden bahsedelim:

python-binance
TA-Lib
websocket-client

Bu kütüphaneleri pip install diyerek kurabilirsin. TA-Lib kütüphanesini windows ortamında kurmak sıkıntı olabiliyor. Daha detaylı bir kurulum için önceki yazılarımdan birisini inceleyebilirsin: Kripto Algoritmanı Jesse ile Test Et (TA-Lib Windows kurulumu alt başlığına bakın lütfen)

Binance Websocket Temel Python Kod Kalıbı ile Başlayalım

Üzerine esas alacağımız kod kalıbı ile örneğimize başlayalım:

import websocket, json, pprint

SOCKET = "wss://stream.binance.com:9443/ws/dogeusdt@kline_1m"

def on_open(ws):
    print('opened connection')


def on_close(ws):
    print('closed connection')


def on_message(ws, message):
    print('received message')
    json_message = json.loads(message)
    pprint.pprint(json_message)

ws = websocket.WebSocketApp(SOCKET, on_open=on_open, on_close=on_close, on_message=on_message)
ws.run_forever()

Soket adresi olarak daha önce değinmiş olduğum dogeusdt paritesinin 1 dakikalık mum verilerini okuyorum. Her websocket olayı için de bir fonksiyon tanımladım. Web socket bağlantısı kurulduğunda on_open, kapandığında on_close ve her mum verisi geldiğinde de on_message fonksiyonu çağrılıyor.

on_message olayında yapmış olduğum gelen veriyi daha güzel ve formatlı bir şekilde konsola göndermek.

Şu anda kodu çalıştırıp sonuçlarını bakabilirsin.

Aldığım sonuç şu şekilde:

binance websocket dogeusdt klines

İki saniyede bir binance bize mum verilerini gönderecek.

Verilerimiz gelmeye başladı, artık bu verileri bir listeye ekleyerek, toplamaya başlayalım.

def on_message(ws, message):
    global closes, highs, lows

    json_message = json.loads(message)
    pprint.pprint(json_message)

    candle = json_message['k']
    close = candle['c']
    high = candle['h']
    low = candle['l']
    print('close', close, 'high', high, 'low', low)

    # listelerimize ekliyoruz
    closes.append(close)
    highs.append(high)
    lows.append(low)

on_message metodunu gördüğünüz gibi değiştiriyoruz. (mum verilerini yakalayarak, listelerimize ekliyoruz)

Fakat bir sorunumuz var, benim istediğim sadece kapanmış mumları işleme koymak. on_message metoduna henüz tamamlanmamış mum verisi de geliyor. Bunu engellemek için x değerine bakmamız gerekiyor.

Kodun buna göre düzenlenmiş hali:

def on_message(ws, message):
    global closes, highs, lows

    json_message = json.loads(message)
    pprint.pprint(json_message)

    candle = json_message['k']

    is_candle_closed = candle['x']

    if is_candle_closed:
        close = candle['c']
        high = candle['h']
        low = candle['l']
        print('close', close, 'high', high, 'low', low)

        # listelerimize ekliyoruz
        closes.append(close)
        highs.append(high)
        lows.append(low)

supertrend indikatörünü hesaplamak için, close, high ve low listelerine ihtiyacımız var, o yüzden bu listeleri oluşturdum. Daha detaylı bilgi almak için ilgili yazıma bakabilirsin. Al/sat kontrolü yapmak için şimdi de supertrend_check fonksiyonunu yazalım:

def supertrendcheck(atr_factor, closes, highs, lows):

    close_array = np.asarray(closes)

    high_array = np.asarray(highs)

    low_array = np.asarray(lows)

    try:
        atr = ta.ATR(high_array, low_array, close_array, 10)
    except Exception as exp:
        print(f'exception: {str(exp)}')
        return False, False

    previous_final_upperband = 0
    previous_final_lowerband = 0
    final_upperband = 0
    final_lowerband = 0
    previous_close = 0
    previous_supertrend = 0
    supertrend = []
    supertrendc = 0

    for i in range(1, len(close_array)):
        if np.isnan(close_array[i]):
            pass
        else:
            highc = high_array[i]
            lowc = low_array[i]
            atrc = atr[i]
            closec = close_array[i]

            if math.isnan(atrc):
                atrc = 0

            basic_upperband = (highc + lowc) / 2 + atr_factor * atrc
            basic_lowerband = (highc + lowc) / 2 - atr_factor * atrc

            if basic_upperband < previous_final_upperband or previous_close > previous_final_upperband:
                final_upperband = basic_upperband
            else:
                final_upperband = previous_final_upperband

            if basic_lowerband > previous_final_lowerband or previous_close < previous_final_lowerband:
                final_lowerband = basic_lowerband
            else:
                final_lowerband = previous_final_lowerband

            if previous_supertrend == previous_final_upperband and closec <= final_upperband:
                supertrendc = final_upperband
            else:
                if previous_supertrend == previous_final_upperband and closec >= final_upperband:
                    supertrendc = final_lowerband
                else:
                    if previous_supertrend == previous_final_lowerband and closec >= final_lowerband:
                        supertrendc = final_lowerband
                    elif previous_supertrend == previous_final_lowerband and closec <= final_lowerband:
                        supertrendc = final_upperband

            supertrend.append(supertrendc)

            previous_close = closec

            previous_final_upperband = final_upperband

            previous_final_lowerband = final_lowerband

            previous_supertrend = supertrendc

    if close_array.size < 2:
        return False, False

    prev_close = close_array[-1]
    prev_prev_close = close_array[-2]

    color_change = False
    trend_positive = False

    if len(supertrend) < 2:
        return color_change, trend_positive

    last_supert = supertrend[-1]
    previous_supert = supertrend[-2]

    if prev_close > last_supert and prev_prev_close < previous_supert:
        color_change = True

    if prev_close < last_supert and prev_prev_close > previous_supert:
        color_change = True

    if prev_close > last_supert:
        trend_positive = True

    if prev_close < last_supert:
        trend_positive = False

    return color_change, trend_positive

Daha önce yazmış olduğum, supertrend ile ilgili yazımdaki kodu biraz değiştirerek, daha kullanışlı bir hale getirdim. Hem alım hem de satım durumunu kontrol edebiliyorum.

Parametre olarak geçtiğim ATR_FACTOR değeri, atr çarpanı olarak kullanılan değer.

İki tane dönüş değerim var.

color_change: Renk değişimi oldu mu, yani yeşilden kırmızıya ya da kırmızıdan yeşile.

trend_positive: Trend yukarı yönlü mü, yoksa aşağı yönlümü.

Tradingview üzerinde ATR_Period = 10 ve ATR_multiplier = 3 değerlerine karşılık geliyor. Bu değerleri istediğiniz gibi değiştirebilirsiniz.

Bu durumda on_message metodunu aşağıdaki gibi değiştirmeliyiz:

def on_message(ws, message):
    global closes, highs, lows

    json_message = json.loads(message)
    pprint.pprint(json_message)

    candle = json_message['k']

    is_candle_closed = candle['x']

    if is_candle_closed:
        close = float(candle['c'])
        high = float(candle['h'])
        low = float(candle['l'])
        print('close', close, 'high', high, 'low', low)

        # listelerimize ekliyoruz
        closes.append(close)
        highs.append(high)
        lows.append(low)

        if len(closes) > 10:
            color_change, trend_positive = supertrendcheck(ATR_FACTOR, closes, highs, lows)

            if color_change and trend_positive:
                print('al sinyali', flush=True)
                # buy_order = connection.client.order_market_buy(
                #     symbol=PAIR,
                #     quantity=BUY_QUANTITY)
            elif color_change and not trend_positive:
                print('sat sinyali', flush=True)
                # sell_order = connection.client.order_market_sell(
                #     symbol=PAIR,
                #     quantity=BUY_QUANTITY)

len(closes) > 10 ifadesini supertrend hesaplamak için en az 10 adet mum bilgisine ihtiyacım var, o yüzden koydum.

Bir süre çalışmaya bırakalım botumuzu ve supertrend indikatörünün al sinyali vermesini bekleyelim.

SONUÇ VE FAYDALANILAN KAYNAKLAR

Halihazırda kullanmış olduğum python-binance kütüphanesinin de websocket kullanımı ile ilgili metodları var. Fakat onu bu örnekte kullanmadım. Gereksiz derecede kompleks buldum. O yüzden websocket-client kütüphanesini tercih ettim.

Eğer python-binance’ın websocket kütüphanesini tercih eden arkadaşım varsa sebebini paylaşırsa sevinirim.

binance-spot-api-docs/web-socket-streams.md at master · binance/binance-spot-api-docs (github.com)

İngilizce bilenler için çok güzel bir kaynak: Build a Real-Time Crypto Trading Bot in under 100 Lines of Code – YouTube

Projenin kaynak kodlarının github adresi: ttufekci/binance_websocket_sample (github.com)

Her zaman olduğu gibi önerilerinizi ve sorularınızı yorum olarak belirtebilirsiniz.

Yazmayı planladığım konular:

Profit maximizer (pmax): Kıvanç Özbilgiç tarafından geliştirilmiş, supertrend’in daha gelişmiş versiyonu.

Ta-lib ile mum formasyonlarını tespit edin.

26 thoughts on “Binance Websocket ile Performanslı Kripto Botlar Geliştirin”

  1. Hocam sen harika birisin. Yazılarınızı dört gözle bekliyorum. Yeni bir makalenizi gördüğümde hemen okuyup uygulamaya çalışıyorum.

  2. Hocam kodu hemen denemeye çalıştım. Windows ortamında pycharmda websocket-client eklememe rağmen AttributeError: module ‘websocket’ has no attribute ‘WebSocketApp’ hata mesajını bir türlü düzeltemedim. Bende hemen linux e geçtim. Debian zeminli raspberry kullanıyorum. Orada kütüphane kaynaklı hata mesajı almadım ama bir süre beklediğimde sinyalde gelmedi. Kodları incelediğimde atr_factor tanımlanmadığını gördüm. Belkide yanlış düşünüyor olabilirim. Bilgi vermek istedim.

    1. github’tan son halini alıp deneyebilir misin? Orada ATR_FACTOR var. Blog yazısında anlaşılır olsun diye parça parça koyuyorum.

      Mesaj gelmemesi normal, print satırını commente aldım. Commenti kaldırıp deneyebilirsin.

      Kodun son halinde mesaj gelmesi icin 10 dakikalık veriyi tamamlayıp, dakikalıkta da supertrend al/sat sinyali verdiğinde konsola mesaj gelir.

      git clone ile son halini deneyince bir problem olmaması lazım. Çalışan kod main.py icerisinde:

      Kendi ortamımda windows. Orada çalışması ile ilgili sıkıntı olmaması lazım. Tüm paketler sağlıklı bir şekilde kuruldu mu?

      https://github.com/ttufekci/binance_websocket_sample

      1. Hocam githubtaki kodları denedim, başarılı bir şekilde işliyor. Ayrıca şunuda belirtmek isterim bu yazınızda “Daha önce yazmış olduğum, supertrend ile ilgili yazımdaki kodu biraz değiştirerek, daha kullanışlı bir hale getirdim. Hem alım hem de satım durumunu kontrol edebiliyorum.” demişsiniz. Diğer yazınızıda denemiştim dediğiniz gibi sinyaller biraz sorunluydu. Burada direk bir al, birde sat sinyali alabiliyorum.
        Son olarak ben hala windowsta kullandığım pycharmdaki AttributeError: module ‘websocket’ has no attribute ‘WebSocketApp’ hata mesajını geçemedim. Çok araştırma yaptım ama bulamadım. Yüklemiş olmama rağmen modül yüklenmemiş gibi görünüyor. Pycharm->File->Setting->Project:->Python Interpreter den + ya ekleyerek yapıyorum. Modülü kurmak için başka yöntem varmıdır?

          1. Hocam sonunda AttributeError: module ‘websocket’ has no attribute ‘WebSocketApp’ hata mesajını çözebildim. Nedeni şuymuş: deneme yaptığım dosyanın adını websocket.py yazmıştım. Tüm sorun bundan kaynaklıymış 🙂 dosyanın adını değiştirince çözüldü. Yardımlarınız için teşekkürler.

  3. Hocam sadece rsı ile al sat yapabilen basit bir bot ve bunun testini yapmak istiyorum ama hiç python bilgim yok bunlar dışında nasıl bot kurup testing yapabilirim ? aşırı basit olsun ayrıca bunu margin işlemlerde kullanmak istersek farkı bir işlem ile yapmamız gerekir mi?

  4. Hocam bağlantı problemiyle ilgili sorum olacaktı. Daha önceki yazılarınızda binance rest api ile ilgili yaptığınız çalışmalarda timeout problemini çok yaşıyorduk. Sanki websocket ile bu problem ortadan kalkacaktı gibi gelmişti, hatta hiç durmadan 2 gün bile çalıştı ama bunda da closed connection oldu. Binance dökümanlarını incelediğimde
    Websocket Limits
    WebSocket connections have a limit of 5 incoming messages per second. A message is considered:
    A PING frame
    A PONG frame
    A JSON controlled message (e.g. subscribe, unsubscribe)
    A connection that goes beyond the limit will be disconnected; IPs that are repeatedly disconnected may be banned.
    A single connection can listen to a maximum of 1024 streams.
    websocketinde limitlerinin olduğunu gördüm. Hele ki supertrend gibi bir indikatör çalıştırdığımızda yorum yapabilmesi için 10 tane mum verisini toparladıktan sonra yorum yapabiliyorken 2 günde bir kapanıp açması büyük problemler yaşatır. Bu problemin kesin çözümü nedir? Hiç durmadan çalışan bir bot nasıl yapılabilirki?

    1. Binance tarafında da zaman zaman sıkıntılar yaşanıyor. Yoğunluk veya başka sebeplerden, işlem yapılamıyor. Siz en stabil, dayanıklı botu yazsanız bile,
      karşı taraf cevap veremediği zaman yine eliniz kolunuz bağlanmış olacaktır. Bu durumda bazı fırsatlar kaçacaktır.

      Örneğin 4h veya günlük mum grafiğinde çok sıkıntı olmayabiliyor, yeterince süre var. Fakat kısa zaman içerisinde, hızlı aksiyon almanız gereken durumlarda bazı kayıpları göze almanız gerekir.

      Bu durumda benim uyguladığım yöntem (rest api kullanırken), hatalar olduğu zaman try catch ile yakalamak, sonra bir süre bekledikten sonra, tekrar istek göndermek. Hata verince, yine bekleyip, tekrar sorgu/emir göndermek (döngü içerisinde).

      websocket için de aynı şey geçerli, oluşabilecek, bağlantı kopukluklarını da düşünerek, bir tasarım yapmak gerekiyor.

      Bu şekilde haftalarca problem yaşamadan çalışan botlarım var. Diğer taraftan client ortamınızın stabil olması, sağlıklı bir network bağlantısına ve işlemci, hafıza kaynağına sahip olması lazım.

      Botun stabil çalışması için, önerisi olan başka arkadaşlar varsa onlar da deneyimlerini paylaşabilirler.

      Kusursuz çalışan sistem yok, hangi servisi kullanırsanız kullanın. Hataları da gözönüne alarak, bir tasarıma gitmek gerekiyor.

      1. Hocam gerçekten çok yararlı bilgiler paylaşıyorsunuz. Bizimde size bir nebze yardımımız dokunabilirse ne mutlu.
        Bu konuda benim aklıma gelen tek yöntem şu oldu. Program 12 saat çalışsın, otomatik kendini kapatsın, 12 saat sonra crontab programı tekrar çalıştırsın gibi birşey düşünmüştüm ama uygulamaya geçirmedim.
        Bahsettiğiniz “hatalar olduğu zaman try catch ile yakalamak, sonra bir süre bekledikten sonra, tekrar istek göndermek.” bunu nasıl yapıyorsunuz bir örnek dosya ile açıklayabilirmisiniz?

  5. Hocam elinize kolunuza sağlık gerçekten yine güzel bir iş çıkardınız. Yeni başlayanlar için gerçekten önemli ve güzel Türkçe kaynak ve bilgiler sunuyorsunuz. Sorun şu olacak supertren BTC paritesi üzerindeki coinleri genel olarak tarama yapmamız mümkün mü genel olarak bir tarama yapıp alım sinyali veya satım sinyali verenleri görme ihtimalimiz var mı? sadece ETH DOGE değil genel bir tarama yapmak için nasıl bir kod eklemeliyim..?

    1. symbols listesi üzerinde islem yaparak, genel bir tarama mantıgi olusturabilirsiniz:

      exchangeinfo = connection.client.get_exchange_info()

      symbols = exchangeinfo.get(‘symbols’)

      for symbol in symbols:
      # symbolname ‘BTCUSDT’, ‘ETHUSDT’ gibi, binance uzerinde islem goren tum ikililer geliyor.
      # symbolname uzerinde filtreleme yapabilirsiniz:

      symbolname = symbol.get(‘symbol’)
      if supertrend_check(symbolname):
      print(‘al sinyali’)

      1. File “c:\Users\q\Desktop\bot\binance_websocket_sample-main\main.py”, line 31, in
        connection = BinanceConnection(filename)
        File “c:\Users\q\Desktop\bot\binance_websocket_sample-main\main.py”, line 21, in __init__
        self.connect(file)
        File “c:\Users\q\Desktop\bot\binance_websocket_sample-main\main.py”, line 26, in connect
        key = lines[0]
        IndexError: list index out of range
        PS C:\Users\q\Desktop\bot\binance_websocket_sample-main>

        hocam böyle bir hata mesajı alıyorum ve yukarıdaki kodu nasıl eklemeliyim yeniyim o yüzde kusura bakmayın.

  6. Hocam ben şunu kullanıyorum ama binance sorunu yaşıyorum
    while True:
    try:
    “kod”

    except:

    try catch için kısa bir örnek verir misiniz

    1. Hocam şöyle bir kod buldum
      client = Client(api_key, api_secret)
      while True:

      try :
      klines = client.get_historical_klines(ticker_symbol, Client.KLINE_INTERVAL_1MINUTE, _from_str, _until_str)

      except BinanceAPIException as e:
      print(e)
      print(‘Something went wrong. Error occured at %s. Wait for 1 hour.’ % (datetime.datetime.now().astimezone(timezone(‘UTC’))))
      sleep(3600)
      client = Client(api_key, api_secret)
      continue
      Bu kod güzelmi yoksa sizin öneriniz nedir birde burada 1 saat bekletmiş ama siz ne kadar sonra bağlantıyı yeniletiyorsunuz?

    1. Kendi örneğimde python-binance websocket apisini kullanmadım. websocket-client diye genel amaçlı başka bir kütüphane kullandım. Bahsettiğiniz kütüphaneyi duydum. Fakat tecrübem olmadı.
      Varsa deneyimlerinizi paylaşabilirsiniz.

      1. Talat Hocam unicorn-binance-websocket-api kurmaya çalıştığımda hali hazırda çalıştığım PC de python 3.6 vardı ve bir türlü kütüphaneyi kuramadım. Başka bir PC de python 3.9 vardı, oraya sorunsuzca kurduğumu belirtmek isterim.
        Tabi bu sorunlarla uğraşıp super trendi entegre etmeye çalışmaktan anca bitirebildim. Az önce çalıştırdım mum kapanış verilerini alıyorum ve ilk al sinyali geldi. Makinayı bırakacağım bakalım 24 saat boyunca timeout olmadan çalışabilecekmi, haberdar ederim. unicorn, websockete nazaran çok daha hızlı bir şekilde veri çektiğini gördüm. Aynı zamanda üst üste denemelerde websocket timeout sorunları verirken unicorn hiç sorunsuz hızlıca tepki verdiğinide gördüm. Dediğim gibi timeout problemleride olmazssa kesinlikle tavsiye ederim.
        Ayrıca bir taraftan raspberry pi 4 cihazıma ccxt ile super trendi dun saat 3 civarında çalıştırıp bırakmıştım. 24 saat geçmesine rağmen hala çalışmaktadır. Birde websocket ile karşılaştırdığında geriye dönük 100 mum verisi alabildiğinden bana göre ccxt ile super trend te daha verimli gibi duruyor. ccxt de timeout problemi yaşanmaz ise super trendi burada öneriyorum.
        Gelişmeleri bildirmeye devam edeceğim.

  7. Talat hocam unicorn-binance-websocket-api yi en kısa zamanda deneyip sonuçlarını size bildireceğim. Tabi sizin kadar ve performanslı bir şeyler yapamasam da iyi veya kötü bir halde ileteceğim.
    Birde şöyle bir şey geldi aklıma API REST ile aldığımız verileri, csv olarak kayıt edip, bunları websocket ile analiz ettirirsek ve bağlantı problemini çözmüş olursak sorunsuz çalışan bir bot yapmış olurmuyuz?
    Tabi bir de sizin pmax çalışmanızı dört gözle beklediğimi hatırlatmak isterim.

  8. Merhaba hocam LİMİT 500 olduktan sonra hataya düşmesiyle beraber bu hata sürekli devam eder mi ? limiti aşmamız durumunda ne gibi sorunla karşılaşırız.

  9. websocette hesaptaki miktarı göremiyor muyuz en son aldığımız değer sattığımız değeri nakitin %25 satmak istesek nasıl bu değerlere göre kıyaslama yapabilir ?

Yorum bırakın

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

Scroll to Top