mcpField
D
dhanhq

dhanhq

github.com/dhan-ossその他411.4k 回インストール17 週間前に更新
リポジトリ

dhanhq について

dhanhqは、DhanHQのPython SDKでインド市場の取引やデータ照会を行うためのスキルです。口座確認、相場データ取得、ポートフォリオ操作、安全に配慮した注文実行を扱います。

主な機能

  1. 01Python SDKの初期化と口座確認
  2. 02注文の発注と管理
  3. 03ポートフォリオと資金の照会
  4. 04相場、履歴データ、オプションチェーン
  5. 05リアルタイムフィードと市場板情報
  6. 06注文の安全確認と承認ルール

活用シーン

  1. 01保有資産とポジションの確認
  2. 02気配値や過去価格の照会
  3. 03オプションチェーンデータの確認
  4. 04取引注文の準備と確認

インストール

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

$npx skills add https://github.com/dhan-oss/dhanhq-skills --skill dhanhq

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

同梱ファイル

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

examples/
fetch_option_chain.py
gtt_forever_order.py
historical_data_analysis.py
iron_condor.py
live_feed_setup.py
margin_check.py
order_management.py
place_equity_order.py
place_fno_order.py
portfolio_summary.py
super_order_with_sl.py
references/
backtesting-with-dhan.md
common-workflows.md
error-codes.md
funds.md
instruments.md
live-feed.md
market-data.md
option-chain.md
options-analysis-patterns.md
orders.md
portfolio.md
scanx-data.md
scripts/
dhan_helpers.py
resolve_security.py
trade_logger.py
validate_order.py

詳細

DhanHQ — インド市場取引スキル

セットアップ

安定版をインストールします:

pip install dhanhq

200段階の板情報や最新のヘルパー対応など、新しい v2 機能が必要な場合は、現行の SDK ブランチを使用します:

pip install --upgrade dhanhq

最小限の初期化:

from dhanhq import DhanContext, dhanhq

dhan_context = DhanContext("YOUR_CLIENT_ID", "YOUR_ACCESS_TOKEN")
dhan = dhanhq(dhan_context)

環境変数の設定:

import os
from dhanhq import DhanContext, dhanhq

dhan_context = DhanContext(
    os.environ["DHAN_CLIENT_ID"],
    os.environ["DHAN_ACCESS_TOKEN"],
)
dhan = dhanhq(dhan_context)

このリポジトリ用のスクリプトを生成する場合は、次を優先します:

from scripts.dhan_helpers import get_client

dhan, dhan_context = get_client()

安全ルール — 必ず適用してください

  1. ライブ注文を発注する前に確認してください。
  2. 実行前に、読みやすい注文プレビューを表示してください。
  3. ユーザーが明示的に MARKET を希望しない限り、LIMIT 注文をデフォルトにしてください。
  4. 想定元本が Rs. 50,000 を超える場合は警告してください。
  5. F&O では、発注前にロットサイズを検証してください。
  6. F&O、コモディティ、通貨セグメントでは、CNC または MTF を使用しないでください。
  7. 生成するコードに認証情報をハードコードしないでください。
  8. modify_order、cancel_order、kill_switch、または複数レッグのライブ実行を行う前に確認してください。

ライブ利用前のアクセス確認

ライブ取引でアカウントを使用する前に、次を確認してください:

  1. アクセストークンが有効であること。
  2. dhan_login.user_profile(...) または GET /profile に、必要なアカウント設定が表示されていること。
  3. クオート/履歴/フィード/オプションチェーンを利用する場合、dataPlan が有効であること。
  4. 注文の発注、変更、キャンセル、スーパー注文、無期限注文を利用する場合、静的 IP が設定されていること。

有用なプロフィールフィールド:

  • tokenValidity
  • activeSegment
  • ddpi
  • mtf
  • dataPlan
  • dataValidity

現行 SDK の定数

カテゴリー定数値
取引所dhanhq.NSENSE_EQ
dhanhq.BSEBSE_EQ
dhanhq.NSE_FNONSE_FNO
dhanhq.BSE_FNOBSE_FNO
dhanhq.MCXMCX_COMM
dhanhq.CURNSE_CURRENCY
dhanhq.INDEXIDX_I
取引dhanhq.BUYBUY
dhanhq.SELLSELL
注文タイプdhanhq.LIMITLIMIT
dhanhq.MARKETMARKET
dhanhq.SLSTOP_LOSS
dhanhq.SLMSTOP_LOSS_MARKET
商品dhanhq.CNCCNC
dhanhq.INTRAINTRADAY
dhanhq.MARGINMARGIN
dhanhq.MTFMTF
有効期間dhanhq.DAYDAY
dhanhq.IOCIOC

