Programlama, Python

Python ile kripto paraları için al – sat sinyali gösteren bot yazalım.

Bugünkü yazımızda coinpaprika sitesinin apisini kullanarak yükseliş trendi gösteren conilerimizi tespit edeceğiz. Bunun için coinmarketcap apisi de kullanabilirdiniz ama sorgu işlemleri sırasında gecikme olduğu için aynı verileri gösteren coinpaprika sitesini seçtim. Bu yazıyı iki bölümde bitereceğim. Öncelikli olarak market hacmine göre ilk 50 içerisinde yer alan coinlerin RSI ve EMA değerlerine göre yükseliş trendine girenleri listeleyeceğiz daha sonra da listenenler üzerinden Binance apisi kullanarak otomatik al sat işlemini bitereceğiz. İlk olarak listeleme işlemimizi gerçekleştirelim;

import requests
import time

def coinpaprika_api():
    api = "https://api.coinpaprika.com/v1/tickers/"
    try:
        data = requests.get(api,timeout=5).json()
        return data
    except requests.exceptions.RequestException:
        return False
    except (ValueError):
        return False

def historical_price(id,start,end):
    api = "https://api.coinpaprika.com/v1/coins/" + id + "/ohlcv/historical?start=" + str(start) + "&end="+ str(end)
    try:
        data = requests.get(api,timeout=5).json()
        return data
    except requests.exceptions.RequestException:
        return False
    except (ValueError):
        return False
def rank_filter(data): #ilk 50 üzerinden değerleme yapacağız.
    filtered_data = [x for x in data if x['rank'] < 50]
    return filtered_data

def bullish_filter(data): #son 24 saatlik hacim ve değişimleri baz alıyoruz.
    filtered_data = [x for x in data if ((x['quotes']['USD']['volume_24h_change_24h'] > 1 and x['quotes']['USD']['percent_change_24h'] > 1) or (x['quotes']['USD']['volume_24h_change_24h'] < -1 and x['quotes']['USD']['percent_change_24h'] < -1))]
    return filtered_data

def bearish_filter(data):
    filtered_data = [x for x in data if ((x['quotes']['USD']['volume_24h_change_24h'] > 1 and x['quotes']['USD']['percent_change_24h'] < -1) or (x['quotes']['USD']['volume_24h_change_24h'] < -1 and x['quotes']['USD']['percent_change_24h'] > 1))]
    return filtered_data

Bildiğiniz gibi RSI yönlü fiyat hareketlerinin hızını (hızını) ve değişimini (büyüklüğünü) ölçmek için kullanılan, çok yönlü bir momentum tabanlı osilatördür. Esasen RSI, grafiklendirildiğinde, belirli bir borsanın hem güncel hem de tarihsel, güçlü ve zayıf yönlerini izlemek için görsel bir ortalama sağlar. Güçlü veya zayıf yön, fiyat ve momentum değişikliklerinin güvenilir bir metriğini oluşturan belirli bir işlem dönemi boyunca kapanış fiyatlarına dayanır. Nakit olarak yerleşik araçların (hisse senedi endeksleri) ve kaldıraçlı finansal ürünlerin (türevlerin tüm alanı) popülerliği göz önüne alındığında; RSI fiyat hareketlerinin geçerli bir göstergesi olduğunu kanıtlamıştır. Örnek vermek gerekirse;

change = değişim (kapanış)
kazanç = değişim> = 0? değişiklik: 0.0
kayıp = değişim <0? (-1) * değişiklik: 0.0
avgGain = rma (kazanç, 14)
avgLoss = rma (kayıp, 14)
rs = avgGain / avgLoss
rsi = 100 - (100 / (1 + rs))

Daha önce belirtildiği gibi, RSI momentum tabanlı bir osilatördür. Bunun anlamı, bir osilatör olarak, bu göstergenin bir mumda veya belirli bir sayı veya parametre aralığında çalışmasıdır. Özellikle, RSI 0 ile 100 arasında bir ölçekle çalışır. RSI 0’a ne kadar yakın olursa, momentum fiyat hareketleri için o kadar zayıf olur. Bunun tersi de doğrudur. 100’e yakın bir RSI, daha güçlü bir momentum dönemini gösterir.

– 14 gün muhtemelen en popüler dönemdir, ancak yatırımcıların çok sayıda gün kullandıkları bilinmektedir.
Bakılacak şey
Alındı / satıldı

def relativeStrengthIndex(prices,n):
    RSI = []
    m = len(prices)
    avgGain = 0
    avgLoss = 0

    i = 0
    while i < 14:
        change = prices[i+1] - prices[i]
        if change >= 0:
            avgGain = change + avgGain
        else:
            avgLoss = avgLoss - change
        i+=1

    avgGain = avgGain/n
    avgLoss = avgLoss/n

    t = 14

    while t < m:
        smoothedrs = avgGain/avgLoss
        RSI.append(( 100 - 100/ (1+smoothedrs)))
        if t < m-1:
            change = prices[t+1] - prices[t]
        if change >= 0:
            avgGain = (avgGain * 13 + change) / n
            avgLoss = (avgLoss * 13) / n
        else:
            avgGain = (avgGain * 13) / n
            avgLoss = (avgLoss * 13 - change) / n
        t+=1

    return RSI

Üstel Hareketli Ortalama ise WMA’ya çok benzer (ve bir türüdür). EMA’daki en büyük fark, eski veri noktalarının ortalamadan asla ayrılmadığıdır. Açıklığa kavuşturmak için, eski veri noktaları, seçilen veri dizisi uzunluğu dışında olsalar bile (neredeyse hiçbir şeye düşmemesine rağmen) çarpanları korurlar.

def exponentialMovingAverage(prices,n):
    m = len(prices)
    a = 2/(n+1)
    EMA = []
    EMA.append(prices[0])
    i = 1
    while i < m:
        EMA.append((a * prices[i]) + ((1 - a) * EMA[i - 1]))
        i+=1
    return EMA

days = 5219689;

data = coinpaprika_api()
rankdata = rank_filter(data)
bullishdata = bullish_filter(rankdata)
bearishdata = bearish_filter(rankdata)
all_data = bullishdata + bearishdata
for x in all_data:
    prices = []
    name = x['name']
    change = x['quotes']['USD']['percent_change_24h']
    volume = x['quotes']['USD']['volume_24h_change_24h']
    id = x['id']
    endunix = time.time()
    startunix = endunix - days

    historical = historical_price(id,int(startunix),int(endunix))
    for x in historical:
        prices.append( x['close'])

    trend = "N/A"
    ema8 = exponentialMovingAverage(prices,8)
    ema21 = exponentialMovingAverage(prices,21)

    current_8 = ema8.pop()
    current_21 = ema21.pop()
    previous_8 = ema8.pop()
    previous_21 = ema21.pop()

    if current_8 > current_21 and previous_8 < previous_21:
        trend = "Yükseliş Trendi"

    if current_8 < current_21 and previous_8 > previous_21:
        trend = "Düşüş Trendi"

    if trend != "N/A":
        rsi = relativeStrengthIndex(prices,14)
        current_rsi = rsi.pop()
        print(name + "\nDeğişim(24h): " + str(change) + "\nHacim(24h): " + str(volume)+ "\nRSI(14): " + str(current_rsi) + "\nTrend: " + trend +"\n----------------------")

Sonuç çıktısını göstermek istediğim ama 11 şubat itibari ile ilk 50 de bulunan cinlerin hiçbiri yükseliş trendi göstermiyor. 🙁

11970cookie-checkPython ile kripto paraları için al – sat sinyali gösteren bot yazalım.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.