mcpField
A
alphavantage-api

alphavantage-api

github.com/adaptationioデータ・データベース97 回インストール
リポジトリ

alphavantage-api について

Alpha Vantage金融データAPIの利用を支援するスキルです。市場や経済データを取得する開発者向けに、株式、外国為替、暗号資産、テクニカル指標、ファンダメンタルズ、ニュースセンチメントのAPI呼び出しとPythonでの利用方法を扱います。

主な機能

  1. 01株価時系列と気配値
  2. 02外国為替と暗号資産のレート
  3. 03テクニカル指標とファンダメンタルズ
  4. 04経済指標データ
  5. 05ニュースセンチメントと市場動向

活用シーン

  1. 01株価の履歴と気配値の取得
  2. 02テクニカル指標値の確認
  3. 03為替と暗号資産レートの確認
  4. 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_INTRADAY1~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_SENTIMENTAI センチメント分析✅
TOP_GAINERS_LOSERS市場の値上がり・値下がり銘柄✅
INSIDER_TRANSACTIONSインサイダー取引⚠️ プレミアム
ANALYTICS_FIXED_WINDOW分析⚠️ プレミアム

レート制限

プラン1 日あたり1 分あたり価格
無料255$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. レスポンスをキャッシュする - データは頻繁には変わりません
  2. コンパクトな出力サイズを使用する - 履歴全体が必要な場合を除きます
  3. リクエストを適切にバッチ処理する - 1 日あたり 25 回の上限は厳格です
  4. レート制限に対応する - レスポンス内の「Note」キーを確認します
  5. Pandas 出力を使用する - alpha_vantage パッケージと併用します
  6. 過去のデータを保存する - 同じデータの再取得を避けます

インストール

# 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 - ファンダメンタル分析に特化

参考資料

コメント