Integrasi API Data Pasaran
Alpha Vantage, Yahoo Finance dan Polygon.io untuk data masa nyata serta data sejarah.
Integrasi API Data Pasaran ialah pelajaran Ejen AI percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Ejen AI, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Ejen AI merangkumi sejumlah 4 pelajaran.
Data Pasaran dalam Ejen Kewangan
Ejen analisis kewangan memerlukan akses kepada data pasaran masa nyata dan sejarah. Jenis data yang biasa termasuk OHLCV (Buka/Tinggi/Rendah/Tutup/Volum), tarikh pendapatan, nisbah fundamental dan rantaian opsyen.
Beberapa API menyediakan data ini: yfinance (percuma, Yahoo Finance), Polygon.io (berbayar, boleh dipercayai) dan Alpha Vantage (peringkat percuma tersedia).
yfinance: Data Harga Sejarah
yfinance menyediakan pembungkus untuk API Yahoo Finance dan merupakan cara terpantas untuk bermula. Ticker.history() mengembalikan DataFrame pandas yang mengandungi 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: Julat Tarikh Tersuai
Gunakan parameter start dan end untuk julat tarikh tersuai, atau interval untuk data dalam sehari (1m, 5m, 1h). Perhatikan bahawa data dalam sehari terhad kepada 60 hari terakhir, bergantung pada selang.
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 pasaran bertaraf profesional dengan had kadar permintaan yang lebih tinggi dan masa operasi yang lebih boleh dipercayai berbanding sumber percuma. Gunakannya untuk ejen kewangan dalam persekitaran pengeluaran.
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 peringkat percuma (25 panggilan sehari) dan peringkat berbayar. Titik akhir TIME_SERIES_DAILY mengembalikan data OHLCV dengan harga terlaras sebagai pilihan.
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, ...}}Had Kadar Permintaan dan Logik Percubaan Semula
Semua API data pasaran mengenakan had kadar permintaan. Jika had tersebut dilampaui, anda akan menerima 429 (Terlalu Banyak Permintaan). Sentiasa laksanakan penangguhan eksponen dan patuhi had 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 Pasaran dalam Cache
Data sejarah tidak berubah — harga penutupan semalam tidak akan berubah. Simpan data tersebut dalam cache untuk mengelakkan panggilan API yang berulang. Gunakan cache cakera ringkas dengan kunci berdasarkan (Ticker, 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'))
Mengendalikan Waktu Dagangan dan Jurang Pasaran
Pasaran ditutup pada hujung minggu dan cuti umum. Julat tarikh yang merangkumi hari bukan dagangan akan mempunyai jurang dalam data. Sentiasa kesan dan kendalikan jurang ini, bukannya menganggap data harian berterusan.
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)Membina Alat Data Pasaran untuk Ejen
Daftarkan pengambil data pasaran sebagai alat ejen. LLM boleh memanggilnya untuk mendapatkan data, kemudian 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 daripada yfinance
Selain data harga, yfinance menyediakan data fundamental: nisbah P/E, pendapatan sesaham, permodalan pasaran dan banyak lagi. Data fundamental memperkayakan analisis ejen melebihi pergerakan harga semata-mata.
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'))Pengendalian Ticker yang Dinyahsenarai dan Tidak Sah
Tidak semua simbol Ticker sah atau sedang didagangkan. Syarikat yang dinyahsenarai mengembalikan sejarah yang kosong. Sentiasa sahkan respons sebelum meneruskan 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 dictApakah yang dikembalikan oleh saiz output “compact” dalam titik akhir TIME_SERIES_DAILY Alpha Vantage?
Memahami parameter saiz output API adalah penting untuk mengurus lebar jalur, kependaman dan kuota API dalam ejen kewangan.
Imbas Kembali Integrasi API Data Pasaran
Gunakan yfinance untuk prototaip pantas (percuma), Polygon.io untuk persekitaran pengeluaran (boleh dipercayai, berbayar) dan Alpha Vantage sebagai pilihan dengan peringkat percuma. Sentiasa laksanakan pengehadan kadar permintaan, cache cakera untuk data sejarah dan pengesanan jurang bagi hari bukan dagangan.
Dedahkan fungsi mendapatkan data sebagai alat ejen supaya LLM boleh meminta data apabila diperlukan.
Pelajari Ejen AI dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 60
- Pelajaran
- 239
Soalan Lazim
Adakah pelajaran “Integrasi API Data Pasaran” percuma?
Ya — teks penuh “Integrasi API Data Pasaran” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Ejen AI, tingkat taraf kepada CoddyKit PRO. Kursus Ejen AI merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Integrasi API Data Pasaran”?
Alpha Vantage, Yahoo Finance dan Polygon.io untuk data masa nyata serta data sejarah. Anda berlatih Ejen AI menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Ejen AI?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Ejen AI di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Integrasi API Data Pasaran” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Ejen AI ini?
Ya. Setiap pelajaran Ejen AI menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Integrasi API Data Pasaran
- Alat Ejen untuk Analisis Portfolio
- Perlindungan Risiko dan Pematuhan
- Ujian Balik Keputusan Ejen