0Pricing
AI Agents · Ders

Piyasa Verisi API Entegrasyonu

Gerçek zamanlı ve geçmiş veriler için Alpha Vantage, Yahoo Finance ve Polygon.io.

Piyasa Verisi API Entegrasyonu, CoddyKit'te ücretsiz bir AI Agents dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Agents öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Agents kursu toplamda 4 dersten oluşur.

Finansal Aracılarda Piyasa Verileri

Finansal analiz aracılarının gerçek zamanlı ve geçmiş piyasa verilerine erişmesi gerekir. Yaygın veri türleri arasında OHLCV (Açılış/Yüksek/Düşük/Kapanış/Hacim), kazanç tarihleri, temel oranlar ve opsiyon zincirleri bulunur.

Bu verileri sağlayan çeşitli API'ler vardır: yfinance (ücretsiz, Yahoo Finance), Polygon.io (ücretli, güvenilir) ve Alpha Vantage (ücretsiz katmanı mevcut).

yfinance: Geçmiş Fiyat Verileri

yfinance, Yahoo Finance API'sini sarmalar ve kullanmaya başlamanın en hızlı yoludur. Ticker.history(), OHLCV verilerinden oluşan bir pandas DataFrame döndürür.

import yfinance as yf

ticker = yf.Ticker('AAPL')

# 1 year of daily data
history = ticker.history(period='1y')
print(history.tail(3))
#                  Open        High         Low       Close    Volume
# Date
# 2026-05-27  189.1500  190.3200  188.9200  190.0500  55234000
# 2026-05-28  190.4200  191.5600  189.7800  191.1200  62345000
print(f'Rows: {len(history)}')

yfinance: Özel Tarih Aralıkları

Özel tarih aralıkları için start ve end parametrelerini, gün içi veriler içinse (1m, 5m, 1h) interval parametresini kullanın. Gün içi verilerin, aralığa bağlı olarak yalnızca son 60 günle sınırlı olduğunu unutmayın.

import yfinance as yf

ticker = yf.Ticker('MSFT')

# Custom date range
history = ticker.history(start='2024-01-01', end='2024-12-31')
print(f'Trading days in 2024: {len(history)}')

# Batch multiple tickers
tickers = yf.download(['AAPL', 'MSFT', 'GOOGL'],
                       start='2025-01-01', end='2025-12-31')
print(tickers['Close'].head())

Polygon.io REST API'si

Polygon.io, ücretsiz kaynaklara kıyasla profesyonel düzeyde piyasa verileri, daha yüksek istek limitleri ve daha güvenilir çalışma süresi sağlar. Üretim ortamındaki finansal aracılar için bunu kullanın.

import requests

POLYGON_KEY = 'YOUR_POLYGON_API_KEY'

def get_polygon_daily(ticker: str, from_date: str, to_date: str) -> list[dict]:
    url = f'https://api.polygon.io/v2/aggs/ticker/{ticker}/range/1/day/{from_date}/{to_date}'
    resp = requests.get(url, params={'apiKey': POLYGON_KEY, 'limit': 365})
    resp.raise_for_status()
    data = resp.json()
    return data.get('results', [])

bars = get_polygon_daily('AAPL', '2025-01-01', '2025-12-31')
print(f'Bars returned: {len(bars)}')
if bars:
    print('Latest close:', bars[-1]['c'])

Alpha Vantage TIME_SERIES_DAILY

Alpha Vantage, ücretsiz bir katman (günde 25 çağrı) ve ücretli bir katman sunar. TIME_SERIES_DAILY uç noktası, isteğe bağlı olarak düzeltilmiş fiyatlarla OHLCV verilerini döndürür.

import requests

ALPHA_KEY = 'YOUR_ALPHA_VANTAGE_KEY'

def get_alpha_vantage_daily(symbol: str, outputsize: str = 'compact') -> dict:
    # outputsize: 'compact' (100 days) or 'full' (20+ years)
    resp = requests.get('https://www.alphavantage.co/query', params={
        'function':   'TIME_SERIES_DAILY_ADJUSTED',
        'symbol':     symbol,
        'outputsize': outputsize,
        'apikey':     ALPHA_KEY
    })
    resp.raise_for_status()
    data = resp.json()
    series = data.get('Time Series (Daily)', {})
    return series   # dict: {date_str: {open, high, low, close, volume, ...}}

