# 登録・登録解除

# 登録

subscribe(code_list, subtype_list, is_first_push=True, subscribe_push=True, is_detailed_orderbook=False, extended_time=False, session=Session.NONE)

  • 概要

    必要なリアルタイム情報の配信登録を行います。銘柄と登録するデータタイプを指定してください。
    香港市場(正株、ワラント、CBBC、オプション、先物を含む)の登録にはLV1以上の権限が必要です。BMP権限では登録に対応していません。
    米国株市場(正株、ETFを含む)の夜間取引相場情報の登録にはLV1以上の権限が必要です。BMP権限では登録に対応していません。

  • パラメータ

    パラメータ 説明
    code_list list 登録する銘柄コードリスト
    subtype_list list 登録するデータタイプリスト
    is_first_push bool 登録成功後にキャッシュデータを即座にプッシュするかどうか
    subscribe_push bool 登録後にプッシュするかどうか
    is_detailed_orderbook bool 詳細な板情報の注文明細を登録するかどうか
    extended_time bool 米国株のプレ/アフターマーケットデータを許可するかどうか
    session Session 米国株の登録時間帯
  • 戻り値

    パラメータ 説明
    ret RET_CODE API呼び出し結果
    err_message NoneType 当 ret == RET_OK 时,返す None
    str 当 ret != RET_OK 时,返すエラー説明
  • Example

import time
from futu import *
class OrderBookTest(OrderBookHandlerBase):
    def on_recv_rsp(self, rsp_pb):
        ret_code, data = super(OrderBookTest,self).on_recv_rsp(rsp_pb)
        if ret_code != RET_OK:
            print("OrderBookTest: error, msg: %s" % data)
            return RET_ERROR, data
        print("OrderBookTest ", data) # OrderBookTest 独自の処理ロジック
        return RET_OK, data
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
handler = OrderBookTest()
quote_ctx.set_handler(handler)  # リアルタイム板情報コールバックの設定
quote_ctx.subscribe(['US.AAPL'], [SubType.ORDER_BOOK])  # 板情報タイプを登録すると、OpenD はサーバーからのプッシュを継続的に受信開始
time.sleep(15)  #  スクリプトが OpenD のプッシュを受信する時間を15秒に設定
quote_ctx.close()  # 接続をクローズすると、OpenD は1分後に対応銘柄の登録を自動解除
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  • Output
OrderBookTest  {'code': 'US.AAPL', 'name': '苹果', 'svr_recv_time_bid': '2025-04-07 05:00:52.266', 'svr_recv_time_ask': '2025-04-07 05:00:53.973', 'Bid': [(180.2, 15, 3, {}), (180.19, 1, 1, {}), (180.18, 11, 2, {}), (180.14, 200, 1, {}), (180.13, 3, 2, {}), (180.1, 99, 3, {}), (180.05, 3, 1, {}), (180.03, 400, 1, {}), (180.02, 10, 1, {}), (180.01, 100, 1, {}), (180.0, 441, 24, {})], 'Ask': [(180.3, 100, 1, {}), (180.38, 4, 2, {}), (180.4, 100, 1, {}), (180.42, 200, 1, {}), (180.46, 29, 1, {}), (180.5, 1019, 2, {}), (180.6, 1000, 1, {}), (180.8, 2001, 3, {}), (180.84, 15, 2, {}), (181.0, 2036, 4, {}), (181.2, 2000, 2, {}), (181.3, 3, 1, {}), (181.4, 2021, 3, {}), (181.5, 59, 2, {}), (181.79, 9, 1, {}), (181.8, 20, 1, {}), (181.9, 94, 4, {}), (181.98, 20, 1, {}), (182.0, 150, 7, {})]}

1
2

# 登録解除

unsubscribe(code_list, subtype_list, unsubscribe_all=False)

  • 概要

    登録解除

  • パラメータ

    パラメータ 説明
    code_list list 登録解除する銘柄コードリスト
    subtype_list list 登録するデータタイプリスト
    unsubscribe_all bool すべての登録を解除
  • Return

    パラメータ 説明
    ret RET_CODE API呼び出し結果
    err_message NoneType 当 ret == RET_OK, 返す None
    str 当 ret != RET_OK, 返すエラー説明
  • Example

from futu import *
import time
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)

