alpaca-data

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Alpaca 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.
Base URL:
https://data.alpaca.markets

SDK:
pip install alpaca-py

Docs: docs.alpaca.markets

提供股票、加密货币和期权的历史与实时数据的市场数据API。
Base URL:
https://data.alpaca.markets

SDK:
pip install alpaca-py

Docs: docs.alpaca.markets

Autenticación

身份验证

Obtener API Keys

获取API密钥

  1. Ir a app.alpaca.markets
  2. Crear cuenta (paper trading es gratis)
  3. Ir a "API Keys" → Generate New Keys
  4. Guardar API Key y Secret Key
  1. 访问 app.alpaca.markets
  2. 创建账户(模拟交易免费)
  3. 进入「API Keys」→ 生成新密钥
  4. 保存API KeySecret Key

Configuración

配置

python
import os
from alpaca.data.historical import StockHistoricalDataClient
python
import os
from alpaca.data.historical import StockHistoricalDataClient

Keys (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

速率限制

PlanRequests/MinDatos
Free (IEX)200~5 años historia, 1 exchange
Paid (SIP)MayorTodas 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
    limit=10000
    — máximo por request
  • Paginar con
    next_page_token
    — para datos grandes

  • 缓存数据 — 历史数据不会更改
  • 批量请求 — 一次请求多个标的
  • 使用
    limit=10000
    — 单次请求最大值
  • 使用
    next_page_token
    分页
    — 处理大量数据

Data Feeds

数据源

FeedDescripciónCosto
iex
Investors Exchange (~2.5% del volumen)Gratis
sip
Todas las bolsas US (consolidado)Paid
boats
Blue Ocean ATS (horas extendidas)Paid
otc
Over-the-counterPaid
Free tier = solo IEX

数据源描述费用
iex
投资者交易所(约占2.5%交易量)免费
sip
美国所有交易所(整合数据)付费
boats
Blue Ocean ATS(盘后时段)付费
otc
场外交易市场付费
免费版仅支持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  # DataFrame
TimeFrames disponibles:
  • TimeFrame.Minute
    /
    TimeFrame(5, TimeFrame.Minute)
  • TimeFrame.Hour
  • TimeFrame.Day
  • TimeFrame.Week
  • TimeFrame.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.Minute
    /
    TimeFrame(5, TimeFrame.Minute)
  • TimeFrame.Hour
  • TimeFrame.Day
  • TimeFrame.Week
  • TimeFrame.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
undefined
python
undefined

Latest 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"])
undefined
trades = client.get_stock_latest_trade(["AAPL"])
undefined

Snapshots

快照数据

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.df

Crypto 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
undefined
python
undefined

Obtener 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)
undefined
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)
undefined

Option Bars/Trades/Quotes

期权K线/成交/报价数据

python
from alpaca.data.requests import OptionBarsRequest
python
from alpaca.data.requests import OptionBarsRequest

Buscar 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
undefined

Descargar 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

常见错误

ErrorCausaSolución
403 ForbiddenKeys inválidas o sin permisosVerificar API keys
429 Too Many RequestsRate limitEsperar, usar cache
Empty responseSin datos para el símboloVerificar símbolo
"options_enabled"Symbol sin opcionesUsar símbolo con opciones

错误原因解决方案
403 Forbidden密钥无效或无权限检查API密钥
429 Too Many Requests触发速率限制等待,使用缓存
空响应该标的无数据检查标的代码
"options_enabled"标的无期权产品使用有期权的标的

Comparación con Otras APIs

与其他API对比

FeatureAlpacaAlpha VantageData912
Free tier✅ IEX (1 exchange)✅ 25/day✅ Todo ARS
Stocks US
Crypto
Opciones
Historical depth~5 años IEXLimitadoLimitado
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.
功能AlpacaAlpha VantageData912
免费版✅ IEX(1个交易所)✅ 25次/天✅ 全部ARS计价数据
美国股票
加密货币
期权
历史数据深度IEX约5年有限有限
Python SDK✅ alpaca-py
选择Alpaca的场景: 美国市场数据(股票、加密货币、期权)、日内数据。
选择Data912的场景: 阿根廷市场数据。
选择Alpha Vantage的场景: 技术指标、外汇数据。