mcpField
U
upstox

upstox

github.com/upstoxその他1217 回インストール20 週間前に更新
リポジトリ

upstox について

公式`upstox-python-sdk`を通じてUpstoxのインド市場APIを扱うエージェントスキルです。注文、ポートフォリオ、市場データを扱い、APIバージョンの案内と注文操作の安全策を含みます。

主な機能

  1. 01注文の発注と管理
  2. 02ポートフォリオと資金情報の取得
  3. 03相場と過去データの取得
  4. 04リアルタイム相場と注文更新の受信
  5. 05銘柄検索とロットサイズ検証

活用シーン

  1. 01sandboxでの注文手順のリハーサル
  2. 02保有状況、利用可能資金、相場の確認
  3. 03注文前の銘柄検索
  4. 04オプションデータと過去ローソク足の分析

インストール

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

$npx skills add https://github.com/upstox/upstox-skills --skill upstox

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

同梱ファイル

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

config.json.example
examples/
bear_butterfly.py
bull_call_spread.py
historical_candles.py
instrument_search.py
market_quote.py
option_chain_analysis.py
place_equity_order.py
place_gtt_order.py
portfolio_summary.py
short_strangle.py
references/
errors.md
gtt-orders.md
instruments.md
kill-switch.md
margins.md
market-data.md
option-chain.md
orders.md
portfolio.md
websocket.md
scripts/
instrument_search.py
upstox_helpers.py
validate_order.py

詳細

Upstox エージェントスキル

AI エージェントから Upstox で取引できます。ライブ注文の発注、ポートフォリオデータの読み取り、市場フィードのストリーミング、さらに Upstox Developer API と公式の upstox-python-sdk を通じて、NSE、BSE、MCX にわたるインド市場全体にアクセスできます。

このスキルとそのリファレンスに記載されている SDK のシグネチャは、すべて upstox-python SDK のソースと照合して検証済みです。最もよくあるバグの原因は、v2 と v3 の API クラスを取り違えることです。注文や見積もりのコードを書く前に、以下の v2 と v3 の注記をお読みください。


セットアップ

インストール
pip install upstox-python-sdk
認証情報 — 環境変数のみを使用し、ハードコードしないでください
export UPSTOX_ACCESS_TOKEN="your-daily-access-token"
export UPSTOX_SANDBOX_ACCESS_TOKEN="your-sandbox-access-token"
クライアントの初期化
import os
import upstox_client

configuration = upstox_client.Configuration()
configuration.access_token = os.environ["UPSTOX_ACCESS_TOKEN"]
api_client = upstox_client.ApiClient(configuration)

すべての呼び出しで設定済みのクライアントを再利用できるよう、共通ヘルパーを使用してください。

from scripts.upstox_helpers import get_client
api_client = get_client()                 # reads UPSTOX_ACCESS_TOKEN (or sandbox)
サンドボックス(ペーパートレード)

実際のお金を使わずにテスト注文を発注するには、サンドボックスを使用してください。SDK にはフラグが用意されているため、別のベース URL は必要ありません。

configuration = upstox_client.Configuration(sandbox=True)
configuration.access_token = os.environ["UPSTOX_SANDBOX_ACCESS_TOKEN"]

get_client(sandbox=True) でも同じ設定になります。ライブ取引を始める前に、必ず注文発注ワークフローをサンドボックスでリハーサルしてください。

ベース URL

https://api.upstox.com/v2(新しいエンドポイントでは /v3 も使用されます。SDK がクラスごとに処理します)。


v2 と v3 — 注文/見積もりのコードを書く前にお読みください

Upstox では、一部の API に 2 世代のバージョンが提供されています。それぞれ 異なる SDK クラスと異なるメソッドシグネチャを使用します。誤ったクラスを選ぶことが、エラーの最大の原因です。