İstek Limitleri ve Yeniden Deneme Mantığı

Tüm piyasa verisi API'leri istek limitleri uygular. Bu limitleri aşarsanız 429 (Çok Fazla İstek) hatası alırsınız. Her zaman üstel geri çekilme uygulayın ve limitlere uyun.

import time, requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

def make_rate_limited_session(calls_per_minute: int = 5) -> requests.Session:
    session = requests.Session()
    retry = Retry(
        total=3,
        backoff_factor=2,         # 1s, 2s, 4s waits
        status_forcelist=[429, 500, 502, 503, 504]
    )
    adapter = HTTPAdapter(max_retries=retry)
    session.mount('https://', adapter)
    session._calls_per_min = calls_per_minute
    session._min_interval  = 60.0 / calls_per_minute
    session._last_call     = 0.0
    return session

def rate_limited_get(session, url, **kwargs):
    elapsed = time.time() - session._last_call
    if elapsed < session._min_interval:
        time.sleep(session._min_interval - elapsed)
    session._last_call = time.time()
    return session.get(url, **kwargs)

Piyasa Verilerini Önbelleğe Alma

Geçmiş veriler değişmezdir; dünkü kapanış fiyatı hiçbir zaman değişmez. Gereksiz API çağrılarını önlemek için bu verileri önbelleğe alın. (ticker, date_range) anahtarını kullanan basit bir disk önbelleği kullanın.

import hashlib, json, os

CACHE_DIR = '/tmp/market_cache'
os.makedirs(CACHE_DIR, exist_ok=True)

def cache_key(ticker: str, start: str, end: str) -> str:
    return hashlib.md5(f'{ticker}_{start}_{end}'.encode()).hexdigest()

def get_cached(ticker: str, start: str, end: str):
    key = cache_key(ticker, start, end)
    path = os.path.join(CACHE_DIR, f'{key}.json')
    if os.path.exists(path):
        with open(path) as f:
            return json.load(f)
    return None

def set_cached(ticker: str, start: str, end: str, data):
    key = cache_key(ticker, start, end)
    path = os.path.join(CACHE_DIR, f'{key}.json')
    with open(path, 'w') as f:
        json.dump(data, f)

if __name__ == '__main__':
    set_cached('AAPL', '2024-01-01', '2024-01-31', {'close': [150, 151, 149]})
    cached = get_cached('AAPL', '2024-01-01', '2024-01-31')
    print('Cached data for AAPL:', cached)
    print('Cache miss for MSFT:', get_cached('MSFT', '2024-01-01', '2024-01-31'))

İşlem Saatlerini ve Piyasa Boşluklarını Ele Alma

Piyasalar hafta sonlarında ve tatillerde kapalıdır. İşlem yapılmayan günleri kapsayan tarih aralıklarında verilerde boşluklar oluşur. Günlük verilerin kesintisiz olduğunu varsaymak yerine bu boşlukları her zaman algılayıp ele alın.

import pandas as pd
from pandas.tseries.offsets import BDay

def detect_gaps(history: pd.DataFrame) -> list[str]:
    if history.empty:
        return []
    date_range = pd.date_range(
        start=history.index.min(),
        end=history.index.max(),
        freq=BDay()  # Business days only
    )
    missing = date_range.difference(history.index)
    return [str(d.date()) for d in missing]

import yfinance as yf
history = yf.Ticker('AAPL').history(start='2024-12-23', end='2025-01-07')
gaps = detect_gaps(history)
print('Missing business days (holidays):', gaps)

Aracılar İçin Piyasa Verisi Aracı Oluşturma

Bir piyasa verisi alıcısını aracı aracı olarak kaydedin. LLM, verileri almak için onu çağırabilir ve ardından sonucu işlemek üzere başka bir aracı (analiz aracı) kullanabilir.

import yfinance as yf, json

