Skip to content

Commit e140dfb

Browse files
committed
hk stock broker api
1 parent a69c200 commit e140dfb

File tree

5 files changed

+102
-3
lines changed

5 files changed

+102
-3
lines changed

tigeropen/common/consts/service_types.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@
5555
MARKET_SCANNER = "market_scanner" # 选股器
5656
GET_QUOTE_PERMISSION = "get_quote_permission"
5757
TRADING_CALENDAR = "trading_calendar"
58+
STOCK_BROKER = "stock_broker" # 港股股票实时经纪队列
59+
CAPITAL_DISTRIBUTION = "capital_distribution" # 股票当日资金分布
60+
CAPITAL_FLOW = "capital_flow" # 股票资金流向
5861

5962
# 期权行情
6063
OPTION_EXPIRATION = "option_expiration"

tigeropen/examples/quote_client_demo.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,26 @@ def test_market_scanner(self):
240240
print(f'scanned symbols:{scanner_result_symbols}')
241241

242242

243+
def test_stock_broker(self):
244+
"""
245+
246+
:return:
247+
{'symbol': '00700',
248+
'bid_broker':
249+
[{'level': 1, 'price': 322.4, 'broker_count': 5,
250+
'broker': [{'id': '5345', 'name': 'J.P. Morgan'},
251+
{'id': '6996', 'name': '中国投资'}, {'id': '6999', 'name': '中国投资'}, {'id': '6999', 'name': '中国投资'},
252+
{'id': '6997', 'name': '中国投资'}]}],
253+
'ask_broker':
254+
[{'level': 1, 'price': 322.6, 'broker_count': 2,
255+
'broker': [{'id': '8461', 'name': 'FUTU Securities'}, {'id': '7389', 'name': '花旗'}]},
256+
{'level': 2, 'price': 322.8, 'broker_count': 3,
257+
'broker': [{'id': '6999', 'name': '中国投资'},
258+
{'id': '0746', 'name': '万邦亚太'}, {'id': '5339', 'name': 'J.P. Morgan'}]}]}
259+
"""
260+
result = openapi_client.get_stock_broker('00700', limit=5)
261+
print(result)
262+
243263

244264
if __name__ == '__main__':
245265
with pd.option_context('display.max_rows', None, 'display.max_columns', None):

