dhanhq について
dhanhqは、DhanHQのPython SDKでインド市場の取引やデータ照会を行うためのスキルです。口座確認、相場データ取得、ポートフォリオ操作、安全に配慮した注文実行を扱います。
主な機能
- 01Python SDKの初期化と口座確認
- 02注文の発注と管理
- 03ポートフォリオと資金の照会
- 04相場、履歴データ、オプションチェーン
- 05リアルタイムフィードと市場板情報
- 06注文の安全確認と承認ルール
活用シーン
- 01保有資産とポジションの確認
- 02気配値や過去価格の照会
- 03オプションチェーンデータの確認
- 04取引注文の準備と確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dhan-oss/ dhanhq-skills --skill dhanhqインストール後、Claude Code で/dhanhqを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
examples/fetch_option_chain.pygtt_forever_order.pyhistorical_data_analysis.pyiron_condor.pylive_feed_setup.pymargin_check.pyorder_management.pyplace_equity_order.pyplace_fno_order.pyportfolio_summary.pysuper_order_with_sl.pyreferences/backtesting-with-dhan.mdcommon-workflows.mderror-codes.mdfunds.mdinstruments.mdlive-feed.mdmarket-data.mdoption-chain.mdoptions-analysis-patterns.mdorders.mdportfolio.mdscanx-data.mdscripts/dhan_helpers.pyresolve_security.pytrade_logger.pyvalidate_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()
安全ルール — 必ず適用してください
- ライブ注文を発注する前に確認してください。
- 実行前に、読みやすい注文プレビューを表示してください。
- ユーザーが明示的に
MARKETを希望しない限り、LIMIT注文をデフォルトにしてください。 - 想定元本が
Rs. 50,000を超える場合は警告してください。 - F&O では、発注前にロットサイズを検証してください。
- F&O、コモディティ、通貨セグメントでは、
CNCまたはMTFを使用しないでください。 - 生成するコードに認証情報をハードコードしないでください。
modify_order、cancel_order、kill_switch、または複数レッグのライブ実行を行う前に確認してください。
ライブ利用前のアクセス確認
ライブ取引でアカウントを使用する前に、次を確認してください:
- アクセストークンが有効であること。
dhan_login.user_profile(...)またはGET /profileに、必要なアカウント設定が表示されていること。- クオート/履歴/フィード/オプションチェーンを利用する場合、
dataPlanが有効であること。 - 注文の発注、変更、キャンセル、スーパー注文、無期限注文を利用する場合、静的 IP が設定されていること。
有用なプロフィールフィールド:
tokenValidityactiveSegmentddpimtfdataPlandataValidity
現行 SDK の定数
| カテゴリー | 定数 | 値 |
|---|---|---|
| 取引所 | dhanhq.NSE | NSE_EQ |
dhanhq.BSE | BSE_EQ | |
dhanhq.NSE_FNO | NSE_FNO | |
dhanhq.BSE_FNO | BSE_FNO | |
dhanhq.MCX | MCX_COMM | |
dhanhq.CUR | NSE_CURRENCY | |
dhanhq.INDEX | IDX_I | |
| 取引 | dhanhq.BUY | BUY |
dhanhq.SELL | SELL | |
| 注文タイプ | dhanhq.LIMIT | LIMIT |
dhanhq.MARKET | MARKET | |
dhanhq.SL | STOP_LOSS | |
dhanhq.SLM | STOP_LOSS_MARKET | |
| 商品 | dhanhq.CNC | CNC |
dhanhq.INTRA | INTRADAY | |
dhanhq.MARGIN | MARGIN | |
dhanhq.MTF | MTF | |
| 有効期間 | dhanhq.DAY | DAY |
dhanhq.IOC | IOC |
優先して使用する現行 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() |
| eDIS | dhan.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_EQ | CNC、INTRADAY、MARGIN、MTF |
NSE_FNO、BSE_FNO、MCX_COMM、NSE_CURRENCY、BSE_CURRENCY | INTRADAY、MARGIN |
金融商品解決のルール
主な情報源として、セキュリティマスターを使用し、以下を取得してください。
security_idlot_sizetick_size- 満期日
- 権利行使価格
- デリバティブ契約の検索
インデックスの原資産のクイックリファレンス:
| 原資産 | security_id | 原資産セグメント |
|---|---|---|
| NIFTY 50 | 13 | IDX_I |
| BANK NIFTY | 25 | IDX_I |
| FINNIFTY | 27 | IDX_I |
| MIDCPNIFTY | 442 | IDX_I |
| SENSEX | 51 | IDX_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 カテゴリ | 秒あたり | 分あたり | 時間あたり | 日あたり |
|---|---|---|---|---|
| 注文 API | 10 | 250 | 1000 | 7000 |
| データ API | 5 | - | - | 100000 |
| クオート API | 1 | 無制限 | 無制限 | 無制限 |
| 非取引 API | 20 | 無制限 | 無制限 | 無制限 |
リファレンスファイル
Dhan API では、注文執行、気配値、OHLC、オプションチェーン、ポートフォリオを利用できます。ファンダメンタルデータ(PE、EPS、売上高)、テクニカル指標(RSI、MACD)、またはDhanでは利用できない株主保有パターンについては、ScanXを使用してください。references/scanx-data.mdを参照してください。
| 必要な情報 | ファイル |
|---|---|
| 注文、スーパー注文、無期限注文 | references/orders.md |
| 保有資産、ポジション、eDIS | references/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が表示された場合:
web.dhan.coにログインしますMy Profile->Access DhanHQ APIsを開きますdataPlanが有効であることを確認します- 必要に応じてData APIプランを有効にします
- 新しいアクセストークンを生成します
ticker_data()またはohlc_data()で再テストします- 注文APIがまだ失敗する場合は、静的IPを別途確認します
コメント
Markdown 対応