Skip to content

Commit 599c79e

Browse files
committed
trading calendar api
1 parent eacf611 commit 599c79e

File tree

6 files changed

+97
-3
lines changed

6 files changed

+97
-3
lines changed

tigeropen/common/consts/service_types.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
QUOTE_DEPTH = "quote_depth" # level2 深度行情
5151
GRAB_QUOTE_PERMISSION = "grab_quote_permission" # 抢占行情
5252
GET_QUOTE_PERMISSION = "get_quote_permission"
53+
TRADING_CALENDAR = "trading_calendar"
5354

5455
# 期权行情
5556
OPTION_EXPIRATION = "option_expiration"

tigeropen/examples/quote_client_demo.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ def get_quote():
6262
delay_brief = openapi_client.get_stock_delay_briefs(['AAPL', 'GOOG'])
6363
print(delay_brief)
6464

65+
# 获取市场交易日历
66+
calendar = openapi_client.get_trading_calendar(Market.US, begin_date='2022-07-01', end_date='2022-09-02')
67+
print(calendar)
68+
6569

6670
def test_gat_bars_by_page():
6771
bars = openapi_client.get_bars_by_page(['AAPL'], period=BarPeriod.DAY,

tigeropen/quote/quote_client.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from tigeropen.common.consts import Market, Language, QuoteRight, BarPeriod, OPEN_API_SERVICE_VERSION_V3
1515
from tigeropen.common.consts import THREAD_LOCAL, SecurityType, CorporateActionType, IndustryLevel
1616
from tigeropen.common.consts.service_types import GRAB_QUOTE_PERMISSION, QUOTE_DELAY, GET_QUOTE_PERMISSION, \
17-
HISTORY_TIMELINE, FUTURE_CONTRACT_BY_CONTRACT_CODE
17+
HISTORY_TIMELINE, FUTURE_CONTRACT_BY_CONTRACT_CODE, TRADING_CALENDAR
1818
from tigeropen.common.consts.service_types import MARKET_STATE, ALL_SYMBOLS, ALL_SYMBOL_NAMES, BRIEF, \
1919
TIMELINE, KLINE, TRADE_TICK, OPTION_EXPIRATION, OPTION_CHAIN, FUTURE_EXCHANGE, OPTION_BRIEF, \
2020
OPTION_KLINE, OPTION_TRADE_TICK, FUTURE_KLINE, FUTURE_TICK, FUTURE_CONTRACT_BY_EXCHANGE_CODE, \
@@ -37,7 +37,7 @@
3737
from tigeropen.quote.domain.filter import OptionFilter
3838
from tigeropen.quote.request.model import MarketParams, MultipleQuoteParams, MultipleContractParams, \
3939
FutureQuoteParams, FutureExchangeParams, FutureContractParams, FutureTradingTimeParams, SingleContractParams, \
40-
SingleOptionQuoteParams, DepthQuoteParams, OptionChainParams
40+
SingleOptionQuoteParams, DepthQuoteParams, OptionChainParams, TradingCalendarParams
4141
from tigeropen.quote.response.future_briefs_response import FutureBriefsResponse
4242
from tigeropen.quote.response.future_contract_response import FutureContractResponse
4343
from tigeropen.quote.response.future_exchange_response import FutureExchangeResponse
@@ -64,6 +64,7 @@
6464
from tigeropen.quote.response.stock_trade_meta_response import TradeMetaResponse
6565
from tigeropen.quote.response.symbol_names_response import SymbolNamesResponse
6666
from tigeropen.quote.response.symbols_response import SymbolsResponse
67+
from tigeropen.quote.response.trading_calendar_response import TradingCalendarResponse
6768
from tigeropen.tiger_open_client import TigerOpenClient
6869

6970

@@ -1340,3 +1341,26 @@ def get_quote_permission(self):
13401341
else:
13411342
raise ApiException(response.code, response.message)
13421343
return False
1344+
1345+
def get_trading_calendar(self, market, begin_date=None, end_date=None):
1346+
"""
1347+
get trading calendar
1348+
:param market: common.consts.Market, like Market.US
1349+
:param begin_date:
1350+
:param end_date:
1351+
:return:
1352+
"""
1353+
params = TradingCalendarParams()
1354+
params.market = get_enum_value(market)
1355+
params.begin_date = begin_date
1356+
params.end_date = end_date
1357+
request = OpenApiRequest(TRADING_CALENDAR, biz_model=params)
1358+
response_content = self.__fetch_data(request)
1359+
if response_content:
1360+
response = TradingCalendarResponse()
1361+
response.parse_response_content(response_content)
1362+
if response.is_success():
1363+
return response.calendar
1364+
else:
1365+
raise ApiException(response.code, response.message)
1366+
return False

tigeropen/quote/request/model.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -789,3 +789,48 @@ def to_openapi_dict(self):
789789
if self.option_filter:
790790
params['option_filter'] = self.option_filter.to_dict()
791791
return params
792+
793+
794+
class TradingCalendarParams(BaseParams):
795+
def __init__(self):
796+
super().__init__()
797+
self._market = None
798+
self._begin_date = None
799+
self._end_date = None
800+
801+
@property
802+
def market(self):
803+
return self._market
804+
805+
@market.setter
806+
def market(self, value):
807+
self._market = value
808+
809+
@property
810+
def begin_date(self):
811+
return self._begin_date
812+
813+
@begin_date.setter
814+
def begin_date(self, value):
815+
self._begin_date = value
816+
817+
@property
818+
def end_date(self):
819+
return self._end_date
820+
821+
@end_date.setter
822+
def end_date(self, value):
823+
self._end_date = value
824+
825+
def to_openapi_dict(self):
826+
params = dict()
827+
if self.market:
828+
params['market'] = self.market
829+
830+
if self.begin_date:
831+
params['begin_date'] = self.begin_date
832+
833+
if self.end_date:
834+
params['end_date'] = self.end_date
835+
836+
return params

tigeropen/quote/response/quote_grab_permission_response.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
#
33
# @Date : 2021-04-16
44
# @Author : sukai
5-
import json
65
from tigeropen.common.response import TigerResponse
76
from tigeropen.common.util import string_utils
87

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 : 2021-04-16
4+
# @Author : sukai
5+
from tigeropen.common.response import TigerResponse
6+
from tigeropen.common.util import string_utils
7+
8+
9+
class TradingCalendarResponse(TigerResponse):
10+
def __init__(self):
11+
super(TradingCalendarResponse, self).__init__()
12+
self.calendar = None
13+
self._is_success = None
14+
15+
def parse_response_content(self, response_content):
16+
response = super(TradingCalendarResponse, self).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.calendar = string_utils.camel_to_underline_obj(self.data)

0 commit comments

Comments
 (0)