Finans, Formasyon Analizi, Kripto Paralar, Programlama, Python

Kripto Paralar için Hareketli Ortalama ve Osilatör Kullanarak Alım-Satım Sinyali Oluşturma

Kripto paraların volatil doğası, teknik analiz araçlarının kullanılmasını cazip kılar. Hareketli ortalama ve osilatörler, kripto paraların fiyat hareketlerini anlamak ve alım-satım sinyalleri oluşturmak için popüler araçlardır.

Hareketli Ortalama Nedir? Hareketli ortalama (MA), belirli bir zaman aralığındaki fiyatların ortalaması alınarak hesaplanan bir göstergedir. Basit Hareketli Ortalama (SMA) ve Üstel Hareketli Ortalama (EMA) gibi çeşitleri vardır. SMA, sabit bir ağırlıkla tüm verileri eşit şekilde ağırlıklar. EMA ise daha yakın tarihli verilere daha fazla ağırlık vererek daha hızlı tepki verir.

Osilatörler ve RSI (Göreceli Güç Endeksi) Osilatörler, varlık fiyatlarının aşırı alım veya aşırı satım durumlarını belirlemek için kullanılan göstergelerdir. RSI, kapanış fiyatlarının karşılaştırılmasıyla aşırı alım ve aşırı satım bölgelerini tanımlar. Genellikle 70 seviyesi aşırı alım, 30 seviyesi aşırı satım bölgesini gösterir.

Alım-Satım Stratejisi Oluşturma

  1. Hareketli Ortalama Kesişimleri: SMA veya EMA, farklı zaman aralıklarında çizildiğinde kesişimler oluşturabilir. Kısa vadeli MA, uzun vadeli MA’yı yukarı yönde kestiğinde alım sinyali, aşağı yönde kestiğinde satım sinyali alınabilir.
  2. RSI ile Alım-Satım: RSI, 70 üzeri aşırı alım ve 30 altı aşırı satım bölgelerini gösterir. RSI 70 seviyesini aştığında ve geri döndüğünde satış yapılabilir, 30 seviyesini aştığında ve yukarı döndüğünde alım yapılabilir.

Örnek Uygulama Bir kripto para örneği üzerinden hareketli ortalama ve RSI kullanarak alım-satım stratejisi oluşturulması anlatılabilir. Hangi zaman aralığının ve hareketli ortalamanın kullanıldığının belirtilmesi önemlidir.

Buna benim de çok kullandığım bir web arayüzü programı ile örnek verecek olursak:

import streamlit as st
from datetime import datetime
import json
from requests import Session
from tradingview_ta import *
import concurrent.futures

class Crypto_analysis:
    
    all=[]
    interval=""
    osc_coins={}
    buy=[]
    sell=[]
    strong_buy=[]
    strong_sell=[]
    recommanded_list=[]
    

    #Bu yöntem listelenen son 100 kripto parayı kapsar
    #Pozitif değişimlre göre listeleme (1h, 24h, 7d, +Vol_24h)
    def get_marketCap():
        url = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest'
        parameters = {
        'start':'1',
        'limit':'100', # Daha büyük listelemeler için bu değeri arttırabilirsiniz ancak listeleme zamanı da doğrusal olarak artacaktır.
        'convert':'USDT'#default fiat paramız USDT, BUSD olarak da değiştirebilirsiniz.
        }
        headers = {
        'Accepts': 'application/json',
            'X-CMC_PRO_API_KEY': 'API KEY burada olacak',
        }

        session = Session()
        session.headers.update(headers)

        try:
            changes={}
            response = session.get(url, params=parameters)
            data = json.loads(response.text)
            
            with st.spinner("Yükseliş ve düşüş trendi gösterenler listeleniyor"):
                
                for d in data.keys():
                    if d=="data":
                        for i in data[d]:
                            ticker=i["symbol"]
                            Crypto_analysis.all.append(ticker)
                            proc_1h = i["quote"]["USDT"]["percent_change_1h"]
                            proc_24h= i["quote"]["USDT"]["percent_change_24h"]
                            proc_7d = i["quote"]["USDT"]["percent_change_7d"]
                            vol_ch24h=i["quote"]["USDT"]["volume_change_24h"]
                            changes[ticker] = [proc_1h,proc_24h ,proc_7d, vol_ch24h]
            
            Crypto_analysis.recommanded_list = [coin for coin in changes.keys() if changes[coin][0] and changes[coin][1]and changes[coin][2]and changes[coin][3]> 0] 
            
        except: 
            pass 
        st.success("İşlem tamam")
    
    def get_analysis_mma(ticker):
        try:
            ticker_summery = TA_Handler(
                symbol=ticker+"USDT",
                screener="crypto",
                exchange="binance",
                interval=Crypto_analysis.interval
            )
            
            rec = ticker_summery.get_analysis().moving_averages["RECOMMENDATION"]

            if rec == "SELL": Crypto_analysis.sell.append(ticker)
            if rec == "STRONG_SELL": Crypto_analysis.strong_sell.append(ticker)
            if rec == "BUY": Crypto_analysis.buy.append(ticker)
            if rec == "STRONG_BUY": Crypto_analysis.strong_buy.append(ticker)

        except:
            pass
        
    def get_analysis_osc(ticker):
        try:
            ticker_summery = TA_Handler(
                symbol=ticker+"USDT",
                screener="crypto",  
                exchange="binance", 
                interval=Crypto_analysis.interval 
            )
            Crypto_analysis.osc_coins[ticker] = ticker_summery.get_analysis().oscillators["RECOMMENDATION"]          
            
        except: 
            pass
       
    def do_draw_sidebar():

        # Streamlit web arayüzü genişliği
        
        st.sidebar.header("Kripto analiz")
        Crypto_analysis.interval = st.sidebar.radio("Zaman aralığı",(
            "1 dakika", 
            "5 dakika",
            "15 dakika",
            "1 saat",
            "4 saat",
            "1 gün",
            "1 hafta",
            "1 ay"),2)

    def do_draw_body():
        
        st.header("AL/SAT LİSTESİ")
        col1, col2,col3,col4= st.columns(4)
   
        col1.success("Güçlü Al")
        col2.success("Al")
        col3.error("Sat")
        col4.error("Güçlü Sat")
        
        col1.table(list(Crypto_analysis.strong_buy))
        col2.table(list(Crypto_analysis.buy))
        col3.table(list(Crypto_analysis.sell))
        col4.table(list(Crypto_analysis.strong_sell))
    
    def do_analysis():
        with concurrent.futures.ProcessPoolExecutor() as executor:
            with st.spinner('Tüm kriptolar için OSC analizi yapılıyor...'):
                futures = [executor.submit(Crypto_analysis.get_analysis_osc(ticker),) for ticker in Crypto_analysis.all]
            st.success("İşlem tamam")
            with st.spinner('OSC analizi yapılan tüm kriptolar üzerinde MM analizi yapılıyor...'):
                futures = [executor.submit(Crypto_analysis.get_analysis_mma(ticker),) for ticker in Crypto_analysis.osc_coins.keys()]
            st.success("İşlem tamam")
