Alpaca Trading — Trading API

SkillCommerce & finance

Alpaca Trading API: orders, positions, account. Paper trading and live trading of stocks, crypto, and options.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Alpaca Trading — Trading API skill

What this skill tells your AI

The instructions your AI receives, as published by gauss314/skills in skills/alpaca-trading/SKILL.md and read by ahel’s review.

API para trading de acciones, crypto y opciones. Soporta paper trading (gratis) y live trading.

Base URLs:

  • Paper: https://paper-api.alpaca.markets
  • Live: https://api.alpaca.markets
  • SDK: pip install alpaca-py

Docs: docs.alpaca.markets


Autenticación

Obtener API Keys

  1. Ir a app.alpaca.markets
  2. Crear cuenta (paper trading es gratis)
  3. Ir a "API Keys" → Generate New Keys

Configuración

import os
from alpaca.trading.client import TradingClient

# Para paper trading
API_KEY = os.getenv("APCA_API_KEY_ID")
SECRET_KEY = os.getenv("APCA_API_SECRET_KEY")
BASE_URL = "https://paper-api.alpaca.markets"  # Paper

# Para live trading
# BASE_URL = "https://api.alpaca.markets"

client = TradingClient(API_KEY, SECRET_KEY, paper=True)

⚠️ NUNCA hardcodear keys. Usar variables de entorno.


Rate Limits

APILímite
Orders200 requests/min
Account/Positions200 requests/min
Account Activities200 requests/min

Recomendaciones

  • Usar WebSocket para updates en tiempo real — más eficiente que polling
  • Cachear account/positions — no consultar constantemente
  • Implementar retry con exponential backoff para 429 errors

Account

Obtener Información de Cuenta

account = client.get_account()
print(f"Buying Power: ${account.buying_power}")
print(f"Cash: ${account.cash}")
print(f"Portfolio Value: ${account.portfolio_value}")
print(f"Status: {account.status}")

Configuración de Cuenta

from alpaca.trading.requests import AccountConfigurationsRequest

config_request = AccountConfigurationsRequest(
    trade_confirmation_email=True,
    susi_transfer_email=True
)
client.update_account_configuration(config_request)

Assets

Listar Todos los Assets

from alpaca.trading.requests import GetAssetsRequest
from alpaca.trading.enums import AssetClass, AssetStatus

request = GetAssetsRequest(
    asset_class=AssetClass.US_EQUITY,
    status=AssetStatus.ACTIVE
)

assets = client.get_all_assets(request)

# Filtrar symbols tradables
tradable = [a for a in assets if a.tradable]
print(f"Assets tradables: {len(tradable)}")

Obtener Asset Específico

asset = client.get_asset("AAPL")
print(f"AAPL tradable: {asset.tradable}")
print(f"AAPL class: {asset.asset_class}")

Orders

Tipos de Órdenes

TipoDescripción
marketEjecuta al precio actual
limitPrecio máximo (buy) o mínimo (sell)
stopActiva orden de mercado cuando alcanza stop_price
stop_limitCombina stop + limit
trailing_stopStop relativo al precio

Time in Force

TIFDescripción
daySolo para día actual
gtcGood Till Cancelled
opgOpen at market open
clsClose at market close
iocImmediate Or Cancel
fokFill Or Kill

Crear Orden de Market

from alpaca.trading.requests import MarketOrderRequest
from alpaca.trading.enums import OrderSide, TimeInForce

order_request = MarketOrderRequest(
    symbol="AAPL",
    qty=10,
    side=OrderSide.BUY,
    time_in_force=TimeInForce.DAY
)

order = client.submit_order(order_request)
print(f"Order ID: {order.id}")
print(f"Status: {order.status}")

Crear Orden Limit

from alpaca.trading.requests import LimitOrderRequest

order_request = LimitOrderRequest(
    symbol="AAPL",
    qty=10,
    side=OrderSide.BUY,
    limit_price=150.00,  # Máximo a pagar
    time_in_force=TimeInForce.GTC
)

order = client.submit_order(order_request)

Crear Orden Stop

from alpaca.trading.requests import StopOrderRequest

order_request = StopOrderRequest(
    symbol="AAPL",
    qty=10,
    side=OrderSide.SELL,
    stop_price=145.00,  # Vende cuando caiga a este precio
    time_in_force=TimeInForce.GTC
)

Obtener Órdenes

# Todas las órdenes abiertas
open_orders = client.get_orders(status="open")
print(f"Órdenes abiertas: {len(open_orders)}")

# Órdenes filladas hoy
from datetime import datetime
filled_orders = client.get_orders(
    status="fill",
    start=datetime(2024, 1, 15)
)

# Orden por ID
order = client.get_order_by_id(order_id)

Cancelar Órdenes

# Cancelar una orden
client.cancel_order(order_id)

# Cancelar todas las órdenes abiertas
client.cancel_orders()

Reemplazar Orden

from alpaca.trading.requests import ReplaceOrderRequest

