Integrasi API Data Pasar
Alpha Vantage, Yahoo Finance, dan Polygon.io untuk data waktu nyata dan historis.
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 dictApa 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.
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
- Integrasi API Data Pasar
- Alat Agen untuk Analisis Portofolio
- Batas Pengaman Risiko dan Kepatuhan
- Pengujian Balik Keputusan Agen