def main():
    Crypto_analysis.do_draw_sidebar()
    Crypto_analysis.get_marketCap()
    Crypto_analysis.do_analysis()    
    Crypto_analysis.do_draw_body()
        
if __name__ == '__main__':
    start=datetime.now()
    main()
    st.write("Üretilme süresi",datetime.now()-start)

Açıklamalara gelecek olursak;

  1. Kütüphane İçe Aktarmaları: Kod, gerekli kütüphaneleri/modülleri içe aktararak başlar:
    • streamlit as st: Streamlit kütüphanesi, Python ile web uygulamaları oluşturmak için kullanılır.
    • datetime: Tarih ve saatle çalışmak için kullanılır.
    • json: JSON verileriyle çalışmak için.
    • Session from requests: HTTP istekleri yapmak için kullanılır.
    • TA_Handler from tradingview_ta: Bu, finansal enstrümanların (bu durumda kripto paraların) teknik göstergelerini analiz etmek için kullanılan TradingView Teknik Analiz kütüphanesinden bir sınıftır.
  2. Sınıf Tanımı (Crypto_analysis): Bu sınıf, kripto para analizi için temel işlevsellikleri ve verileri tutar.
    • Farklı verileri, zaman aralıklarını, kripto paraların listelerini, önerileri vb. saklamak için sınıf düzeyinde değişkenler tanımlar.
    • Bu sınıf içindeki yöntemler, veri almak, analiz yapmak ve Streamlit bileşenlerini çizmek için kullanılacaktır.
  3. Yöntem: get_marketCap()
    • Bu yöntem, CoinMarketCap API’sinden en son kripto para piyasa verilerini alır.
    • Veriyi, 1 saatlik, 24 saatlik, 7 günlük ve 24 saatlik işlem hacmi pozitif olan kripto paralarla sınırlar.
    • Filtrelenen kripto paralar, sınıfın recommanded_list (önerilen_liste) değişkenine saklanır.
  4. Yöntemler: get_analysis_mma(ticker) ve get_analysis_osc(ticker)
    • Bu yöntemler, belirli bir kripto parada (ticker) teknik analiz yapmak için TradingView kütüphanesini kullanır.
    • Hareketli ortalamaları (MA) ve osilatörleri analiz ederek al/sat önerilerini depolar.
  5. Yöntemler: do_draw_sidebar() ve do_draw_body()
    • do_draw_sidebar(), Streamlit uygulaması için yan paneli hazırlar. Kullanıcılar analiz için zaman aralığını seçebilir.
    • do_draw_body(), ana web sayfasının içeriğini oluşturur ve al/sat önerilerini farklı sütunlarda Streamlit bileşenleri kullanarak görüntüler.
  6. Yöntem: do_analysis()
    • Bu yöntem, kripto paraları analiz etmek için paralel işlem yapmak için concurrent.futures.ProcessPoolExecutor kullanır.
    • Her kripto para için analiz yöntemlerini paralel olarak çağırır.
  7. Yöntem: main()
    • Bu, tüm süreci yöneten ana işlevdir.
    • Diğer yöntemleri bir sırayla çağırarak yan paneli ayarlar, veri alır, analiz yapar ve sonuçları görüntüler.
  8. if __name__ == '__main__': Bloğu
    • Bu blok, içindeki kodun sadece betik doğrudan çalıştırıldığında (bir modül olarak içe aktarılmadığında) yürütülmesini sağlar.
    • main() işlevi çağrılır ve betiğin yürütülme süresi sonunda görüntülenir.

Bu kod temel olarak, kullanıcıların zaman aralığı seçebildiği, kripto para verilerini alabildiği, analiz yapabildiği ve önerileri kullanıcı dostu bir şekilde görüntüleyebildiği bir web tabanlı bir panosu oluşturur. Kodumuz iki tür teknik analiz göstergesi kullanıyor: hareketli ortalamalar (Moving Averages – MA) ve osilatörler. Şimdiden kullanan arkadaşlara kolay gelsin.

14510cookie-checkKripto Paralar için Hareketli Ortalama ve Osilatör Kullanarak Alım-Satım Sinyali Oluşturma

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir