alphavantage-api について
Alpha Vantage金融データAPIの利用を支援するスキルです。市場や経済データを取得する開発者向けに、株式、外国為替、暗号資産、テクニカル指標、ファンダメンタルズ、ニュースセンチメントのAPI呼び出しとPythonでの利用方法を扱います。
主な機能
- 01株価時系列と気配値
- 02外国為替と暗号資産のレート
- 03テクニカル指標とファンダメンタルズ
- 04経済指標データ
- 05ニュースセンチメントと市場動向
活用シーン
- 01株価の履歴と気配値の取得
- 02テクニカル指標値の確認
- 03為替と暗号資産レートの確認
- 04決算日程とニュースセンチメントの確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ adaptationio/ skrillz --skill alphavantage-apiインストール後、Claude Code で/alphavantage-apiを入力して読み込まれたか確認します。
同梱ファイルreferences/ENDPOINTS.mdscripts/alphavantage_client.py
詳細
Alpha Vantage API 統合
株式、外国為替、暗号資産、テクニカル指標、ファンダメンタルデータ、経済指標、AI によるニュースセンチメント分析を提供する金融データ API です。
クイックスタート
認証
# Environment variable (recommended)
export ALPHAVANTAGE_API_KEY="your_api_key"
# Or in .env file
ALPHAVANTAGE_API_KEY=your_api_key
基本的な使い方(Python)
import requests
import os
API_KEY = os.getenv("ALPHAVANTAGE_API_KEY")
BASE_URL = "https://www.alphavantage.co/query"
def get_quote(symbol: str) -> dict:
"""Get real-time quote for a symbol."""
response = requests.get(BASE_URL, params={
"function": "GLOBAL_QUOTE",
"symbol": symbol,
"apikey": API_KEY
})
return response.json().get("Global Quote", {})
# Example
quote = get_quote("AAPL")
print(f"AAPL: ${quote['05. price']} ({quote['10. change percent']})")
Python パッケージの使用
from alpha_vantage.timeseries import TimeSeries
from alpha_vantage.techindicators import TechIndicators
# Time series data
ts = TimeSeries(key=API_KEY, output_format='pandas')
data, meta = ts.get_daily(symbol='AAPL', outputsize='compact')
# Technical indicators
ti = TechIndicators(key=API_KEY, output_format='pandas')
rsi, meta = ti.get_rsi(symbol='AAPL', interval='daily', time_period=14)
API 関数リファレンス
株価時系列
| 関数 | 説明 | 無料 |
|---|---|---|
TIME_SERIES_INTRADAY | 1~60 分間隔 | ✅ |
TIME_SERIES_DAILY | 日次 OHLCV | ✅ |
TIME_SERIES_DAILY_ADJUSTED | 株式分割・配当調整済み | ⚠️ プレミアム |
TIME_SERIES_WEEKLY | 週次 OHLCV | ✅ |
TIME_SERIES_MONTHLY | 月次 OHLCV | ✅ |
GLOBAL_QUOTE | 最新の株価 | ✅ |
SYMBOL_SEARCH | 銘柄コードを検索 | ✅ |
ファンダメンタルデータ
| 関数 | 説明 | 無料 |
|---|---|---|
OVERVIEW | 企業概要 | ✅ |
INCOME_STATEMENT | 損益計算書 | ✅ |
BALANCE_SHEET | 貸借対照表 | ✅ |
CASH_FLOW | キャッシュフロー計算書 | ✅ |
EARNINGS | 業績履歴 | ✅ |
EARNINGS_CALENDAR | 今後の決算発表 | ✅ |
IPO_CALENDAR | 今後の IPO | ✅ |
外国為替
| 関数 | 説明 | 無料 |
|---|---|---|
CURRENCY_EXCHANGE_RATE | リアルタイム為替レート | ✅ |
FX_INTRADAY | 日中の外国為替 | ✅ |
FX_DAILY | 日次の外国為替 | ✅ |
FX_WEEKLY | 週次の外国為替 | ✅ |
FX_MONTHLY | 月次の外国為替 | ✅ |
暗号資産
| 関数 | 説明 | 無料 |
|---|---|---|
CURRENCY_EXCHANGE_RATE | 暗号資産のレート | ✅ |
DIGITAL_CURRENCY_DAILY | 日次の暗号資産 | ✅ |
DIGITAL_CURRENCY_WEEKLY | 週次の暗号資産 | ✅ |
DIGITAL_CURRENCY_MONTHLY | 月次の暗号資産 | ✅ |
テクニカル指標(50 種類以上)
| カテゴリ | 指標 |
|---|---|
| トレンド | SMA, EMA, WMA, DEMA, TEMA, KAMA, MAMA, T3, TRIMA |
| モメンタム | RSI, MACD, STOCH, WILLR, ADX, CCI, MFI, ROC, AROON, MOM |
| ボラティリティ | BBANDS, ATR, NATR, TRANGE |
| 出来高 | OBV, AD, ADOSC |
| ヒルベルト | HT_TRENDLINE, HT_SINE, HT_PHASOR など |
経済指標
| 関数 | 説明 | 無料 |
|---|---|---|
REAL_GDP | 米国の GDP | ✅ |
CPI | 消費者物価指数 | ✅ |
INFLATION | インフレ率 | ✅ |
UNEMPLOYMENT | 失業率 | ✅ |
FEDERAL_FUNDS_RATE | フェデラルファンド金利 | ✅ |
TREASURY_YIELD | 米国債利回り | ✅ |
Alpha Intelligence
| 関数 | 説明 | 無料 |
|---|---|---|
NEWS_SENTIMENT | AI センチメント分析 | ✅ |
TOP_GAINERS_LOSERS | 市場の値上がり・値下がり銘柄 | ✅ |
INSIDER_TRANSACTIONS | インサイダー取引 | ⚠️ プレミアム |
ANALYTICS_FIXED_WINDOW | 分析 | ⚠️ プレミアム |
レート制限
| プラン | 1 日あたり | 1 分あたり | 価格 |
|---|---|---|---|
| 無料 | 25 | 5 | $0 |
| プレミアム | 無制限 | 75~1,200 | $49.99~$249.99/月 |
重要: レート制限はキー単位ではなく、IP アドレス単位で適用されます。
よくあるタスク
タスク:日次の株価データを取得する
def get_daily_data(symbol: str, full: bool = False) -> dict:
"""Get daily OHLCV data."""
response = requests.get(BASE_URL, params={
"function": "TIME_SERIES_DAILY",
"symbol": symbol,
"outputsize": "full" if full else "compact",
"apikey": API_KEY
})
return response.json().get("Time Series (Daily)", {})
# Example
data = get_daily_data("AAPL")
latest = list(data.items())[0]
print(f"{latest[0]}: Close ${latest[1]['4. close']}")
タスク:テクニカル指標を取得する
def get_rsi(symbol: str, period: int = 14) -> dict:
"""Get RSI indicator values."""
response = requests.get(BASE_URL, params={
"function": "RSI",
"symbol": symbol,
"interval": "daily",
"time_period": period,
"series_type": "close",
"apikey": API_KEY
})
return response.json().get("Technical Analysis: RSI", {})
# Example
rsi = get_rsi("AAPL")
latest_rsi = list(rsi.values())[0]["RSI"]
print(f"AAPL RSI(14): {latest_rsi}")
タスク:企業概要を取得する
def get_company_overview(symbol: str) -> dict:
"""Get comprehensive company information."""
response = requests.get(BASE_URL, params={
"function": "OVERVIEW",
"symbol": symbol,
"apikey": API_KEY
})
data = response.json()
return {
"name": data.get("Name"),
"description": data.get("Description"),
"sector": data.get("Sector"),
"industry": data.get("Industry"),
"market_cap": data.get("MarketCapitalization"),
"pe_ratio": data.get("PERatio"),
"dividend_yield": data.get("DividendYield"),
"eps": data.get("EPS"),
"52_week_high": data.get("52WeekHigh"),
"52_week_low": data.get("52WeekLow"),
"beta": data.get("Beta")
}
タスク:外国為替レートを取得する
def get_forex_rate(from_currency: str, to_currency: str) -> dict:
"""Get currency exchange rate."""
response = requests.get(BASE_URL, params={
"function": "CURRENCY_EXCHANGE_RATE",
"from_currency": from_currency,
"to_currency": to_currency,
"apikey": API_KEY
})
return response.json().get("Realtime Currency Exchange Rate", {})
# Example
rate = get_forex_rate("USD", "EUR")
print(f"USD/EUR: {rate['5. Exchange Rate']}")
タスク:暗号資産の価格を取得する
def get_crypto_price(symbol: str, market: str = "USD") -> dict:
"""Get cryptocurrency price."""
response = requests.get(BASE_URL, params={
"function": "CURRENCY_EXCHANGE_RATE",
"from_currency": symbol,
"to_currency": market,
"apikey": API_KEY
})
data = response.json().get("Realtime Currency Exchange Rate", {})
return {
"symbol": symbol,
"price": data.get("5. Exchange Rate"),
"last_updated": data.get("6. Last Refreshed")
}
# Example
btc = get_crypto_price("BTC")
print(f"BTC: ${float(btc['price']):,.2f}")
タスク:ニュースセンチメントを取得する
def get_news_sentiment(tickers: str = None, topics: str = None) -> list:
"""Get AI-powered news sentiment analysis."""
params = {
"function": "NEWS_SENTIMENT",
"apikey": API_KEY
}
if tickers:
params["tickers"] = tickers
if topics:
params["topics"] = topics
response = requests.get(BASE_URL, params=params)
return response.json().get("feed", [])
# Example
news = get_news_sentiment(tickers="AAPL")
for article in news[:3]:
sentiment = article.get("overall_sentiment_label", "N/A")
print(f"{article['title'][:50]}... [{sentiment}]")
タスク:経済指標を取得する
def get_economic_indicator(indicator: str) -> dict:
"""Get US economic indicator data."""
response = requests.get(BASE_URL, params={
"function": indicator,
"apikey": API_KEY
})
return response.json()
# Examples
gdp = get_economic_indicator("REAL_GDP")
cpi = get_economic_indicator("CPI")
unemployment = get_economic_indicator("UNEMPLOYMENT")
fed_rate = get_economic_indicator("FEDERAL_FUNDS_RATE")
タスク:決算カレンダーを取得する
def get_earnings_calendar(horizon: str = "3month") -> list:
"""Get upcoming earnings releases."""
import csv
from io import StringIO
response = requests.get(BASE_URL, params={
"function": "EARNINGS_CALENDAR",
"horizon": horizon, # 3month, 6month, 12month
"apikey": API_KEY
})
# Returns CSV format
reader = csv.DictReader(StringIO(response.text))
return list(reader)
# Example
earnings = get_earnings_calendar()
for e in earnings[:5]:
print(f"{e['symbol']}: {e['reportDate']}")
エラー処理
def safe_api_call(params: dict) -> dict:
"""Make API call with error handling."""
params["apikey"] = API_KEY
try:
response = requests.get(BASE_URL, params=params)
data = response.json()
# Check for rate limit
if "Note" in data:
print(f"Rate limit: {data['Note']}")
return {}
# Check for error message
if "Error Message" in data:
print(f"API Error: {data['Error Message']}")
return {}
# Check for information message (often rate limit)
if "Information" in data:
print(f"Info: {data['Information']}")
return {}
return data
except Exception as e:
print(f"Request error: {e}")
return {}
無料機能とプレミアム機能
無料プランに含まれる機能
- 1 日あたり 25 件のリクエスト
- 1 分あたり 5 件のリクエスト
- 過去の時系列データ(20 年以上)
- 50 種類以上のテクニカル指標
- ファンダメンタルデータ
- 外国為替と暗号資産
- 経済指標
- ニュースセンチメント
プレミアムプランが必要な機能
- 1 日あたりのリクエスト数無制限
- 調整済み時系列データ
- 米国市場のリアルタイムデータ
- 15 分遅延データ
- インサイダー取引
- 高度な分析
- 優先サポート
ベストプラクティス
- レスポンスをキャッシュする - データは頻繁には変わりません
- コンパクトな出力サイズを使用する - 履歴全体が必要な場合を除きます
- リクエストを適切にバッチ処理する - 1 日あたり 25 回の上限は厳格です
- レート制限に対応する - レスポンス内の「Note」キーを確認します
- Pandas 出力を使用する -
alpha_vantageパッケージと併用します - 過去のデータを保存する - 同じデータの再取得を避けます
インストール
# Official Python wrapper
pip install alpha_vantage pandas
# For async support
pip install aiohttp
Pandas での使用方法
from alpha_vantage.timeseries import TimeSeries
from alpha_vantage.techindicators import TechIndicators
import pandas as pd
# Initialize with pandas output
ts = TimeSeries(key=API_KEY, output_format='pandas')
ti = TechIndicators(key=API_KEY, output_format='pandas')
# Get daily data
data, meta = ts.get_daily(symbol='AAPL', outputsize='compact')
# Get indicators
sma, _ = ti.get_sma(symbol='AAPL', interval='daily', time_period=20)
rsi, _ = ti.get_rsi(symbol='AAPL', interval='daily', time_period=14)
# Combine
analysis = data.join([sma, rsi])
関連スキル
finnhub-api- リアルタイムの相場情報とニュースtwelvedata-api- より多くの指標と、より緩やかなレート制限fmp-api- ファンダメンタル分析に特化
参考資料
コメント
Markdown 対応