優先して使用する現行 SDK メソッド

タスクメソッド
注文を発注dhan.place_order()
大口注文を分割dhan.place_slice_order()
注文を変更dhan.modify_order()
注文をキャンセルdhan.cancel_order()
注文一覧dhan.get_order_list()
ID で注文を取得dhan.get_order_by_id()
相関 ID で注文を取得dhan.get_order_by_correlationID()
取引一覧dhan.get_trade_book()
取引履歴dhan.get_trade_history()
台帳dhan.ledger_report()
スーパー注文place_super_order()、modify_super_order()、cancel_super_order()、get_super_order_list()
無期限注文place_forever()、modify_forever()、cancel_forever()、get_forever()
保有銘柄dhan.get_holdings()
ポジションdhan.get_positions()
ポジションを変換dhan.convert_position()
eDISdhan.generate_tpin()、dhan.open_browser_for_tpin()、dhan.edis_inquiry()
資金限度額dhan.get_fund_limits()
証拠金計算ツールdhan.margin_calculator()
日次履歴dhan.historical_daily_data()
分次履歴dhan.intraday_minute_data()
期限切れオプションデータdhan.expired_options_data()
市場クオートスナップショットdhan.ticker_data()、dhan.ohlc_data()、dhan.quote_data()
満期日一覧dhan.expiry_list()
オプションチェーンdhan.option_chain()
証券マスターdhanhq.fetch_security_list()
ライブ市場フィードMarketFeed
ライブ注文更新OrderUpdate
全板情報FullDepth
キルスイッチdhan.kill_switch()、dhan.status_kill_switch()

重要な注意点

  • SDK は HTTP レスポンスを {"status": "success"|"failure", "remarks": ..., "data": ...} の形式でラップします。レスポンスの形状はエンドポイントによって異なり、成功時のペイロードは API に応じて大きく異なります(配列、フラットなオブジェクト、ネストされた辞書など)。
  • リポジトリのヘルパーは正規化レイヤーを追加します。ce_ltp、ce_oi、ce_iv などのフィールドはリポジトリで定義された名前であり、Dhan の生のフィールド名ではありません。
  • 現在の SDK メソッドは intraday_minute_data(...) です。historical_minute_data() は参照しないでください。
  • 履歴データのタイムスタンプはエポック値です。明示的に変換してください。
  • 現在、SDK は expiry_code を [0, 1, 2, 3] で検証しますが、Dhan の v2 付属文書には 0、1、2 が記載されています。Dhan が API ドキュメントを更新するまでは、記載されている値を優先してください。
  • クオート API は 1 request/sec にレート制限されています。
  • オプションチェーンの REST データは、data["oc"] の下で権利行使価格の文字列をキーとして格納されています。分析しやすい行を取得するには、リポジトリのヘルパーを使用してください。
  • API 経由の成行注文は、現在 Dhan によって MPP 付きの指値注文に変換されます。
  • 注文発注 API には静的 IP のホワイトリスト登録が必要です。
  • 取引 API は Dhan ユーザーには無料です。データ API を利用するには有効なデータプランが必要です。
  • ロットサイズとフリーズ数量は変更されます。ハードコードされた値はフォールバックとしてのみ扱ってください。

商品タイプのルール

セグメント使用可能な商品タイプ
NSE_EQ、BSE_EQCNC、INTRADAY、MARGIN、MTF
NSE_FNO、BSE_FNO、MCX_COMM、NSE_CURRENCY、BSE_CURRENCYINTRADAY、MARGIN

金融商品解決のルール

主な情報源として、セキュリティマスターを使用し、以下を取得してください。

  • security_id
  • lot_size
  • tick_size
  • 満期日
  • 権利行使価格
  • デリバティブ契約の検索

インデックスの原資産のクイックリファレンス:

