Python ile BIST 100 Hisselerinde CCI Hesaplama

Finansal piyasalarda teknik analiz, yatırımcıların karar verme süreçlerinde önemli bir rol oynamaktadır. Bu bağlamda, Commodity Channel Index (CCI) gibi göstergeler, piyasa trendlerini değerlendirmek için sıklıkla kullanılmaktadır. CCI, bir varlığın fiyatının ortalama fiyatından ne kadar uzaklaştığını ölçen bir osilatördür. Bu yazıda, Python programlama dili kullanarak BIST 100 hisseleri için CCI değerlerini hesaplayan bir kod örneği sunacağız.

Kod, öncelikle yfinance kütüphanesini kullanarak BIST 100 hisselerinin günlük verilerini alır. Hisselerin sembolleri bir liste halinde tanımlanmıştır. Ardından, her bir hisse için son bir yılın verileri indirilir. CCI hesaplamak için, tipik fiyat, basit hareketli ortalama (SMA) ve ortalama sapma hesaplanır. Bu hesaplamalar sonucunda, her hisse için CCI değeri elde edilir.

CCI değerleri, yatırımcılara alım veya satım sinyalleri sunar. CCI değeri 100’ün üzerinde olduğunda “Güçlü Sat”, 0 ile 100 arasında olduğunda “Sat”, -100 ile 0 arasında olduğunda “Al” ve -100’ün altında olduğunda “Güçlü Al” sinyali verilir. Bu sinyaller, yatırımcıların piyasa hareketlerini daha iyi anlamalarına yardımcı olur.

Kodda ayrıca hata yönetimi de bulunmaktadır. Eğer bir hisse verisi alınamazsa, hata mesajı yazdırılır ve işlem devam eder. Sonuçlar, bir DataFrame formatında saklanır ve yazdırılır. Bu sayede, tüm BIST 100 hisseleri için CCI değerleri ve al/sat sinyalleri eksiksiz bir şekilde görüntülenir.

Sonuç olarak, bu Python kodu, yatırımcıların BIST 100 hisseleri üzerinde teknik analiz yapmalarına olanak tanır. CCI gibi göstergeleri kullanarak, piyasa trendlerini daha iyi değerlendirebilir ve bilinçli yatırım kararları alabilirler.

Not: Bu kod deneme amaçlı yapılmış olup hataları ve eksikleri olabilir. Kesinlikle yatırım tavsiyesi içermemektedir. Herkes kendi kararını kendisi vermelidir.

Copied!
import pandas as pd import numpy as np import yfinance as yf tickers = [ "AEFES.IS", "AGHOL.IS", "AGROT.IS", "AKBNK.IS", "AKFGY.IS", "AKFYE.IS", "AKSEN.IS", "ALARK.IS", "ALFAS.IS", "ARCLK.IS", "ARDYZ.IS", "ASELS.IS", "ASTOR.IS", "BERA.IS", "BFREN.IS", "BIMAS.IS", "BINHO.IS", "BRSAN.IS", "BRYAT.IS", "BTCIM.IS", "CANTE.IS", "CCOLA.IS", "CIMSA.IS", "CWENE.IS", "DOAS.IS", "DOHOL.IS", "ECILC.IS", "ECZYT.IS", "EGEEN.IS", "EKGYO.IS", "ENERY.IS", "ENJSA.IS", "ENKAI.IS", "EREGL.IS", "EUPWR.IS", "EUREN.IS", "FROTO.IS", "GARAN.IS", "GESAN.IS", "GOLTS.IS", "GUBRF.IS", "HALKB.IS", "HEKTS.IS", "ISCTR.IS", "ISGYO.IS", "ISMEN.IS", "IZENR.IS", "KAYSE.IS", "KCAER.IS", "KCHOL.IS", "KLSER.IS", "KONTR.IS", "KOZAA.IS", "KOZAL.IS", "KRDMD.IS", "KTLEV.IS", "LMKDC.IS", "MAVI.IS", "MGROS.IS", "MIATK.IS", "OBAMS.IS", "ODAS.IS", "OTKAR.IS", "OYAKC.IS", "PEKGY.IS", "PETKM.IS", "PGSUS.IS", "QUAGR.IS", "REEDR.IS", "SAHOL.IS", "SASA.IS", "SDTTR.IS", "SISE.IS", "SKBNK.IS", "SMRTG.IS", "SOKM.IS", "TABGD.IS", "TAVHL.IS", "TCELL.IS", "THYAO.IS", "TKFEN.IS", "TKNSA.IS", "TMSN.IS", "TOASO.IS", "TSKB.IS", "TTKOM.IS", "TTRAK.IS", "TUKAS.IS", "TUPRS.IS", "TURSG.IS", "ULKER.IS", "VAKBN.IS", "VESBE.IS", "VESTL.IS", "YEOTK.IS", "YKBNK.IS", "YYLGD.IS", "ZOREN.IS" ] def calculate_cci(data, length=20): typical_price = (data['High'] + data['Low'] + data['Close']) / 3 sma = typical_price.rolling(window=length).mean() mean_deviation = typical_price.rolling(window=length).apply(lambda x: np.mean(np.abs(x - x.mean()), axis=0)) cci = (typical_price - sma) / (0.015 * mean_deviation) return cci results = [] for ticker in tickers: try: data = yf.download(ticker, period="6mo") data['CCI'] = calculate_cci(data) last_cci = data['CCI'].iloc[-1] if last_cci > 100: signal = "Güçlü Sat" elif last_cci > 0: signal = "Sat" elif last_cci < -100: signal = "Güçlü Al" else: signal = "Al" results.append({"Ticker": ticker, "CCI": last_cci, "Signal": signal}) except Exception as e: print(f"Error processing {ticker}: {e}") results_df = pd.DataFrame(results) print(results_df.to_string(index=False))

Bir yanıt yazın

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

Web sitenizi üst seviyelere taşıyın