AI Agents · Pelajaran

Integrasi API Data Pasar

Alpha Vantage, Yahoo Finance, dan Polygon.io untuk data waktu nyata dan historis.

Pelajaran 1 dari 413 langkah

Integrasi API Data Pasar adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.

Data Pasar dalam Agen Keuangan

Agen analisis keuangan memerlukan akses ke data pasar waktu nyata dan historis. Jenis data yang umum mencakup OHLCV (Pembukaan/Tertinggi/Terendah/Penutupan/Volume), tanggal laporan laba, rasio fundamental, dan rantai opsi.

Beberapa API menyediakan data ini: yfinance (gratis, dari Yahoo Finance), Polygon.io (berbayar, andal), dan Alpha Vantage (tersedia paket gratis).

yfinance: Data Harga Historis

yfinance membungkus API Yahoo Finance dan merupakan cara tercepat untuk memulai. Ticker.history() mengembalikan pandas DataFrame berisi data OHLCV.

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: Rentang Tanggal Khusus

Gunakan parameter start dan end untuk rentang tanggal khusus, atau interval untuk data intrahari (1m, 5m, 1h). Perhatikan bahwa data intrahari terbatas pada 60 hari terakhir, bergantung pada intervalnya.

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())

API REST Polygon.io

Polygon.io menyediakan data pasar berkelas profesional dengan batas laju yang lebih tinggi dan waktu aktif yang lebih andal dibandingkan sumber gratis. Gunakan layanan ini untuk agen keuangan produksi.

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'])

TIME_SERIES_DAILY Alpha Vantage

Alpha Vantage menyediakan paket gratis (25 panggilan per hari) dan paket berbayar. Titik akhir TIME_SERIES_DAILY mengembalikan data OHLCV dengan harga yang telah disesuaikan secara opsional.

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, ...}}

Batas Laju dan Logika Percobaan Ulang

Semua API data pasar memberlakukan batas laju. Jika melampauinya, Anda akan menerima 429 (Terlalu Banyak Permintaan). Selalu terapkan jeda mundur eksponensial dan patuhi batas tersebut.

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)

Menyimpan Data Pasar dalam Cache

Data historis bersifat tidak berubah — harga penutupan kemarin tidak akan berubah. Simpan data tersebut dalam cache untuk menghindari panggilan API yang berulang. Gunakan cache disk sederhana dengan kunci berdasarkan (simbol saham, date_range).

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'))

Menangani Jam Perdagangan dan Celah Pasar

Pasar tutup pada akhir pekan dan hari libur. Rentang tanggal yang mencakup hari tanpa perdagangan akan memiliki celah dalam datanya. Selalu deteksi dan tangani celah ini, bukan menganggap data harian selalu berkesinambungan.

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)

Membangun Alat Data Pasar untuk Agen

Daftarkan pengambil data pasar sebagai alat agen. LLM dapat memanggilnya untuk mengambil data, lalu menggunakan alat lain (analisis) untuk memproses hasilnya.

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)})

Data Fundamental dari yfinance

Selain data harga, yfinance menyediakan data fundamental: rasio P/E, laba per saham, kapitalisasi pasar, dan lainnya. Data fundamental memperkaya analisis agen, tidak hanya mengandalkan pergerakan harga.

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'))

Penanganan Ticker yang Dihapus dari Pencatatan dan Tidak Valid

Tidak semua simbol ticker valid atau masih diperdagangkan. Perusahaan yang telah dihapus dari pencatatan akan mengembalikan riwayat yang kosong. Selalu validasi respons sebelum melanjutkan analisis.

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

Apa yang dikembalikan oleh ukuran keluaran 'compact' pada titik akhir TIME_SERIES_DAILY Alpha Vantage?

Memahami parameter ukuran keluaran API penting untuk mengelola bandwidth, latensi, dan kuota API dalam agen keuangan.

Ringkasan Integrasi API Data Pasar

Gunakan yfinance untuk pembuatan prototipe cepat (gratis), Polygon.io untuk produksi (andal, berbayar), dan Alpha Vantage sebagai pilihan dengan paket gratis. Selalu terapkan pembatasan laju, cache disk untuk data historis, dan deteksi celah untuk hari tanpa perdagangan.

Sediakan pengambilan data sebagai alat agen agar LLM dapat meminta data saat diperlukan.

Gratis untuk memulai

Belajar AI Agents dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
60
Pelajaran
239

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Integrasi API Data Pasar” gratis?

Ya — teks lengkap “Integrasi API Data Pasar” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Integrasi API Data Pasar”?

Alpha Vantage, Yahoo Finance, dan Polygon.io untuk data waktu nyata dan historis. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Agents?

Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Integrasi API Data Pasar” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?

Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Integrasi API Data Pasar
  2. Alat Agen untuk Analisis Portofolio
  3. Batas Pengaman Risiko dan Kepatuhan
  4. Pengujian Balik Keputusan Agen
← Kembali ke AI Agents