|
11 | 11 |
|
12 | 12 | from tigeropen.common.consts import Market, Language, QuoteRight, BarPeriod, OPEN_API_SERVICE_VERSION_V3 |
13 | 13 | from tigeropen.common.consts import THREAD_LOCAL, SecurityType, CorporateActionType, IndustryLevel |
14 | | -from tigeropen.common.consts.service_types import GRAB_QUOTE_PERMISSION, QUOTE_DELAY, GET_QUOTE_PERMISSION |
| 14 | +from tigeropen.common.consts.service_types import GRAB_QUOTE_PERMISSION, QUOTE_DELAY, GET_QUOTE_PERMISSION, \ |
| 15 | + HISTORY_TIMELINE |
15 | 16 | from tigeropen.common.consts.service_types import MARKET_STATE, ALL_SYMBOLS, ALL_SYMBOL_NAMES, BRIEF, \ |
16 | 17 | TIMELINE, KLINE, TRADE_TICK, OPTION_EXPIRATION, OPTION_CHAIN, FUTURE_EXCHANGE, OPTION_BRIEF, \ |
17 | 18 | OPTION_KLINE, OPTION_TRADE_TICK, FUTURE_KLINE, FUTURE_TICK, FUTURE_CONTRACT_BY_EXCHANGE_CODE, \ |
|
53 | 54 | from tigeropen.quote.response.quote_depth_response import DepthQuoteResponse |
54 | 55 | from tigeropen.quote.response.quote_grab_permission_response import QuoteGrabPermissionResponse |
55 | 56 | from tigeropen.quote.response.quote_ticks_response import TradeTickResponse |
| 57 | +from tigeropen.quote.response.quote_timeline_history_response import QuoteTimelineHistoryResponse |
56 | 58 | from tigeropen.quote.response.quote_timeline_response import QuoteTimelineResponse |
57 | 59 | from tigeropen.quote.response.stock_briefs_response import StockBriefsResponse |
58 | 60 | from tigeropen.quote.response.stock_details_response import StockDetailsResponse |
|
64 | 66 |
|
65 | 67 |
|
66 | 68 | class QuoteClient(TigerOpenClient): |
67 | | - def __init__(self, client_config, logger=None): |
| 69 | + |
| 70 | + def __init__(self, client_config, logger=None, is_grab_permission=True): |
68 | 71 | if not logger: |
69 | 72 | logger = logging.getLogger('tiger_openapi') |
70 | 73 | super(QuoteClient, self).__init__(client_config, logger=logger) |
71 | 74 | if client_config: |
72 | 75 | self._lang = client_config.language |
73 | 76 | else: |
74 | 77 | self._lang = Language.zh_CN |
| 78 | + self.permissions = None |
| 79 | + if is_grab_permission and self.permissions is None: |
| 80 | + self.permissions = self.grab_quote_permission() |
| 81 | + logger.info('Grab quote permission. Permissions:' + str(self.permissions)) |
75 | 82 |
|
76 | 83 | def __fetch_data(self, request): |
77 | 84 | try: |
@@ -364,6 +371,33 @@ def get_timeline(self, symbols, include_hour_trading=False, begin_time=-1, lang= |
364 | 371 | else: |
365 | 372 | raise ApiException(response.code, response.message) |
366 | 373 |
|
| 374 | + def get_timeline_history(self, symbols, date, right=QuoteRight.BR): |
| 375 | + """ |
| 376 | + get timeline history data |
| 377 | + :param symbols: security symbol list. like ['AAPL', 'BABA'] |
| 378 | + :param date: date of timeline. yyyy-MM-dd format, like "2022-04-12" |
| 379 | + :param right: quote right. QuoteRight.BR: before right,QuoteRight.NR: no right |
| 380 | + :return: pandas.DataFrame, columns explanations: |
| 381 | + symbol: security symbol |
| 382 | + time: time in milliseconds |
| 383 | + price: close price of current minute |
| 384 | + avg_price: volume weighted average price up to now. |
| 385 | + """ |
| 386 | + params = MultipleQuoteParams() |
| 387 | + params.symbols = symbols |
| 388 | + params.date = date |
| 389 | + params.right = get_enum_value(right) |
| 390 | + |
| 391 | + request = OpenApiRequest(HISTORY_TIMELINE, biz_model=params) |
| 392 | + response_content = self.__fetch_data(request) |
| 393 | + if response_content: |
| 394 | + response = QuoteTimelineHistoryResponse() |
| 395 | + response.parse_response_content(response_content) |
| 396 | + if response.is_success(): |
| 397 | + return response.timelines |
| 398 | + else: |
| 399 | + raise ApiException(response.code, response.message) |
| 400 | + |
367 | 401 | def get_bars(self, symbols, period=BarPeriod.DAY, begin_time=-1, end_time=-1, right=QuoteRight.BR, limit=251, |
368 | 402 | lang=None): |
369 | 403 | """ |
|
0 commit comments