print('current subscription status :', quote_ctx.query_subscription())  # 初期登録状態を確認
ret_sub, err_message = quote_ctx.subscribe(['US.AAPL'], [SubType.QUOTE, SubType.TICKER], subscribe_push=False, session=Session.ALL)
# まずAAPLの全時間帯でQUOTEとTICKERの2タイプを登録。登録成功後、OpenDはサーバーからのプッシュを継続的に受信。Falseはスクリプトへのプッシュ不要を意味する
if ret_sub == RET_OK:   # 登録成功
    print('subscribe successfully!current subscription status :', quote_ctx.query_subscription())  # 登録成功後に登録状態を確認
    time.sleep(60)  # 登録後、少なくとも1分経過しないと登録解除できません
    ret_unsub, err_message_unsub = quote_ctx.unsubscribe(['US.AAPL'], [SubType.QUOTE])
    if ret_unsub == RET_OK:
        print('unsubscribe successfully!current subscription status:', quote_ctx.query_subscription())  # 登録解除後に登録状態を確認
    else:
        print('unsubscription failed!', err_message_unsub)
else:
    print('subscription failed', err_message)
quote_ctx.close() # 使用後は接続をクローズしてください。接続数の枯渇を防止します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  • Output
current subscription status : (0, {'total_used': 0, 'remain': 1000, 'own_used': 0, 'sub_list': {}})
subscribe successfully!current subscription status : (0, {'total_used': 2, 'remain': 998, 'own_used': 2, 'sub_list': {'QUOTE': ['US.AAPL'], 'TICKER': ['US.AAPL']}})
unsubscribe successfully!current subscription status: (0, {'total_used': 1, 'remain': 999, 'own_used': 1, 'sub_list': {'TICKER': ['US.AAPL']}})
1
2
3

# すべての登録を解除

unsubscribe_all()

  • 概要

すべての登録を解除

  • 戻り値

    パラメータ 説明
    ret RET_CODE API呼び出し結果
    err_message NoneType 当 ret == RET_OK, 返す None
    str 当 ret != RET_OK, 返すエラー説明
  • Example

from futu import *
import time
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)

print('current subscription status :', quote_ctx.query_subscription())  # 初期登録状態を確認
ret_sub, err_message = quote_ctx.subscribe(['US.AAPL'], [SubType.QUOTE, SubType.TICKER], subscribe_push=False, session=Session.None)
# まずAAPLの全時間帯でQUOTEとTICKERの2タイプを登録。登録成功後、OpenDはサーバーからのプッシュを継続的に受信。Falseはスクリプトへのプッシュ不要を意味する
if ret_sub == RET_OK:  # 登録成功
    print('subscribe successfully!current subscription status :', quote_ctx.query_subscription())  # 登録成功後に登録状態を確認
    time.sleep(60)  # 登録後、少なくとも1分経過しないと登録解除できません
    ret_unsub, err_message_unsub = quote_ctx.unsubscribe_all()  # すべての登録を解除
    if ret_unsub == RET_OK:
        print('unsubscribe all successfully!current subscription status:', quote_ctx.query_subscription())  # 登録解除後に登録状態を確認
    else:
        print('Failed to cancel all subscriptions!', err_message_unsub)
else:
    print('subscription failed', err_message)
quote_ctx.close()  # 使用後は接続をクローズしてください。接続数の枯渇を防止します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  • Output
current subscription status : (0, {'total_used': 0, 'remain': 1000, 'own_used': 0, 'sub_list': {}})
subscribe successfully!current subscription status : (0, {'total_used': 2, 'remain': 998, 'own_used': 2, 'sub_list': {'QUOTE': ['US.AAPL'], 'TICKER': ['US.AAPL']}})
unsubscribe all successfully!current subscription status: (0, {'total_used': 0, 'remain': 1000, 'own_used': 0, 'sub_list': {}})
1
2
3

APIレート制限

  • 複数のリアルタイムデータタイプの登録に対応しています。SubType を参照してください。銘柄ごとに1タイプの登録で1枠を消費します。
  • 登録枠ルール請を参照 登録枠 & 過去ローソク足データ枠
  • 登録後、少なくとも1分経過しないと登録解除できません。
  • 香港株 SF 相場情報の板情報はデータ量が大きいため、SF 相場情報の速度と OpenD の処理性能を確保するために、現在 SF 権限ユーザーは同時に50銘柄(HKEX の正株、ワラント、CBBC を含む)の板情報のみ登録可能です。残りの登録枠は引き続きティック、売買ブローカーなどの他のタイプの登録に使用できます。
  • 香港株オプション先物在 LV1 権限下,不対応登録ティックタイプ。