def get_market_data_tool(ticker: str, period: str = '1y') -> str:
    cached = get_cached(ticker, period, 'yfinance')
    if cached:
        return json.dumps(cached)
    try:
        hist = yf.Ticker(ticker).history(period=period)
        if hist.empty:
            return json.dumps({'error': f'No data for {ticker}'})
        result = {
            'ticker':     ticker,
            'period':     period,
            'start':      str(hist.index.min().date()),
            'end':        str(hist.index.max().date()),
            'latest_close': float(hist['Close'].iloc[-1]),
            'pct_change_ytd': float((hist['Close'].iloc[-1] / hist['Close'].iloc[0] - 1) * 100),
            'rows':       len(hist)
        }
        set_cached(ticker, period, 'yfinance', result)
        return json.dumps(result)
    except Exception as e:
        return json.dumps({'error': str(e)})

yfinance ile Temel Veriler

yfinance, fiyat verilerinin yanı sıra F/K oranı, hisse başına kazanç, piyasa değeri ve daha fazlasını içeren temel veriler de sağlar. Temel veriler, bir aracının analizini yalnızca fiyat hareketlerinin ötesine taşıyarak zenginleştirir.

import yfinance as yf

ticker = yf.Ticker('AAPL')
info  = ticker.info

print('Market Cap:      ', info.get('marketCap'))
print('P/E Ratio:       ', info.get('trailingPE'))
print('EPS:             ', info.get('trailingEps'))
print('52-Week High:    ', info.get('fiftyTwoWeekHigh'))
print('52-Week Low:     ', info.get('fiftyTwoWeekLow'))
print('Dividend Yield:  ', info.get('dividendYield'))
print('Analyst Target:  ', info.get('targetMeanPrice'))

Hata İşleme: Borsadan Çıkarılmış ve Geçersiz Ticker'lar

Tüm ticker sembolleri geçerli değildir veya hâlen işlem görmemektedir. Borsadan çıkarılmış bir şirket boş bir geçmiş döndürür. Analize devam etmeden önce yanıtı her zaman doğrulayın.

import yfinance as yf

def safe_fetch(ticker_symbol: str, period: str = '1y') -> dict:
    try:
        ticker = yf.Ticker(ticker_symbol)
        history = ticker.history(period=period)

        if history.empty:
            return {
                'error': f'No data for {ticker_symbol}. May be delisted or invalid.',
                'ticker': ticker_symbol
            }
        return {
            'ticker':       ticker_symbol,
            'latest_close': float(history['Close'].iloc[-1]),
            'data_start':   str(history.index.min().date()),
            'bars':         len(history)
        }
    except Exception as e:
        return {'error': str(e), 'ticker': ticker_symbol}

print(safe_fetch('AAPL'))    # valid
print(safe_fetch('INVALID')) # returns error dict

Alpha Vantage TIME_SERIES_DAILY uç noktasında “compact” outputsize ne döndürür

API çıktı boyutu parametrelerini anlamak, finansal aracılarda bant genişliğini, gecikmeyi ve API kotalarını yönetmek açısından önemlidir.

Piyasa Verisi API Entegrasyonu Özeti

Hızlı prototip oluşturma için yfinance'ı (ücretsiz), üretim ortamı için Polygon.io'yu (güvenilir, ücretli) ve ücretsiz katman seçeneği için Alpha Vantage'ı kullanın. İşlem yapılmayan günler için her zaman istek sınırlama, geçmiş veriler için disk önbelleğe alma ve boşluk algılama uygulayın.

Veri almayı bir aracı aracı olarak sunun; böylece LLM gerektiğinde veri isteyebilir.

Sıkça Sorulan Sorular

“Piyasa Verisi API Entegrasyonu” dersi ücretsiz mi?

Evet — “Piyasa Verisi API Entegrasyonu” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Agents kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Agents kursu toplamda 4 dersten oluşur.

“Piyasa Verisi API Entegrasyonu” dersinde ne öğreneceğim?

Gerçek zamanlı ve geçmiş veriler için Alpha Vantage, Yahoo Finance ve Polygon.io. AI Agents ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

AI Agents öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te AI Agents, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Piyasa Verisi API Entegrasyonu” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu AI Agents dersinde kod yazıp çalıştırabilir miyim?

Evet. Her AI Agents dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Piyasa Verisi API Entegrasyonu
  2. Portföy Analizi Aracı Araçları
  3. Risk ve Uyumluluk Güvenlik Sınırları
  4. Aracı Kararlarını Geriye Dönük Test Etme
← AI Agents Sayfasına Dön