mcpField
A
alpaca-trading

alpaca-trading

github.com/gauss314その他252251 回インストール19 週間前に更新
リポジトリ

alpaca-trading について

alpaca-trading は Alpaca API を通じて株式、暗号資産、オプションを取引するスキルで、口座、資産、注文、ポジションを扱います。paper trading と live trading の例を含み、市場時間やポートフォリオの確認にも対応します。

主な機能

  1. 01口座、資産、ポジションの照会
  2. 02注文の発注、変更、キャンセル
  3. 03株式、暗号資産、オプションの取引
  4. 04市場時間とポートフォリオ履歴の確認
  5. 05WebSocket による取引更新の受信

活用シーン

  1. 01paper trading で注文をテスト
  2. 02口座残高と保有ポジションの確認
  3. 03株式や暗号資産の注文管理
  4. 04取引状況の更新を受信

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/gauss314/skills --skill alpaca-trading

インストール後、Claude Code で/alpaca-tradingを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

scripts/
check_account.py
check_positions.py
place_order.py

詳細

Alpaca Trading — Trading API

株式、暗号資産、オプションの取引 API です。ペーパートレーディング(無料)とライブトレーディングに対応しています。

ベース URL:

  • ペーパー: https://paper-api.alpaca.markets
  • ライブ: https://api.alpaca.markets
  • SDK: pip install alpaca-py

ドキュメント: docs.alpaca.markets


認証

API キーの取得
  1. app.alpaca.markets にアクセスします
  2. アカウントを作成します(ペーパートレーディングは無料です)
  3. 「API Keys」→「Generate New Keys」に進みます
設定
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)

⚠️ キーをハードコードしないでください。環境変数を使用してください。


レート制限

API制限
Orders200 リクエスト/分
Account/Positions200 リクエスト/分
Account Activities200 リクエスト/分
推奨事項
  • リアルタイム更新には WebSocket を使用する — ポーリングより効率的です
  • アカウント情報/ポジションをキャッシュする — 頻繁に問い合わせないでください
  • 429 エラーに対して指数バックオフによるリトライを実装する

アカウント

アカウント情報の取得
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}")
アカウント設定
from alpaca.trading.requests import AccountConfigurationsRequest

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

資産

すべての資産を一覧表示
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)}")
特定の資産を取得
asset = client.get_asset("AAPL")
print(f"AAPL tradable: {asset.tradable}")
print(f"AAPL class: {asset.asset_class}")

注文

注文タイプ
タイプ説明
market現在の価格で執行します
limit最高価格(買い)または最低価格(売り)
stopstop_price に達すると成行注文を有効にします
stop_limitstop と limit を組み合わせます
trailing_stop価格に対する相対的なストップ注文
有効期間
TIF説明
day当日限り
gtc取消されるまで有効
opg市場の寄り付き時に執行
cls市場の引け時に執行
ioc即時執行または取消
fok全量執行または取消
成行注文の作成
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}")
指値注文の作成
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)
ストップ注文の作成
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
)
注文の取得
# 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 una orden
client.cancel_order(order_id)

# Cancelar todas las órdenes abiertas
client.cancel_orders()
注文の置き換え
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 = 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}")
特定のポジションの取得
position = client.get_position("AAPL")
print(f"AAPL: {position.qty} shares @ ${position.avg_entry_price}")
ポジションの決済
# Cerrar toda la posición
client.close_position("AAPL")

# Cerrar posición parcialmente (qty=5)
client.close_position("AAPL", qty=5)
すべてのポジションの決済
client.close_all_positions()

オプション取引

取引レベル
レベル説明
0オプション取引なし
1カバードコール、キャッシュセキュアードプット
2コールとプットの買い/売り
3スプレッド
オプション契約の取得
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
)
オプションの行使
# Ejercer una posición de opción
client.exercise_options(position_id)

暗号資産取引

利用可能なシンボルの一覧表示
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]]}")
暗号資産の注文
order_request = MarketOrderRequest(
    symbol="BTC/USD",
    qty=0.1,  # Fracciones permitidas
    side=OrderSide.BUY,
    time_in_force=TimeInForce.GTC
)
client.submit_order(order_request)

市場営業時間

クロックの取得
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}")
市場が開いているか確認
if clock.is_open:
    print("Mercado abierto - puedes tradear")
else:
    print("Mercado cerrado")

ポートフォリオ履歴

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}")

ウォッチリスト

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 ストリーミング

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/ を参照してください。

# 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

よくあるエラー

エラー原因解決策
403 Forbidden無効なキーAPI キーを確認する
403権限がないダッシュボードで有効にする
400 Bad Request無効なパラメーター注文のドキュメントを確認する
403 Trading Halted取引が停止中待つか、状態を確認する
403 No Buying Power資金不足入金する
422取引不可のシンボルシンボルを確認する
429 Too Many Requestsレート制限バックオフを実装する

比較:ペーパーとライブ

項目ペーパーライブ
URLpaper-api.alpaca.marketsapi.alpaca.markets
実資金❌ いいえ✅ はい
実際の注文❌ シミュレーション✅ 実注文
市場データ✅ 実データ✅ 実データ
テスト用途✅ 最適❌ 不可

必ず最初にペーパーでテストしてください。

コメント