原資産security_id原資産セグメント
NIFTY 5013IDX_I
BANK NIFTY25IDX_I
FINNIFTY27IDX_I
MIDCPNIFTY442IDX_I
SENSEX51IDX_I

推奨するヘルパーレイヤー

このリポジトリでスクリプトを生成するときは、以下を優先してください。

  • SDK の初期化には get_client()
  • 現物市場の銘柄検索には resolve_symbol()
  • 契約の検索には resolve_derivative()
  • オプションチェーンの正規化には fetch_chain_df()
  • ATM の選択には find_atm_row()
  • 事前の証拠金確認には check_margin()
  • 読みやすい確認には preview_order()

基本的なパターン

1. データを取得する前にアカウントへのアクセスを確認する
from dhanhq import DhanLogin

dhan_login = DhanLogin("YOUR_CLIENT_ID")
profile = dhan_login.user_profile("YOUR_ACCESS_TOKEN")

print(profile["dataPlan"])
print(profile["dataValidity"])
2. エポック変換を行って過去データを取得する
data = dhan.historical_daily_data(
    security_id="2885",
    exchange_segment=dhanhq.NSE,
    instrument_type="EQUITY",
    from_date="2024-01-01",
    to_date="2024-12-31",
)

if data["status"] == "success":
    candles = data["data"]
    timestamps = [dhan.convert_to_date_time(ts) for ts in candles["timestamp"]]
3. 分析用にオプションチェーンのデータを正規化する
from scripts.dhan_helpers import fetch_chain_df, find_atm_row

chain_df, spot = fetch_chain_df(dhan, under_security_id=13, expiry="2025-03-27")
atm = find_atm_row(chain_df, spot)

print(spot)
print(atm["strike"])
print(atm["ce_security_id"], atm["ce_ltp"])
4. ライブ注文を発注する前に証拠金を確認する
from scripts.dhan_helpers import check_margin

margin = check_margin(
    dhan,
    security_id="2885",
    exchange_segment=dhanhq.NSE,
    transaction_type=dhanhq.BUY,
    quantity=10,
    product_type=dhanhq.CNC,
    price=2450.0,
)

print(margin["sufficient"], margin["total_margin"], margin["available_balance"])
5. ライブ市場フィード
from dhanhq import MarketFeed

instruments = [
    (MarketFeed.NSE, "2885", MarketFeed.Ticker),
    (MarketFeed.NSE_FNO, "49081", MarketFeed.Full),
]

feed = MarketFeed(dhan_context, instruments, "v2")
feed.run_forever()
print(feed.get_data())

レート制限

API カテゴリ秒あたり分あたり時間あたり日あたり
注文 API1025010007000
データ API5--100000
クオート API1無制限無制限無制限
非取引 API20無制限無制限無制限

リファレンスファイル

Dhan API では、注文執行、気配値、OHLC、オプションチェーン、ポートフォリオを利用できます。ファンダメンタルデータ(PE、EPS、売上高)、テクニカル指標(RSI、MACD)、またはDhanでは利用できない株主保有パターンについては、ScanXを使用してください。references/scanx-data.mdを参照してください。

必要な情報ファイル
注文、スーパー注文、無期限注文references/orders.md
保有資産、ポジション、eDISreferences/portfolio.md
日足・分足の履歴、気配値、期限切れオプションreferences/market-data.md
オプションチェーンの使用方法と正規化references/option-chain.md
資金上限と証拠金チェックreferences/funds.md
ライブフィードと板情報references/live-feed.md
エラー処理とサブスクリプションのトラブルシューティングreferences/error-codes.md
銘柄の解決references/instruments.md
複数ステップの実行パターンreferences/common-workflows.md
オプション分析references/options-analysis-patterns.md
バックテストのパターンreferences/backtesting-with-dhan.md
PEレシオ、RSI、財務情報、スクリーナー — Dhanが提供していないデータreferences/scanx-data.md

Data API サブスクリプションが無効な場合

ユーザーにDH-902または806が表示された場合:

  1. web.dhan.coにログインします
  2. My Profile -> Access DhanHQ APIsを開きます
  3. dataPlanが有効であることを確認します
  4. 必要に応じてData APIプランを有効にします
  5. 新しいアクセストークンを生成します
  6. ticker_data()またはohlc_data()で再テストします
  7. 注文APIがまだ失敗する場合は、静的IPを別途確認します

コメント