tigeropen/quote/quote_client.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from tigeropen.common.consts import THREAD_LOCAL, SecurityType, CorporateActionType, IndustryLevel
1616
from tigeropen.common.consts.filter_fields import FieldBelongType
1717
from tigeropen.common.consts.service_types import GRAB_QUOTE_PERMISSION, QUOTE_DELAY, GET_QUOTE_PERMISSION, \
18-
HISTORY_TIMELINE, FUTURE_CONTRACT_BY_CONTRACT_CODE, TRADING_CALENDAR, FUTURE_CONTRACTS, MARKET_SCANNER
18+
HISTORY_TIMELINE, FUTURE_CONTRACT_BY_CONTRACT_CODE, TRADING_CALENDAR, FUTURE_CONTRACTS, MARKET_SCANNER, STOCK_BROKER
1919
from tigeropen.common.consts.service_types import MARKET_STATE, ALL_SYMBOLS, ALL_SYMBOL_NAMES, BRIEF, \
2020
TIMELINE, KLINE, TRADE_TICK, OPTION_EXPIRATION, OPTION_CHAIN, FUTURE_EXCHANGE, OPTION_BRIEF, \
2121
OPTION_KLINE, OPTION_TRADE_TICK, FUTURE_KLINE, FUTURE_TICK, FUTURE_CONTRACT_BY_EXCHANGE_CODE, \
@@ -38,7 +38,8 @@
3838
from tigeropen.quote.domain.filter import OptionFilter
3939
from tigeropen.quote.request.model import MarketParams, MultipleQuoteParams, MultipleContractParams, \
4040
FutureQuoteParams, FutureExchangeParams, FutureContractParams, FutureTradingTimeParams, SingleContractParams, \
41-
SingleOptionQuoteParams, DepthQuoteParams, OptionChainParams, TradingCalendarParams, MarketScannerParams
41+
SingleOptionQuoteParams, DepthQuoteParams, OptionChainParams, TradingCalendarParams, MarketScannerParams, \
42+
StockBrokerParams
4243
from tigeropen.quote.response.future_briefs_response import FutureBriefsResponse
4344
from tigeropen.quote.response.future_contract_response import FutureContractResponse
4445
from tigeropen.quote.response.future_exchange_response import FutureExchangeResponse
@@ -61,6 +62,7 @@
6162
from tigeropen.quote.response.quote_timeline_response import QuoteTimelineResponse
6263
from tigeropen.quote.response.market_scanner_response import MarketScannerResponse
6364
from tigeropen.quote.response.stock_briefs_response import StockBriefsResponse
65+
from tigeropen.quote.response.stock_broker_response import StockBrokerResponse
6466
from tigeropen.quote.response.stock_details_response import StockDetailsResponse
6567
from tigeropen.quote.response.stock_short_interest_response import ShortInterestResponse
6668
from tigeropen.quote.response.stock_trade_meta_response import TradeMetaResponse
@@ -1454,3 +1456,24 @@ def get_trading_calendar(self, market, begin_date=None, end_date=None):
14541456
else:
14551457
raise ApiException(response.code, response.message)
14561458
return False
1459+
1460+
def get_stock_broker(self, symbol, limit=40, lang=None):
1461+
"""Get stock broker information
1462+
:param symbol:
1463+
:param limit: The maximum number of items returned. Default value is 40.
1464+
:param lang: tigeropen.common.consts.Language
1465+
"""
1466+
params = StockBrokerParams()
1467+
params.symbol = symbol
1468+
params.limit = limit
1469+
params.lang = get_enum_value(lang) if lang else get_enum_value(self._lang)
1470+
request = OpenApiRequest(STOCK_BROKER, biz_model=params)
1471+
response_content = self.__fetch_data(request)
1472+
if response_content:
1473+
response = StockBrokerResponse()
1474+
response.parse_response_content(response_content)
1475+
if response.is_success():
1476+
return response.result
1477+
else:
1478+
raise ApiException(response.code, response.message)
1479+
return False

tigeropen/quote/request/model.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -929,7 +929,8 @@ def to_openapi_dict(self):
929929
"market":"US"}
930930
:return:
931931
"""
932-
params = dict()
932+
params = super().to_openapi_dict()
933+
933934
if self.market:
934935
params['market'] = self.market
935936
if self.base_filter_list:
@@ -947,3 +948,34 @@ def to_openapi_dict(self):
947948
if self.page_size is not None:
948949
params['page_size'] = self.page_size
949950
return params
951+
952+
953+
class StockBrokerParams(BaseParams):
954+
def __init__(self):
955+
super().__init__()
956+
self._symbol = None
957+
self._limit = None
958+
959+
@property
960+
def symbol(self):
961+
return self._symbol
962+
963+
@symbol.setter
964+
def symbol(self, value):
965+
self._symbol = value
966+
967+
@property
968+
def limit(self):
969+
return self._limit
970+
971+
@limit.setter
972+
def limit(self, value):
973+
self._limit = value
974+
975+
def to_openapi_dict(self):
976+
params = super().to_openapi_dict()
977+
if self.symbol:
978+
params['symbol'] = self.symbol
979+
if self.limit:
980+
params['limit'] = self.limit
981+
return params
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# -*- coding: utf-8 -*-
2+
#
3+
# @Date : 2022-12-09
4+
# @Author : sukai
5+
from tigeropen.common.response import TigerResponse
6+
from tigeropen.common.util import string_utils
7+
8+
9+
class StockBrokerResponse(TigerResponse):
10+
def __init__(self):
11+
super().__init__()
12+
self.result = None
13+
self._is_success = None
14+
15+
def parse_response_content(self, response_content):
16+
response = super().parse_response_content(response_content)
17+
if 'is_success' in response:
18+
self._is_success = response['is_success']
19+
20+
if self.data:
21+
self.result = string_utils.camel_to_underline_obj(self.data)

0 commit comments

Comments
 (0)