Markkinadatan API-integraatio
Alpha Vantage, Yahoo Finance ja Polygon.io reaaliaikaiseen ja historialliseen dataan.
Markkinadatan API-integraatio on ilmainen Tekoälyagentit-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Tekoälyagentit-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Tekoälyagentit-kurssilla on yhteensä 4 oppituntia.
Markkinadata talousalan agenteissa
Talousanalyysiin tarkoitetut agentit tarvitsevat reaaliaikaista ja historiallista markkinadataa. Yleisiä datatyyppejä ovat OHLCV (Open/High/Low/Close/Volume), tulosjulkistusten päivämäärät, fundamentaaliset tunnusluvut ja optioketjut.
Useat API:t tarjoavat näitä tietoja: yfinance (maksuton, Yahoo Finance), Polygon.io (maksullinen ja luotettava) sekä Alpha Vantage (maksuton käyttöoikeustaso saatavilla).
yfinance: historialliset hintatiedot
yfinance käärii Yahoo Finance -API:n, ja se on nopein tapa aloittaa. Ticker.history() palauttaa OHLCV-tiedot pandas DataFrame -muodossa.
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: mukautetut päivämäärävälit
Käyttäkää start- ja end-parametreja mukautettuihin päivämääräväleihin tai interval-parametria päivänsisäisiin tietoihin (1m, 5m, 1h). Huomioikaa, että päivänsisäiset tiedot ovat aikavälistä riippuen saatavilla vain viimeiseltä 60 päivältä.
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
Polygon.io tarjoaa ammattitason markkinadataa, suuremmat kutsurajat ja luotettavamman käytettävyyden kuin maksuttomat lähteet. Käyttäkää sitä tuotantokäyttöön tarkoitetuissa talousagenteissa.
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 tarjoaa maksuttoman käyttöoikeustason (25 kutsua päivässä) ja maksullisen tason. TIME_SERIES_DAILY-päätepiste palauttaa OHLCV-tiedot sekä valinnaisesti oikaistut hinnat.
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, ...}}Kutsurajat ja uudelleenyrityslogiikka
Kaikki markkinadata-API:t käyttävät kutsurajoja. Jos ylitätte ne, saatte vastauksen 429 (Too Many Requests). Toteuttakaa aina eksponentiaalinen perääntyminen ja noudattakaa rajoja.
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)Markkinadatan välimuistitus
Historiallinen data on muuttumatonta — eilisen päätöskurssi ei muutu. Tallentakaa se välimuistiin tarpeettomien API-kutsujen välttämiseksi. Käyttäkää yksinkertaista lev välimuistia, jonka avain muodostuu parista (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'))
Kaupankäyntiaikojen ja markkinakatkosten käsittely
Markkinat ovat suljettuina viikonloppuisin ja pyhäpäivinä. Muiden kuin kaupankäyntipäivien yli ulottuvissa päivämääräväleissä datassa on aukkoja. Tunnistakaa ja käsitelkää nämä aukot aina sen sijaan, että olettaisitte päivittäisen datan olevan jatkuvaa.
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)Markkinadatatyökalun rakentaminen agenteille
Rekisteröikää markkinadatan hakija agentin työkaluksi. LLM voi kutsua sitä tietojen hakemiseen ja käyttää sen jälkeen toista työkalua (analyysia) tuloksen käsittelyyn.
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)})Fundamentaaliset tiedot yfinance-palvelusta
Hintatietojen lisäksi yfinance tarjoaa fundamentaalisia tietoja, kuten P/E-luvun, osakekohtaisen tuloksen ja markkina-arvon. Fundamentaaliset tiedot rikastavat agentin analyysia pelkkää hintakehitystä laajemmaksi.
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'))Virheenkäsittely: listalta poistuneet ja virheelliset tickerit
Kaikki ticker-symbolit eivät ole kelvollisia tai parhaillaan kaupankäynnin kohteena. Listalta poistettu yhtiö palauttaa tyhjän historian. Vahvistakaa vastaus aina ennen analyysin jatkamista.
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 dictMitä Alpha Vantage TIME_SERIES_DAILY -päätepisteen ”compact” outputsize palauttaa?
API:n tulosteen kokoparametrien ymmärtäminen on tärkeää kaistanleveyden, viiveen ja talousagenttien API-kiintiöiden hallinnassa.
Markkinadata-API:en integroinnin yhteenveto
Käyttäkää yfinance-palvelua nopeaan prototyyppien kehitykseen (maksuton), Polygon.io-palvelua tuotantokäyttöön (luotettava ja maksullinen) ja Alpha Vantage -palvelua maksuttoman käyttöoikeustason vaihtoehtona. Toteuttakaa aina kutsurajoitus, käyttäkää historiallisen datan yhteydessä levyvälimuistia ja tunnistakaa aukot muiden kuin kaupankäyntipäivien kohdalta.
Tarjotkaa tietojen haku agentin työkaluna, jotta LLM voi pyytää tietoja tarvittaessa.
Opi Tekoälyagentit tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 60
- Oppitunnit
- 239
Usein kysytyt kysymykset
Onko oppitunti ”Markkinadatan API-integraatio” ilmainen?
Kyllä – oppitunnin ”Markkinadatan API-integraatio” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Tekoälyagentit-kurssin, päivitä CoddyKit PROhon. Tekoälyagentit-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Markkinadatan API-integraatio”?
Alpha Vantage, Yahoo Finance ja Polygon.io reaaliaikaiseen ja historialliseen dataan. Harjoittelet Tekoälyagentit-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Tekoälyagentit-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Tekoälyagentit-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Markkinadatan API-integraatio”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Tekoälyagentit-oppitunnilla?
Kyllä. Jokainen Tekoälyagentit-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Markkinadatan API-integraatio
- Salkkuanalyysin agenttityökalut
- Riskien ja vaatimustenmukaisuuden suojakaiteet
- Agentin päätösten backtestaus