項目v3(推奨)v2(レガシー)
注文OrderApiV3 — place_order(body)、modify_order(body)、cancel_order(order_id) — api_version 引数は不要OrderApi — place_order(body, api_version) など — api_version が必須
GTT 注文OrderApiV3.place_gtt_order(body)(v3 のみ)—
LTP/OHLC/ギリシャ指標MarketQuoteV3Api — get_ltp(instrument_key=...) — api_version は不要MarketQuoteApi — ltp(symbol, api_version)
過去のローソク足HistoryV3Api.get_historical_candle_data(instrument_key, unit, interval, to_date, from_date=...)HistoryApi(古いインターバル方式)
資金と証拠金UserApi.get_user_fund_margin_v3() — 引数なしUserApi.get_user_fund_margin(api_version, segment=...)

注文、見積もり、過去データには、v3 をデフォルトで使用してください。複数注文、注文一覧、取引、仲介手数料、損益、オプション、休日、およびポジション変更は、引き続き v2 のクラス(OrderApi、ChargeApi など)を使用します。


安全対策 — 必ず徹底してください

このスキルは、取り消しできないライブの金融注文を発注できます。 place_order、modify_order、cancel_order、place_gtt_order、exit_positions、または cancel_multi_order を実行する前に、必ず以下を守ってください。

ルール動作
確認が必須発注/変更/キャンセルの前に、内容がすべてわかる注文プレビューを人が読み取れる形で提示し、ユーザーから明示的な確認を得てください。最初に scripts/validate_order.py を実行してください。
デフォルトの注文種別:LIMITユーザーが明示的に「market」と指定しない限り、MARKET 注文は発注しないでください。
デフォルト数量数量が指定されていない場合は、1 株(株式)または 1 ロット(F&O)とし、それより多い数量を推測しないでください。
ロットサイズの検証数量が銘柄の lot_size の倍数でない F&O 注文は拒否してください。
市場価格保護MARKET 注文には Upstox MPP による上限が自動適用されます。市場注文が大幅に乖離した価格で約定しないよう、独自の価格バッファーを設定するには market_protection(%)を指定してください。references/orders.md を参照してください。
緊急停止スイッチユーザーは UserApi.update_kill_switch([{segment, action}]) を使用して、セグメント内のすべての取引を停止できます。DISABLE は未約定注文をキャンセルし、新規注文をブロックします。無効化する前に、再有効化が約 12 時間ロックされることを警告してください。references/kill-switch.md を参照してください。
まずサンドボックスでテストユーザーがテスト中の場合は、サンドボックス(Configuration(sandbox=True))でリハーサルしてください。
シークレットをハードコードしないトークンは必ず os.environ から読み込んでください。

レート制限

いずれかの制限を超えると HTTP 429 Too Many Requests が返されます。再試行する前に、待ち時間を置いてください。

注文発注 API の合算レート制限

Place、Modify、Cancel、Multi Order、GTT Order に適用されます(合算)。

通常のアルゴ — アルゴ登録は不要です。

時間リクエスト上限
1 秒あたり10 リクエスト
1 分あたり500 リクエスト
30 分あたり2000 リクエスト

SEBI 登録済みアルゴ — アルゴ登録が必要です。

時間リクエスト上限
1 秒あたり50 リクエスト
1 分あたり500 リクエスト
30 分あたり2000 リクエスト
その他の標準 API

保有資産、ポジション、資金、過去のローソク足など。

時間リクエスト上限
1 秒あたり50 リクエスト
1 分あたり500 リクエスト
30 分あたり2000 リクエスト

主な定数

# Transaction
BUY, SELL = "BUY", "SELL"

# Order types
MARKET, LIMIT, SL, SL_M = "MARKET", "LIMIT", "SL", "SL-M"

# Products
INTRADAY, DELIVERY, COVER, ONE_CANCELS_OTHER, MTF = "I", "D", "CO", "OCO", "MTF"

# Validity
DAY, IOC = "DAY", "IOC"
  • 取引所(exchange フィールド):NSE、NFO、CDS、BSE、BFO、BCD、MCX
  • instrument_key のセグメント接頭辞:NSE_EQ、NSE_FO、NSE_INDEX、BSE_EQ、BSE_FO、BSE_INDEX、NCD_FO、BCD_FO、MCX_FO
