alpaca-data

Market Data API de Alpaca: acciones, crypto, opciones. Historical y real-time data para 5000+ stocks.

Skill file

Preview skill file
---
name: alpaca-data
description: "Market Data API de Alpaca: acciones, crypto, opciones. Historical y real-time data para 5000+ stocks."
license: MIT
---

# Alpaca Data — Market 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](https://docs.alpaca.markets/us/docs/about-market-data-api)

---

## Autenticación

### Obtener API Keys

1. Ir a [app.alpaca.markets](https://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**

### Configuración

```python
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()
```

**⚠️ NUNCA hardcodear keys en código que se comparte.**

---

## 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 |

### 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

---

## Data Feeds

| Feed | Descripción | Costo |
|------|-------------|-------|
| `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-counter | Paid |

**Free tier = solo IEX**

---

## Historical Stock Data

### Bars (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`

### 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)
```

### 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)
```

### Latest Data

```python
# 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"])
```

### Snapshots

```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
```

### Crypto Orderbook

```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
# 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)
```

### Option Bars/Trades/Quotes

```python
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)
```

---

## Options Tickers Reference

Ver [./references/options_reference.md](./references/options_reference.md) para:
- Símbolos de opciones (AAPL240119C00100000)
- Parámetros de filtrado
- Trading levels requeridos

---

## 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)
```

---

## 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)
```

---

## WebSocket Real-Time (Opcional)

```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/](./scripts/):

```bash
# 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/
```

---

## 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 |

---

## Comparación con Otras APIs

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

Source

Creator's repository · gauss314/skills

View on GitHub

License: MIT

Security

Security checks in progress
Results will appear here once audits complete
What this skill can do
Reads your filesConnects to the internetRuns code on your machine
Checked by 3 independent security firms
Does it try to trick the AI?Not yet checkedPending · Gen Agent Trust Hub
Does it sneak in hidden code?Not yet checkedPending · Socket
Does it have known bugs?Not yet checkedPending · Snyk