replace_request = ReplaceOrderRequest(
    limit_price=155.00,  # Nuevo precio límite
    qty=15               # Nueva cantidad
)
client.replace_order(order_id, replace_request)

Positions

Obtener Posiciones Abiertas

positions = client.get_all_positions()

for pos in positions:
    print(f"{pos.symbol}: {pos.qty} shares")
    print(f"  Avg Entry: ${pos.avg_entry_price}")
    print(f"  Market Value: ${pos.market_value}")
    print(f"  P/L: ${pos.unrealized_pl}")

Obtener Posición Específica

position = client.get_position("AAPL")
print(f"AAPL: {position.qty} shares @ ${position.avg_entry_price}")

Cerrar Posición

# Cerrar toda la posición
client.close_position("AAPL")

# Cerrar posición parcialmente (qty=5)
client.close_position("AAPL", qty=5)

Cerrar Todas las Posiciones

client.close_all_positions()

Options Trading

Trading Levels

LevelDescripción
0Sin trading de opciones
1Covered calls, cash-secured puts
2Buy/sell calls y puts
3Spreads

Obtener Option Contracts

from alpaca.trading.requests import GetOptionContractsRequest
from datetime import datetime, timedelta

request = GetOptionContractsRequest(
    underlying_symbols=["AAPL"],
    expiration_date_gte=datetime.now().strftime("%Y-%m-%d"),
    expiration_date_lte=(datetime.now() + timedelta(days=30)).strftime("%Y-%m-%d"),
    strike_price_gte=100,
    strike_price_lte=200,
    limit=100
)

contracts = client.get_option_contracts(request)
contract = contracts.option_contracts[0]

# Trade con contract ID
order_request = MarketOrderRequest(
    symbol=contract.id,  # Usar ID del contract
    qty=1,
    side=OrderSide.BUY,
    time_in_force=TimeInForce.DAY
)

Ejercitar Opción

# Ejercer una posición de opción
client.exercise_options(position_id)

Crypto Trading

Listar Symbols Disponibles

from alpaca.trading.enums import AssetClass

crypto_assets = client.get_all_assets(asset_class=AssetClass.CRYPTO)
crypto = [a for a in crypto_assets if a.tradable]
print(f"Crypto tradables: {[a.symbol for a in crypto[:10]]}")

Órdenes de Crypto

order_request = MarketOrderRequest(
    symbol="BTC/USD",
    qty=0.1,  # Fracciones permitidas
    side=OrderSide.BUY,
    time_in_force=TimeInForce.GTC
)
client.submit_order(order_request)

Market Hours

Obtener Clock

clock = client.get_clock()
print(f"Market open: {clock.is_open}")
print(f"Next open: {clock.next_open}")
print(f"Next close: {clock.next_close}")

Verificar si Mercado está Abierto

if clock.is_open:
    print("Mercado abierto - puedes tradear")
else:
    print("Mercado cerrado")

Portfolio History

from datetime import datetime

history = client.get_account_portfolio_history(
    date_start=datetime(2024, 1, 1),
    timeframe="1D"
)

print(f"Equity: {history.equity}")
print(f"Profit/Loss: {history.profit_loss}")

Watchlists

from alpaca.trading.requests import CreateWatchlistRequest

# Crear watchlist
watchlist = client.create_watchlist(
    CreateWatchlistRequest(name="Tech Stocks")
)

# Agregar símbolo
client.add_to_watchlist(watchlist.id, "AAPL")

# Obtener watchlists
watchlists = client.get_watchlists()

WebSocket Streaming

from alpaca.trading.stream import TradingStream

async def handle_trade_update(data):
    print(f"Update: {data}")

stream = TradingStream(API_KEY, SECRET_KEY, paper=True)

stream.subscribe_trade_updates(handle_trade_update)
stream.run()

Scripts de Ejemplo

Ver ./scripts/:

# Ver cuenta
python ./scripts/check_account.py

# Ver posiciones
python ./scripts/check_positions.py

# Enviar orden de prueba
python ./scripts/place_order.py --symbol AAPL --qty 10 --side buy --type market

Errores Comunes

ErrorCausaSolución
403 ForbiddenKeys inválidasVerificar API keys
403Sin permisosHabilitar en dashboard
400 Bad RequestParámetros inválidosVer docs de orden
403 Trading HaltedTrading pausadoEsperar o verificar
403 No Buying PowerSin fondosDepositar dinero
422Symbol no tradableVerificar symbol
429 Too Many RequestsRate limitImplementar backoff

Comparación: Paper vs Live

AspectoPaperLive
URLpaper-api.alpaca.marketsapi.alpaca.markets
Dinero real❌ No✅ Sí
Órdenes reales❌ Simuladas✅ Reales
Datos de mercado✅ Reales✅ Reales
Para testing✅ Ideal❌ No

Siempre probar en paper primero.

Signals

GitHub stars
237
Forks
35
Last commit
Jun 2026
Advanced
Catalog kind
skill
Gateway key
alpaca-trading
Source
github.com/gauss314/skills