upstox について
公式`upstox-python-sdk`を通じてUpstoxのインド市場APIを扱うエージェントスキルです。注文、ポートフォリオ、市場データを扱い、APIバージョンの案内と注文操作の安全策を含みます。
主な機能
- 01注文の発注と管理
- 02ポートフォリオと資金情報の取得
- 03相場と過去データの取得
- 04リアルタイム相場と注文更新の受信
- 05銘柄検索とロットサイズ検証
活用シーン
- 01sandboxでの注文手順のリハーサル
- 02保有状況、利用可能資金、相場の確認
- 03注文前の銘柄検索
- 04オプションデータと過去ローソク足の分析
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ upstox/ upstox-skills --skill upstoxインストール後、Claude Code で/upstoxを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
config.json.exampleexamples/bear_butterfly.pybull_call_spread.pyhistorical_candles.pyinstrument_search.pymarket_quote.pyoption_chain_analysis.pyplace_equity_order.pyplace_gtt_order.pyportfolio_summary.pyshort_strangle.pyreferences/errors.mdgtt-orders.mdinstruments.mdkill-switch.mdmargins.mdmarket-data.mdoption-chain.mdorders.mdportfolio.mdwebsocket.mdscripts/instrument_search.pyupstox_helpers.pyvalidate_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 コード) | デバッグ、エラーコード、429 | references/errors.md |
このスキルが対応するプロンプトの例
- 「SBIN を 820 で 10 株買って」
- 「Wipro が 440 まで下がったら買う GTT 注文を出して」
- 「使える現金はいくらありますか?」
- 「Bank Nifty の最終価格」
- 「今週の Nifty オプションチェーンを取得して」
SDK リファレンス
- PyPI:
upstox-python-sdk· インポート:import upstox_client - SDK のソース:https://github.com/upstox/upstox-python
- API ドキュメント:https://upstox.com/developer/api-documentation/
- サンドボックス:
upstox_client.Configuration(sandbox=True) - 例外:
from upstox_client.rest import ApiException