关于 alpaca-data
alpaca-data 是调用 Alpaca 市场数据 API 的数据技能,面向需要股票、加密货币和期权行情的开发者。它支持历史与实时数据,并提供 Python 示例和下载脚本。
主要功能
- 01查询股票历史 OHLCV、报价与成交
- 02获取加密货币和期权数据
- 03读取新闻、快照及活跃股筛选
- 04订阅股票实时数据流
- 05使用脚本下载行情数据
适用场景
- 01回测股票或加密货币策略
- 02获取期权合约及历史行情
- 03监控股票实时行情
- 04批量下载指定标的行情
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ gauss314/ skills --skill alpaca-data安装后在 Claude Code 中输入/alpaca-data确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/options_reference.mdscripts/download_crypto_bars.pydownload_options.pydownload_stock_bars.py详细介绍
Alpaca Data — 市场数据 API
提供股票、加密货币和期权的历史及实时市场数据的 API。
基础 URL: https://data.alpaca.markets
SDK: pip install alpaca-py
文档: docs.alpaca.markets
身份验证
获取 API 密钥
- 访问 app.alpaca.markets
- 创建账户(模拟交易免费)
- 前往“API Keys” → Generate New Keys
- 保存 API Key 和 Secret Key
配置
import os
from alpaca.data.historical import StockHistoricalDataClient
# Keys (requerido para datos de acciones)
API_KEY = os.getenv("APCA_API_KEY_ID")
SECRET_KEY = os.getenv("APCA_API_SECRET_KEY")
client = StockHistoricalDataClient(API_KEY, SECRET_KEY)
# Crypto NO requiere keys
from alpaca.data.historical import CryptoHistoricalDataClient
crypto_client = CryptoHistoricalDataClient()
⚠️ 绝不要将密钥硬编码到共享的代码中。
速率限制
| 计划 | 请求/分钟 | 数据 |
|---|---|---|
| 免费(IEX) | 200 | 约 5 年历史数据,1 个交易所 |
| 付费(SIP) | 更高 | 所有美国交易所,约 7 年 |
建议
- 缓存数据 — 历史数据不会变化
- 批量请求 — 一次调用请求多个代码
- 使用
limit=10000— 每次请求的上限 - 使用
next_page_token分页 — 适用于大量数据
数据源
| 数据源 | 描述 | 费用 |
|---|---|---|
iex | Investors Exchange(约占交易量的 2.5%) | 免费 |
sip | 所有美国交易所(综合数据) | 付费 |
boats | Blue Ocean ATS(延长交易时段) | 付费 |
otc | 场外交易 | 付费 |
免费层级 = 仅 IEX
历史股票数据
K 线(OHLCV)
from alpaca.data.requests import StockBarsRequest
from alpaca.data.timeframe import TimeFrame
from datetime import datetime
request = StockBarsRequest(
symbol_or_symbols=["AAPL", "GOOGL"],
timeframe=TimeFrame.Day,
start=datetime(2023, 1, 1),
end=datetime(2024, 12, 31),
feed="iex" # free tier
)
bars = client.get_stock_bars(request)
df = bars.df # DataFrame
可用的 TimeFrame:
TimeFrame.Minute/TimeFrame(5, TimeFrame.Minute)TimeFrame.HourTimeFrame.DayTimeFrame.WeekTimeFrame.Month
报价(买价/卖价)
from alpaca.data.requests import StockQuotesRequest
request = StockQuotesRequest(
symbol_or_symbols=["AAPL"],
start=datetime(2024, 1, 1),
end=datetime(2024, 1, 31),
feed="iex"
)
quotes = client.get_stock_quotes(request)
成交
from alpaca.data.requests import StockTradesRequest
request = StockTradesRequest(
symbol_or_symbols=["AAPL"],
start=datetime(2024, 1, 1),
feed="iex"
)
trades = client.get_stock_trades(request)
最新数据
# Latest bar
bars = client.get_stock_latest_bar(["AAPL", "GOOGL"])
# Latest quote
quotes = client.get_stock_latest_quote(["AAPL"])
# Latest trade
trades = client.get_stock_latest_trade(["AAPL"])
快照
from alpaca.data.requests import SnapshotRequest
request = SnapshotRequest(
symbol_or_symbols=["AAPL", "GOOGL"]
)
snapshots = client.get_snapshot(request)
历史加密货币数据
无需 API 密钥
from alpaca.data.historical import CryptoHistoricalDataClient
from alpaca.data.requests import CryptoBarsRequest
from alpaca.data.timeframe import TimeFrame
from datetime import datetime
client = CryptoHistoricalDataClient()
request = CryptoBarsRequest(
symbol_or_symbols=["BTC/USD", "ETH/USD"],
timeframe=TimeFrame.Day,
start=datetime(2023, 1, 1),
end=datetime(2024, 12, 31)
)
bars = client.get_crypto_bars(request)
df = bars.df
加密货币订单簿
from alpaca.data.requests import CryptoLatestQuoteRequest
request = CryptoLatestQuoteRequest(symbol_or_symbols=["BTC/USD"])
quotes = client.get_crypto_latest_quote(request)
历史期权数据
期权链
# Obtener contratos disponibles
from alpaca.data.requests import OptionContractsRequest
request = OptionContractsRequest(
underlying_symbols=["AAPL"],
expiration_date_gte="2024-01-01", # desde esta fecha
expiration_date_lte="2024-12-31", # hasta esta fecha
strike_price_gte=100, # strikes mínimo
strike_price_lte=200 # strikes máximo
)
contracts = client.get_option_contracts(request)
期权 K 线/成交/报价
from alpaca.data.requests import OptionBarsRequest
# Buscar contract ID primero
contract_id = "6e58f870-fe73-4583-81e4-b9a37892c36f"
request = OptionBarsRequest(
symbol_or_contract_ids=[contract_id],
start=datetime(2024, 1, 1),
end=datetime(2024, 1, 31)
)
bars = client.get_option_bars(request)
期权代码参考
请参阅 ./references/options_reference.md,了解:
- 期权代码(AAPL240119C00100000)
- 筛选参数
- 所需的交易级别
新闻
from alpaca.data.requests import StockNewsRequest
request = StockNewsRequest(
symbol_or_symbols=["AAPL", "GOOGL"],
start=datetime(2024, 1, 1),
end=datetime(2024, 1, 31)
)
news = client.get_stock_news(request)
筛选器
from alpaca.data.requests import MostActivesRequest
request = MostActivesRequest(
by="volume", # volume, share, number
top=10,
date="2024-01-15"
)
movers = client.get_most_actives(request)
WebSocket 实时数据(可选)
from alpaca.data.stream import StockDataStream
ws = StockDataStream(API_KEY, SECRET_KEY)
async def handle_bar(bar):
print(bar)
ws.subscribe_bars(handle_bar, "AAPL", "GOOGL")
ws.run()
下载脚本
使用 ./scripts/ 中的脚本:
# Descargar bars de acciones
python ./scripts/download_stock_bars.py --symbols AAPL,GOOGL --days 365 --output data/
# Descargar crypto
python ./scripts/download_crypto_bars.py --symbols BTC,ETH --days 90 --output data/
# Descargar option contracts
python ./scripts/download_options.py --symbol AAPL --output data/
常见错误
| 错误 | 原因 | 解决方案 |
|---|---|---|
| 403 Forbidden | 密钥无效或没有权限 | 检查 API 密钥 |
| 429 Too Many Requests | 速率限制 | 等待,使用缓存 |
| Empty response | 没有该代码的数据 | 检查代码 |
| "options_enabled" | 该代码没有期权 | 使用有期权的代码 |
与其他 API 的比较
| 功能 | Alpaca | Alpha Vantage | Data912 |
|---|---|---|---|
| 免费层级 | ✅ IEX(1 个交易所) | ✅ 每天 25 次 | ✅ 全部 ARS |
| 美国股票 | ✅ | ✅ | ❌ |
| 加密货币 | ✅ | ✅ | ❌ |
| 期权 | ✅ | ❌ | ❌ |
| 历史数据深度 | IEX 约 5 年 | 有限 | 有限 |
| Python SDK | ✅ alpaca-py | ✅ | ❌ |
选择 Alpaca: 获取美国市场数据(股票、加密货币、期权)和日内数据。
选择 Data912: 获取阿根廷市场数据。
选择 Alpha Vantage: 获取技术指标和外汇数据。
评论
支持 Markdown