Ejen AI · Pelajaran

Integrasi API Data Pasaran

Alpha Vantage, Yahoo Finance dan Polygon.io untuk data masa nyata serta data sejarah.

Pelajaran 1 daripada 413 langkah

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 dict

Apakah 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.

Percuma untuk bermula

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

  1. Integrasi API Data Pasaran
  2. Alat Ejen untuk Analisis Portfolio
  3. Perlindungan Risiko dan Pematuhan
  4. Ujian Balik Keputusan Ejen
← Kembali ke Ejen AI