alpaca-data
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseAlpaca Data — Market Data API
Alpaca Data — 市场数据API
API de datos de mercado con datos históricos y en tiempo real para acciones, crypto y opciones.
提供股票、加密货币和期权的历史与实时数据的市场数据API。
Autenticación
身份验证
Obtener API Keys
获取API密钥
- Ir a app.alpaca.markets
- Crear cuenta (paper trading es gratis)
- Ir a "API Keys" → Generate New Keys
- Guardar API Key y Secret Key
- 访问 app.alpaca.markets
- 创建账户(模拟交易免费)
- 进入「API Keys」→ 生成新密钥
- 保存API Key和Secret Key
Configuración
配置
python
import os
from alpaca.data.historical import StockHistoricalDataClientpython
import os
from alpaca.data.historical import StockHistoricalDataClientKeys (requerido para datos de acciones)
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)
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
Crypto NO requiere keys
from alpaca.data.historical import CryptoHistoricalDataClient
crypto_client = CryptoHistoricalDataClient()
**⚠️ NUNCA hardcodear keys en código que se comparte.**
---from alpaca.data.historical import CryptoHistoricalDataClient
crypto_client = CryptoHistoricalDataClient()
**⚠️ 切勿在共享代码中硬编码密钥。**
---Rate Limits
速率限制
| Plan | Requests/Min | Datos |
|---|---|---|
| Free (IEX) | 200 | ~5 años historia, 1 exchange |
| Paid (SIP) | Mayor | Todas las bolsas US, ~7 años |
| 方案 | 请求数/分钟 | 数据范围 |
|---|---|---|
| 免费版(IEX) | 200 | 约5年历史数据,1个交易所 |
| 付费版(SIP) | 更高 | 美国所有交易所,约7年数据 |
Recomendaciones
建议
- Cachear datos — los datos históricos no cambian
- Batch requests — pedir múltiples símbolos en una llamada
- Usar — máximo por request
limit=10000 - Paginar con — para datos grandes
next_page_token
- 缓存数据 — 历史数据不会更改
- 批量请求 — 一次请求多个标的
- 使用— 单次请求最大值
limit=10000 - 使用分页 — 处理大量数据
next_page_token
Data Feeds
数据源
| Feed | Descripción | Costo |
|---|---|---|
| Investors Exchange (~2.5% del volumen) | Gratis |
| Todas las bolsas US (consolidado) | Paid |
| Blue Ocean ATS (horas extendidas) | Paid |
| Over-the-counter | Paid |
Free tier = solo IEX
| 数据源 | 描述 | 费用 |
|---|---|---|
| 投资者交易所(约占2.5%交易量) | 免费 |
| 美国所有交易所(整合数据) | 付费 |
| Blue Ocean ATS(盘后时段) | 付费 |
| 场外交易市场 | 付费 |
免费版仅支持IEX
Historical Stock Data
历史股票数据
Bars (OHLCV)
K线数据(OHLCV)
python
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 # DataFrameTimeFrames disponibles:
- /
TimeFrame.MinuteTimeFrame(5, TimeFrame.Minute) TimeFrame.HourTimeFrame.DayTimeFrame.WeekTimeFrame.Month
python
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.MinuteTimeFrame(5, TimeFrame.Minute) TimeFrame.HourTimeFrame.DayTimeFrame.WeekTimeFrame.Month
Quotes (Bid/Ask)
报价数据(买/卖盘)
python
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)python
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)Trades
成交数据
python
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)python
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 Data
最新数据
python
undefinedpython
undefinedLatest bar
Latest bar
bars = client.get_stock_latest_bar(["AAPL", "GOOGL"])
bars = client.get_stock_latest_bar(["AAPL", "GOOGL"])
Latest quote
Latest quote
quotes = client.get_stock_latest_quote(["AAPL"])
quotes = client.get_stock_latest_quote(["AAPL"])
Latest trade
Latest trade
trades = client.get_stock_latest_trade(["AAPL"])
undefinedtrades = client.get_stock_latest_trade(["AAPL"])
undefinedSnapshots
快照数据
python
from alpaca.data.requests import SnapshotRequest
request = SnapshotRequest(
symbol_or_symbols=["AAPL", "GOOGL"]
)
snapshots = client.get_snapshot(request)python
from alpaca.data.requests import SnapshotRequest
request = SnapshotRequest(
symbol_or_symbols=["AAPL", "GOOGL"]
)
snapshots = client.get_snapshot(request)Historical Crypto Data
历史加密货币数据
No requiere API keys
python
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无需API密钥
python
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.dfCrypto Orderbook
加密货币订单簿
python
from alpaca.data.requests import CryptoLatestQuoteRequest
request = CryptoLatestQuoteRequest(symbol_or_symbols=["BTC/USD"])
quotes = client.get_crypto_latest_quote(request)python
from alpaca.data.requests import CryptoLatestQuoteRequest
request = CryptoLatestQuoteRequest(symbol_or_symbols=["BTC/USD"])
quotes = client.get_crypto_latest_quote(request)Historical Options Data
历史期权数据
Option Chains
期权链
python
undefinedpython
undefinedObtener contratos disponibles
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)
undefinedfrom 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)
undefinedOption Bars/Trades/Quotes
期权K线/成交/报价数据
python
from alpaca.data.requests import OptionBarsRequestpython
from alpaca.data.requests import OptionBarsRequestBuscar contract ID primero
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)
---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)
---Options Tickers Reference
期权代码参考
Ver ./references/options_reference.md para:
- Símbolos de opciones (AAPL240119C00100000)
- Parámetros de filtrado
- Trading levels requeridos
查看 ./references/options_reference.md 获取:
- 期权代码(AAPL240119C00100000)
- 筛选参数
- 所需交易权限
News
新闻数据
python
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)python
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)Screener
筛选工具
python
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)python
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 Real-Time (Opcional)
WebSocket实时数据(可选)
python
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()python
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 de Descarga
下载脚本
Usá los scripts en ./scripts/:
bash
undefined使用 ./scripts/ 中的脚本:
bash
undefinedDescargar bars de acciones
Descargar bars de acciones
python ./scripts/download_stock_bars.py --symbols AAPL,GOOGL --days 365 --output data/
python ./scripts/download_stock_bars.py --symbols AAPL,GOOGL --days 365 --output data/
Descargar crypto
Descargar crypto
python ./scripts/download_crypto_bars.py --symbols BTC,ETH --days 90 --output data/
python ./scripts/download_crypto_bars.py --symbols BTC,ETH --days 90 --output data/
Descargar option contracts
Descargar option contracts
python ./scripts/download_options.py --symbol AAPL --output data/
---python ./scripts/download_options.py --symbol AAPL --output data/
---Errores Comunes
常见错误
| Error | Causa | Solución |
|---|---|---|
| 403 Forbidden | Keys inválidas o sin permisos | Verificar API keys |
| 429 Too Many Requests | Rate limit | Esperar, usar cache |
| Empty response | Sin datos para el símbolo | Verificar símbolo |
| "options_enabled" | Symbol sin opciones | Usar símbolo con opciones |
| 错误 | 原因 | 解决方案 |
|---|---|---|
| 403 Forbidden | 密钥无效或无权限 | 检查API密钥 |
| 429 Too Many Requests | 触发速率限制 | 等待,使用缓存 |
| 空响应 | 该标的无数据 | 检查标的代码 |
| "options_enabled" | 标的无期权产品 | 使用有期权的标的 |
Comparación con Otras APIs
与其他API对比
| Feature | Alpaca | Alpha Vantage | Data912 |
|---|---|---|---|
| Free tier | ✅ IEX (1 exchange) | ✅ 25/day | ✅ Todo ARS |
| Stocks US | ✅ | ✅ | ❌ |
| Crypto | ✅ | ✅ | ❌ |
| Opciones | ✅ | ❌ | ❌ |
| Historical depth | ~5 años IEX | Limitado | Limitado |
| SDK Python | ✅ alpaca-py | ✅ | ❌ |
Elegí Alpaca para: datos de EE.UU. (stocks, crypto, opciones), datos intraday.
Elegí Data912 para: datos del mercado argentino.
Elegí Alpha Vantage para: indicadores técnicos, forex.
Elegí Data912 para: datos del mercado argentino.
Elegí Alpha Vantage para: indicadores técnicos, forex.
| 功能 | Alpaca | Alpha Vantage | Data912 |
|---|---|---|---|
| 免费版 | ✅ IEX(1个交易所) | ✅ 25次/天 | ✅ 全部ARS计价数据 |
| 美国股票 | ✅ | ✅ | ❌ |
| 加密货币 | ✅ | ✅ | ❌ |
| 期权 | ✅ | ❌ | ❌ |
| 历史数据深度 | IEX约5年 | 有限 | 有限 |
| Python SDK | ✅ alpaca-py | ✅ | ❌ |
选择Alpaca的场景: 美国市场数据(股票、加密货币、期权)、日内数据。
选择Data912的场景: 阿根廷市场数据。
选择Alpha Vantage的场景: 技术指标、外汇数据。
选择Data912的场景: 阿根廷市场数据。
选择Alpha Vantage的场景: 技术指标、外汇数据。