instrument_key の形式
SEGMENT|IDENTIFIER
"NSE_EQ|INE002A01018"     # Reliance (equity → ISIN)
"NSE_INDEX|Nifty 50"      # index (→ name)
"NSE_FO|43919"            # F&O (→ numeric exchange token)

instrument_key は scripts/instrument_search.py を使って人間向けの名称から解決します(サーバー側の Instrument Search API を使用し、マスターファイルのダウンロードは不要です)。注文を発注する前に、必ずこの方法で instrument_key を解決してください。オプション/先物のトークンを推測しないでください。有効期限ごとに変わります。

from scripts.instrument_search import resolve_instrument_key
inst = resolve_instrument_key("Reliance", exchanges="NSE", segments="EQ")
instrument_token = inst["instrument_key"]   # pass inst["lot_size"] to validate_order for F&O

基本パターン

指値買い注文を発注する(v3)
import os, upstox_client
from upstox_client.rest import ApiException

configuration = upstox_client.Configuration()
configuration.access_token = os.environ["UPSTOX_ACCESS_TOKEN"]
order_api = upstox_client.OrderApiV3(upstox_client.ApiClient(configuration))

body = upstox_client.PlaceOrderV3Request(
    quantity=1,
    product="D",                              # D = delivery/CNC
    validity="DAY",
    price=2500.0,
    tag="skill-order",
    instrument_token="NSE_EQ|INE002A01018",   # Reliance
    order_type="LIMIT",
    transaction_type="BUY",
    disclosed_quantity=0,
    trigger_price=0.0,
    is_amo=False,                             # required; True only for after-market orders
)

try:
    resp = order_api.place_order(body)        # NOTE: v3 has no api_version arg
    print("Order ID:", resp.data.order_ids)
except ApiException as e:
    print("Order failed:", e.body)
保有資産を取得する(v2 PortfolioApi)
portfolio_api = upstox_client.PortfolioApi(upstox_client.ApiClient(configuration))
holdings = portfolio_api.get_holdings(api_version="2.0")
for h in holdings.data:
    print(h.trading_symbol, h.quantity, h.last_price, h.pnl)
LTP を取得する(v3 MarketQuoteV3Api)
mq = upstox_client.MarketQuoteV3Api(upstox_client.ApiClient(configuration))
resp = mq.get_ltp(instrument_key="NSE_EQ|INE002A01018")   # comma-separate for many
print(resp.data)

リファレンス一覧 — 必要に応じて読み込む

トピック読み込むタイミングファイル
注文(発注/変更/キャンセル/複数/決済)何らかの注文操作を行うときreferences/orders.md
GTT 注文(単一および複数レッグ)条件付き/トリガー発動まで有効な注文references/gtt-orders.md
ポートフォリオ(保有資産、ポジション、変換、損益)ポートフォリオの表示/管理references/portfolio.md
市場データ(LTP、OHLC、気配値、ローソク足、ステータス)価格と過去データreferences/market-data.md
オプションチェーン(グリークス、OI、PCR、最大ペイン)オプション分析references/option-chain.md
証拠金、資金、仲介手数料取引前の証拠金/手数料の確認references/margins.md
キルスイッチ(セグメントでの取引を停止)リスク管理/セグメントの無効化references/kill-switch.md
WebSocket(リアルタイムのティック、注文更新)ストリーミングフィードreferences/websocket.md
銘柄(名称からトークンへの解決、ロットサイズ)シンボルの検索references/instruments.md
エラー(HTTP および UDAPI コード)デバッグ、エラーコード、429references/errors.md

このスキルが対応するプロンプトの例

  • 「SBIN を 820 で 10 株買って」
  • 「Wipro が 440 まで下がったら買う GTT 注文を出して」
  • 「使える現金はいくらありますか?」
  • 「Bank Nifty の最終価格」
  • 「今週の Nifty オプションチェーンを取得して」

SDK リファレンス

コメント