def get_contracts(self, symbol, sec_type=SecurityType.STK, currency=None, exchange=None): """ 批量获取合约 :param symbol: :param sec_type: 合约类型 tigeropen.common.consts.SecurityType :param currency: 币种 tigeropen.common.consts.Currency :param exchange: 交易所 :return: 合约对象列表, 每个列表项的对象信息同 get_contract 返回 """ params = ContractParams() params.account = self._account params.secret_key = self._secret_key params.symbols = symbol if isinstance(symbol, list) else [symbol] params.sec_type = get_enum_value(sec_type) params.currency = get_enum_value(currency) params.exchange = exchange request = OpenApiRequest(CONTRACTS, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = ContractsResponse() response.parse_response_content(response_content) if response.is_success(): return response.contracts else: raise ApiException(response.code, response.message) return None
def get_filled_orders(self, account=None, sec_type=None, market=Market.ALL, symbol=None, start_time=None, end_time=None): """ 获取已成交订单列表. 参数同 get_orders """ params = OrdersParams() params.account = account if account else self._account params.secret_key = self._secret_key params.sec_type = get_enum_value(sec_type) params.market = get_enum_value(market) params.symbol = symbol params.start_date = start_time params.end_date = end_time request = OpenApiRequest(FILLED_ORDERS, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = OrdersResponse() response.parse_response_content(response_content, secret_key=params.secret_key) if response.is_success(): return response.orders else: raise ApiException(response.code, response.message) return None
def get_briefs(self, symbols, include_hour_trading=False, include_ask_bid=False, right=QuoteRight.BR, lang=None): """ 获取股票摘要 :param symbols: 股票代号列表 :param include_hour_trading: 是否包含盘前盘后 :param include_ask_bid: 是否包含买卖盘 :param right: 复权选项 ,br: 前复权,nr: 不复权 :param lang: 语言支持: zh_CN,zh_TW,en_US :return: """ params = MultipleQuoteParams() params.symbols = symbols params.include_hour_trading = include_hour_trading params.include_ask_bid = include_ask_bid params.right = get_enum_value(right) params.lang = get_enum_value(lang) if lang else get_enum_value( self._lang) request = OpenApiRequest(BRIEF, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = QuoteBriefResponse() response.parse_response_content(response_content) if response.is_success(): return response.briefs else: raise ApiException(response.code, response.message) return None
def subscribe_quote(self, symbols, quote_key_type=QuoteKeyType.TRADE, focus_keys=None): """ 订阅行情更新 :param symbols: :param quote_key_type: 行情类型, 值为 common.consts.quote_keys.QuoteKeyType 枚举类型 :param focus_keys: 行情 key, common.consts.quote_keys.QuoteChangeKey 枚举类型的列表 :return: """ extra_headers = dict() if focus_keys: if isinstance(focus_keys, list): keys = list() for key in focus_keys: keys.append(get_enum_value(key)) extra_headers['keys'] = ','.join(keys) else: extra_headers['keys'] = focus_keys elif quote_key_type: extra_headers['keys'] = get_enum_value(quote_key_type) return self._handle_quote_subscribe(destination=QUOTE, subscription=SUBSCRIPTION_QUOTE, symbols=symbols, extra_headers=extra_headers)
def get_short_interest(self, symbols, lang=None): """ 获取美股的做空数据 :param symbols: 股票代号列表 :param lang: 语言支持: zh_CN,zh_TW,en_US :return: pandas.DataFrame 对象,各 column 含义如下: symbol: 证券代码 settlement_date: 收集信息的时间 short_interest: 未平仓做空股数 avg_daily_volume: 过去一年的日均成交量 days_to_cover: 回补天数。使用最近一次获取的未平仓做空股数/日均成交量得到 percent_of_float: 未平仓股数占流通股本的比重 """ params = MultipleQuoteParams() params.symbols = symbols params.lang = get_enum_value(lang) if lang else get_enum_value( self._lang) request = OpenApiRequest(QUOTE_SHORTABLE_STOCKS, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = ShortInterestResponse() response.parse_response_content(response_content) if response.is_success(): return response.short_interests else: raise ApiException(response.code, response.message) return None
def get_future_exchanges(self, sec_type=SecurityType.FUT, lang=None): """ 获取期货交易所列表 :param sec_type: FUT: 期货; FOP: 期货期权 :param lang: :return: pandas.DataFrame , 各 column 的含义如下: code: 交易所代码 name: 交易所名称 zone: 交易所所在时区 """ params = MarketParams() params.sec_type = get_enum_value(sec_type) params.lang = get_enum_value(lang) if lang else get_enum_value( self._lang) request = OpenApiRequest(FUTURE_EXCHANGE, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = FutureExchangeResponse() response.parse_response_content(response_content) if response.is_success(): return response.exchanges else: raise ApiException(response.code, response.message) return None
def get_financial_report(self, symbols, market, fields, period_type): """ 获取财报数据 :param symbols: :param market: 查询的市场. 可选的值为 common.consts.Market 枚举类型, 如 Market.US :param fields: 查询的字段列表. 可选的项为 common.consts 下的 Income, Balance, CashFlow, BalanceSheetRatio, Growth, Leverage, Profitability 枚举类型. 如 Income.total_revenue :param period_type: 查询的周期类型. 可选的值为 common.consts.FinancialReportPeriodType 枚举类型 :return: pandas.DataFrame, 各 column 的含义如下: symbol: 证券代码 currency: 财报使用的币种 field: 查询的字段名称 value: 字段对应的值 period_end_date: 这条记录对应财报的所属自然季度日期 filing_date: 财报的发布日期 """ params = FinancialReportParams() params.symbols = symbols params.market = get_enum_value(market) params.fields = [get_enum_value(field) for field in fields] params.period_type = get_enum_value(period_type) request = OpenApiRequest(FINANCIAL_REPORT, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = FinancialReportResponse() response.parse_response_content(response_content) if response.is_success(): return response.financial_report else: raise ApiException(response.code, response.message)
def get_financial_daily(self, symbols, market, fields, begin_date, end_date): """ 获取日级的财务数据 :param symbols: 证券代码列表 :param market: 查询的市场. 可选的值为 common.consts.Market 枚举类型, 如 Market.US :param fields: 查询的字段列表, 可选的项为 common.consts.Valuation 枚举类型, 如 Valuation.shares_outstanding :param begin_date: 开始时间. 如: '2019-01-01' :param end_date: 结束时间. 格式同 begin_date :return: pandas.DataFrame, 各 column 的含义如下: symbol: 证券代码 field: 查询的字段名称 date: 查询的日期 value: 字段对应的值 """ params = FinancialDailyParams() params.symbols = symbols params.market = get_enum_value(market) params.fields = [get_enum_value(field) for field in fields] params.begin_date = begin_date params.end_date = end_date request = OpenApiRequest(FINANCIAL_DAILY, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = FinancialDailyResponse() response.parse_response_content(response_content) if response.is_success(): return response.financial_daily else: raise ApiException(response.code, response.message)
def get_current_future_contract(self, future_type, lang=None): """ 查询指定品种的当前合约 :param future_type: 期货合约对应的交易品种, 如 CL :param lang: :return: pandas.DataFrame, 各 column 的含义如下: contract_code: 合约代码 type: 期货合约对应的交易品种, 如 CL name: 期货合约的名称 contract_month: 合约交割月份 currency: 交易的货币 first_notice_date: 第一通知日,合约在第一通知日后无法开多仓。已有的多仓会在第一通知日之前(通常为前三个交易日)被强制平仓。 last_bidding_close_time: 竞价截止时间 last_trading_date: 最后交易日 trade: 是否可交易 continuous: 是否为连续合约 """ params = FutureTypeParams() params.type = future_type params.lang = get_enum_value(lang) if lang else get_enum_value( self._lang) request = OpenApiRequest(FUTURE_CURRENT_CONTRACT, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = FutureContractResponse() response.parse_response_content(response_content) if response.is_success(): return response.contracts else: raise ApiException(response.code, response.message) return None
def get_market_status(self, market=Market.ALL, lang=None): """ 获取市场状态 :param market: US 美股,HK 港股, CN A股,ALL 所有 :param lang: 语言支持: zh_CN,zh_TW,en_US :return: MarketStatus 对象构成的列表. MarketStatus 对象有如下属性: market: 字符串,市场名称 status: 字符串,当前市场所处的状态 open_time: 带 tzinfo 的 datetime 对象,表示最近的开盘、交易时间 """ params = MarketParams() params.market = get_enum_value(market) params.lang = get_enum_value(lang) if lang else get_enum_value( self._lang) request = OpenApiRequest(MARKET_STATE, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = MarketStatusResponse() response.parse_response_content(response_content) if response.is_success(): return response.markets else: raise ApiException(response.code, response.message) return None
def get_stock_delay_briefs(self, symbols, lang=None): """ query delay quote :param symbols: stock symbol list, like ['AAPL', 'GOOG'] :param lang: language: tigeropen.common.consts.Language: zh_CN,zh_TW,en_US :return: pandas.DataFrame. the columns are as follows: symbol: pre_close: time: last quote change time volume: open: high: low: close: halted: stock status(0: normal 3: suspended 4: delist 7: ipo 8: changed) """ params = MultipleQuoteParams() params.symbols = symbols params.lang = get_enum_value(lang) if lang else get_enum_value( self._lang) request = OpenApiRequest(QUOTE_DELAY, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = DelayBriefsResponse() response.parse_response_content(response_content) if response.is_success(): return response.briefs else: raise ApiException(response.code, response.message) return None
def get_stock_details(self, symbols, lang=None): """ 获取股票详情 :param symbols: 股票代号列表 :param lang: 语言支持: zh_CN,zh_TW,en_US :return: pandas.DataFrame. 各 column 含义如下: symbol: 代码 market: 市场 sec_type: 证券类型 exchange: 交易所 name: 名称 shortable: 做空信息 ask_price: 卖一价 ask_size: 卖一量 bid_price: 买一价 bid_size: 买一量 pre_close: 前收价 latest_price: 最新价 adj_pre_close: 复权后前收价 latest_time: 最新成交时间 volume: 成交量 open: 开盘价 high: 最高价 low: 最低价 change: 涨跌额 amount: 成交额 amplitude: 振幅 market_status: 市场状态 (未开盘,交易中,休市等) trading_status: 0: 非交易状态 1: 盘前交易(盘前竞价) 2: 交易中 3: 盘后交易(收市竞价) float_shares: 流通股本 shares: 总股本 eps: 每股收益 adr_rate: ADR的比例数据,非ADR的股票为None etf: 非0表示该股票是ETF,1表示不带杠杆的etf,2表示2倍杠杆etf,3表示3倍etf杠杆 listing_date: 上市日期时间戳(该市场当地时间零点),该key可能不存在 更多字段见 tigeropen.quote.response.stock_details_response.StockDetailsResponse """ params = MultipleQuoteParams() params.symbols = symbols params.lang = get_enum_value(lang) if lang else get_enum_value( self._lang) request = OpenApiRequest(STOCK_DETAIL, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = StockDetailsResponse() response.parse_response_content(response_content) if response.is_success(): return response.details else: raise ApiException(response.code, response.message) return None
def get_corporate_split(self, symbols, market, begin_date, end_date): """ 获取公司拆合股数据 :param symbols: 证券代码列表 :param market: 查询的市场. 可选的值为 common.consts.Market 枚举类型, 如 Market.US :param begin_date: 起始时间. 若是时间戳需要精确到毫秒, 为13位整数; 或是日期时间格式的字符串, 如 "2019-01-01" 或 "2019-01-01 12:00:00" :param end_date: 截止时间. 格式同 begin_date :return: pandas.DataFrame, 各 column 的含义如下: symbol: 证券代码 action_type: 固定为 "SPLIT" from_factor: 公司行动前的因子 to_factor: 公司行动后的因子 ratio: 拆合股比例 excute_date: 除权除息日 market: 所属市场 exchange: 所属交易所 """ params = CorporateActionParams() params.action_type = CorporateActionType.SPLIT.value params.symbols = symbols params.market = get_enum_value(market) params.begin_date = begin_date params.end_date = end_date request = OpenApiRequest(CORPORATE_ACTION, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = CorporateSplitResponse() response.parse_response_content(response_content) if response.is_success(): return response.corporate_split else: raise ApiException(response.code, response.message)
def get_orders(self, account=None, sec_type=None, market=Market.ALL, symbol=None, start_time=None, end_time=None, limit=100, is_brief=False, states=None): """ 获取订单列表 :param account: :param sec_type: :param market: :param symbol: :param start_time: 开始时间. 若是时间戳需要精确到毫秒, 为13位整数; 或是日期时间格式的字符串,如"2017-01-01"和 "2017-01-01 12:00:00" :param end_time: 截至时间. 格式同 start_time :param limit: 每次获取订单的数量 :param is_brief: 是否返回精简的订单数据 :param states: 订单状态枚举对象列表, 可选, 若传递则按状态筛选 :return: Order 对象构成的列表. Order 对象信息参见 tigeropen.trade.domain.order """ params = OrdersParams() params.account = account if account else self._account params.secret_key = self._secret_key params.sec_type = get_enum_value(sec_type) params.market = get_enum_value(market) params.symbol = symbol params.start_date = start_time params.end_date = end_time params.limit = limit params.is_brief = is_brief params.states = [get_enum_value(state) for state in states] if states else None request = OpenApiRequest(ORDERS, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = OrdersResponse() response.parse_response_content(response_content, secret_key=params.secret_key) if response.is_success(): return response.orders else: raise ApiException(response.code, response.message) return None
def get_positions(self, account=None, sec_type=SecurityType.STK, currency=Currency.ALL, market=Market.ALL, symbol=None, sub_accounts=None): """ 获取持仓数据 :param account: :param sec_type: :param currency: :param market: :param symbol: :param sub_accounts: :return: 由 Position 对象构成的列表. Position 对象有如下属性: account: 所属账户 contract: 合约对象 quantity: 持仓数量 average_cost: 持仓成本 market_price: 最新价格 market_value: 市值 realized_pnl: 实现盈亏 unrealized_pnl: 持仓盈亏 """ params = PositionParams() params.account = account if account else self._account params.secret_key = self._secret_key params.sec_type = get_enum_value(sec_type) params.sub_accounts = sub_accounts params.currency = get_enum_value(currency) params.market = get_enum_value(market) params.symbol = symbol request = OpenApiRequest(POSITIONS, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = PositionsResponse() response.parse_response_content(response_content) if response.is_success(): return response.positions else: raise ApiException(response.code, response.message) return None
def get_bars(self, symbols, period=BarPeriod.DAY, begin_time=-1, end_time=-1, right=QuoteRight.BR, limit=251, lang=None): """ 获取K线数据 :param symbols: 股票代号列表 :param period: day: 日K,week: 周K,month:月K ,year:年K,1min:1分钟,5min:5分钟,15min:15分钟,30min:30分钟,60min:60分钟 :param begin_time: 开始时间. 若是时间戳需要精确到毫秒, 为13位整数; 或是日期时间格式的字符串, 如 "2019-01-01" 或 "2019-01-01 12:00:00" :param end_time: 结束时间. 格式同 begin_time :param right: 复权选项 ,QuoteRight.BR: 前复权,nQuoteRight.NR: 不复权 :param limit: 数量限制 :param lang: 语言支持: zh_CN,zh_TW,en_US :return: pandas.DataFrame 对象,各 column 的含义如下; time: 毫秒时间戳 open: Bar 的开盘价 close: Bar 的收盘价 high: Bar 的最高价 low: Bar 的最低价 volume: Bar 的成交量 """ params = MultipleQuoteParams() params.symbols = symbols params.period = get_enum_value(period) params.begin_time = begin_time params.end_time = end_time params.right = get_enum_value(right) params.limit = limit params.lang = get_enum_value(lang) if lang else get_enum_value( self._lang) request = OpenApiRequest(KLINE, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = QuoteBarResponse() response.parse_response_content(response_content) if response.is_success(): return response.bars else: raise ApiException(response.code, response.message)
def get_stock_briefs(self, symbols, lang=None): """ 获取股票实时行情 :param symbols: 股票代号列表 :param lang: 语言支持: tigeropen.common.consts.Language: zh_CN,zh_TW,en_US :return: pandas.DataFrame. 各 column 含义如下: symbol: 证券代码 ask_price: 卖一价 ask_size: 卖一量 bid_price: 买一价 bid_size: 买一量 pre_close: 前收价 latest_price: 最新价 latest_time: 最新成交时间 volume: 成交量 open: 开盘价 high: 最高价 low: 最低价 status: 交易状态: "UNKNOWN": 未知 "NORMAL": 正常 "HALTED": 停牌 "DELIST": 退市 "NEW": 新股 "ALTER": 变更 """ params = MultipleQuoteParams() params.symbols = symbols params.lang = get_enum_value(lang) if lang else get_enum_value( self._lang) request = OpenApiRequest(QUOTE_REAL_TIME, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = StockBriefsResponse() response.parse_response_content(response_content) if response.is_success(): return response.briefs else: raise ApiException(response.code, response.message) return None
def get_trade_ticks(self, symbols, begin_index=None, end_index=None, limit=None, lang=None): """ 获取逐笔成交 :param symbols: 股票代号列表 :param begin_index: 开始索引 :param end_index: 结束索引 :param limit: 数量限制 :param lang: 语言支持: zh_CN,zh_TW,en_US :return: pandas.DataFrame 对象, column 有如下属性: index: 索引值 time: 毫秒时间戳 price: 成交价 volume: 成交量 direction: 价格变动方向,"-"表示向下变动, "+" 表示向上变动 """ params = MultipleQuoteParams() params.symbols = symbols params.begin_index = begin_index params.end_index = end_index params.limit = limit params.lang = get_enum_value(lang) if lang else get_enum_value( self._lang) request = OpenApiRequest(TRADE_TICK, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = TradeTickResponse() response.parse_response_content(response_content) if response.is_success(): return response.trade_ticks else: raise ApiException(response.code, response.message) return None
def get_symbol_names(self, market=Market.ALL, lang=None): """ 获取股票代号列表和名称 :param market: US 美股,HK 港股, CN A股,ALL 所有 :param lang: 语言支持: zh_CN,zh_TW,en_US :return: list, list 中的每个对象是一个 tuple. tuple 的第一个元素是 symbol,第二个是 name """ params = MarketParams() params.market = get_enum_value(market) params.lang = get_enum_value(lang) if lang else get_enum_value( self._lang) request = OpenApiRequest(ALL_SYMBOL_NAMES, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = SymbolNamesResponse() response.parse_response_content(response_content) if response.is_success(): return response.symbol_names else: raise ApiException(response.code, response.message) return None
def get_timeline(self, symbols, include_hour_trading=False, begin_time=-1, lang=None): """ 获取当日分时数据 :param symbols: 股票代号列表 :param include_hour_trading: 是否包含盘前盘后分时 :param begin_time: 开始时间. 若是时间戳需要精确到毫秒, 为13位整数; 或是日期时间格式的字符串, 如 "2019-01-01" 或 "2019-01-01 12:00:00" :param lang: 语言支持: zh_CN,zh_TW,en_US :return: pandas.DataFrame, DataFrame 的 column 及含义如下: symbol: 证券代码 time: 精确到毫秒的时间戳 price: 当前分钟的收盘价 avg_price: 截至到当前时间的成交量加权均价 pre_close: 昨日收盘价 volume: 这一分钟的成交量 trading_session: 字符串, "pre_market" 表示盘前交易, "regular" 表示盘中交易, "after_hours"表示盘后交易 """ params = MultipleQuoteParams() params.symbols = symbols params.include_hour_trading = include_hour_trading params.begin_time = begin_time params.lang = get_enum_value(lang) if lang else get_enum_value( self._lang) request = OpenApiRequest(TIMELINE, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = QuoteTimelineResponse() response.parse_response_content(response_content) if response.is_success(): return response.timelines else: raise ApiException(response.code, response.message)
def get_depth_quote(self, symbols, market): """ 获取深度行情 :param symbols: :param market: tigeropen.common.consts.Market :return: 数据结构: 若返回单个 symbol: {'symbol': '02833', 'asks': [(27.4, 300, 2), (27.45, 500, 1), (27.5, 4400, 1), (27.55, 0, 0), (27.6, 5700, 3), (27.65, 0, 0), (27.7, 500, 1), (27.75, 0, 0), (27.8, 0, 0), (27.85, 0, 0)], 'bids': [(27, 4000, 3), (26.95, 200, 1), (26.9, 0, 0), (26.85, 400, 1), (26.8, 0, 0), (26.75, 0, 0), (26.7, 0, 0), (26.65, 0, 0), (26.6, 0, 0), (26.55, 0, 0)] } 若返回多个 symbol: {'02833': {'symbol': '02833', 'asks': [(27.35, 200, 1), (27.4, 2100, 2), (27.45, 500, 1), (27.5, 4400, 1), (27.55, 0, 0), (27.6, 5700, 3), (27.65, 0, 0), (27.7, 500, 1), (27.75, 0, 0), (27.8, 0, 0)], 'bids': [(27.05, 100, 1), (27, 5000, 4), (26.95, 200, 1), (26.9, 0, 0), (26.85, 400, 1), (26.8, 0, 0), (26.75, 0, 0), (26.7, 0, 0), (26.65, 0, 0), (26.6, 0, 0)] }, '02828': {'symbol': '02828', 'asks': [(106.6, 6800, 7), (106.7, 110200, 10), (106.8, 64400, 8), (106.9, 80600, 8), (107, 9440, 16), (107.1, 31800, 5), (107.2, 11800, 4), (107.3, 9800, 2), (107.4, 9400, 1), (107.5, 21000, 9)], 'bids': [(106.5, 62800, 17), (106.4, 68200, 9), (106.3, 78400, 6), (106.2, 52400, 4), (106.1, 3060, 4), (106, 33400, 4), (105.9, 29600, 3), (105.8, 9600, 2), (105.7, 15200, 2), (105.6, 0, 0)]} } asks 和 bids 列表项数据含义为 (委托价格,委托数量,委托订单数) : [(ask_price1, ask_volume1, order_count), (ask_price2, ask_volume2, order_count), ...] [(bid_price1, bid_volume2, order_count), (bid_price2, bid_volume2, order_count), ...] """ params = DepthQuoteParams() params.symbols = symbols if isinstance(symbols, list) else [symbols] params.market = get_enum_value(market) request = OpenApiRequest(QUOTE_DEPTH, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = DepthQuoteResponse() response.parse_response_content(response_content) if response.is_success(): return response.order_book else: raise ApiException(response.code, response.message)
def get_transactions(self, account=None, order_id=None, symbol=None, sec_type=None, start_time=None, end_time=None, limit=100, expiry=None, strike=None, put_call=None): """ query order transactions, only prime accounts are supported. :param account: account id. If not passed, the default account is used :param order_id: order's id :param symbol: symbol of contract, like 'AAPL', '00700', 'CL2201' :param sec_type: security type. tigeropen.common.consts.SecurityType, like SecurityType.STK :param start_time: timestamp in milliseconds, like 1641398400000 :param end_time: timestamp in milliseconds, like 1641398400000 :param limit: limit number of response :param expiry: expiry date of Option. 'yyyyMMdd', like '220121' :param strike: strike price of Option :param put_call: Option right, PUT or CALL :return: """ params = TransactionsParams() params.account = account if account else self._account params.secret_key = self._secret_key params.order_id = order_id params.sec_type = get_enum_value(sec_type) params.symbol = symbol params.start_date = start_time params.end_date = end_time params.limit = limit params.expiry = expiry params.strike = strike params.right = put_call request = OpenApiRequest(ORDER_TRANSACTIONS, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = TransactionsResponse() response.parse_response_content(response_content) if response.is_success(): return response.transactions else: raise ApiException(response.code, response.message) return None
def get_future_bars(self, identifiers, period=BarPeriod.DAY, begin_time=-1, end_time=-1, limit=1000): """ 获取期货K线数据 :param identifiers: 期货代码列表 :param period: day: 日K,week: 周K,month:月K ,year:年K,1min:1分钟,5min:5分钟,15min:15分钟,30min:30分钟,60min:60分钟 :param begin_time: 开始时间. 若是时间戳需要精确到毫秒, 为13位整数; 或是日期时间格式的字符串, 如 "2019-01-01" 或 "2019-01-01 12:00:00" :param end_time: 结束时间. 格式同 begin_time :param limit: 数量限制 :return: pandas.DataFrame, 各column 含义如下: identifier: 期货合约代码 time: Bar对应的时间戳, 即Bar的结束时间。Bar的切割方式与交易所一致,以CN1901举例,T日的17:00至T+1日的16:30的数据会被合成一个日级Bar。 latest_time: Bar 最后的更新时间 open: 开盘价 high: 最高价 low: 最低价 close: 收盘价 settlement: 结算价,在未生成结算价时返回0 volume: 成交量 open_interest: 未平仓合约数量 """ params = FutureQuoteParams() params.contract_codes = identifiers params.period = get_enum_value(period) params.begin_time = begin_time params.end_time = end_time params.limit = limit request = OpenApiRequest(FUTURE_KLINE, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = FutureQuoteBarResponse() response.parse_response_content(response_content) if response.is_success(): return response.bars else: raise ApiException(response.code, response.message)
def get_symbols(self, market=Market.ALL): """ 获取股票代号列表 :param market: US 美股,HK 港股, CN A股,ALL 所有 :return: 所有 symbol 的列表,包含退市和不可交易的部分代码. 其中以.开头的代码为指数, 如 .DJI 表示道琼斯指数 """ params = MarketParams() params.market = get_enum_value(market) request = OpenApiRequest(ALL_SYMBOLS, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = SymbolsResponse() response.parse_response_content(response_content) if response.is_success(): return response.symbols else: raise ApiException(response.code, response.message) return None
def get_industry_list(self, industry_level=IndustryLevel.GGROUP): """ 获取行业列表 :param industry_level: 行业级别. 可选值为 common.consts.IndustryLevel 枚举类型. 默认一级行业 :return: 由行业信息 dict 构成的列表. industry_level 为行业级别, id 为行业 id 如 [{'industry_level': 'GGROUP', 'id': '5020', 'name_cn': '媒体与娱乐', 'name_en': 'Media & Entertainment'}, {'industry_level': 'GGROUP', 'id': '2550', 'name_cn': '零售业', 'name_en': 'Retailing'}, ...] """ params = IndustryParams() params.industry_level = get_enum_value(industry_level) request = OpenApiRequest(INDUSTRY_LIST, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = IndustryListResponse() response.parse_response_content(response_content) if response.is_success(): return response.industry_list else: raise ApiException(response.code, response.message)
def get_industry_stocks(self, industry, market=Market.US): """ 获取某行业下的股票列表 :param industry: 行业 id :param market: 市场枚举类型 :return: 公司信息列表. 如 [{'symbol': 'A', 'company_name': 'A', 'market': 'US', 'industry_list': [{...}, {...},..]}, {'symbol': 'B', 'company_name': 'B', 'market': 'US', 'industry_list': [{...}, {...},..]}, ...] """ params = IndustryParams() params.market = get_enum_value(market) params.industry_id = industry request = OpenApiRequest(INDUSTRY_STOCKS, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = IndustryStocksResponse() response.parse_response_content(response_content) if response.is_success(): return response.industry_stocks else: raise ApiException(response.code, response.message)
def get_corporate_earnings_calendar(self, market, begin_date, end_date): """ 获取公司财报日历 :param market: :param begin_date: 起始时间 :param end_date: 截止时间 :return: """ params = CorporateActionParams() params.action_type = CorporateActionType.EARNINGS_CALENDAR.value params.market = get_enum_value(market) params.begin_date = begin_date params.end_date = end_date request = OpenApiRequest(CORPORATE_ACTION, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = EarningsCalendarResponse() response.parse_response_content(response_content) if response.is_success(): return response.earnings_calendar else: raise ApiException(response.code, response.message)
def get_stock_industry(self, symbol, market=Market.US): """ 获取股票的行业 :param symbol: 股票 symbol :param market: 市场枚举类型 :return: 所属多级行业的列表 如 [{'industry_level': 'GSECTOR', 'id': '45', 'name_cn': '信息技术', 'name_en': 'Information Technology'}, {'industry_level': 'GGROUP', 'id': '4520', 'name_cn': '技术硬件与设备', 'name_en': 'Technology Hardware & Equipment'}, {'industry_level': 'GIND', 'id': '452020', 'name_cn': '电脑与外围设备', 'name_en': 'Technology Hardware, Storage & Peripherals'}, {'industry_level': 'GSUBIND', 'id': '45202030', 'name_cn': '电脑硬件、储存设备及电脑周边', 'name_en': 'Technology Hardware, Storage & Peripherals'}] """ params = IndustryParams() params.symbol = symbol params.market = get_enum_value(market) request = OpenApiRequest(STOCK_INDUSTRY, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = StockIndustryResponse() response.parse_response_content(response_content) if response.is_success(): return response.stock_industry else: raise ApiException(response.code, response.message)
def get_corporate_dividend(self, symbols, market, begin_date, end_date): """ 获取公司派息数据 :param symbols: 证券代码列表 :param market: 查询的市场. 可选的值为 common.consts.Market 枚举类型, 如 Market.US :param begin_date: 起始时间. 若是时间戳需要精确到毫秒, 为13位整数; 或是日期时间格式的字符串, 如 "2019-01-01" 或 "2019-01-01 12:00:00" :param end_date: 截止时间. 格式同 begin_date :return: pandas.DataFrame, 各 column 的含义如下: symbol: 证券代码 action_type: 固定为 "DIVIDEND" amount: 分红金额 currency: 分红货币类型 announced_date: 公告日期 excute_date: 除权除息日 record_date: 股权登记日 pay_date: 现金到账日 market: 所属市场 exchange: 所属交易所 """ params = CorporateActionParams() params.action_type = CorporateActionType.DIVIDEND.value params.symbols = symbols params.market = get_enum_value(market) params.begin_date = begin_date params.end_date = end_date request = OpenApiRequest(CORPORATE_ACTION, biz_model=params) response_content = self.__fetch_data(request) if response_content: response = CorporateDividendResponse() response.parse_response_content(response_content) if response.is_success(): return response.corporate_dividend else: raise ApiException(response.code, response.message)
def __init__(self, symbol=None, currency=None, contract_id=None, sec_type=None, exchange=None, origin_symbol=None, local_symbol=None, expiry=None, strike=None, put_call=None, multiplier=None, name=None, short_margin=None, short_fee_rate=None, shortable=None, long_initial_margin=None, long_maintenance_margin=None, contract_month=None, identifier=None, primary_exchange=None, market=None, min_tick=None, trading_class=None, status=None, continuous=None, trade=None, last_trading_date=None, first_notice_date=None, last_bidding_close_time=None): self.contract_id = contract_id self.symbol = symbol self.currency = get_enum_value(currency) self.sec_type = get_enum_value(sec_type) self.exchange = exchange self.origin_symbol = origin_symbol self.local_symbol = local_symbol # 到期日 self.expiry = expiry # 行权价 self.strike = strike # 看跌/看涨 self.put_call = put_call self.right = self.put_call # 合约乘数 self.multiplier = multiplier # 合约名称 self.name = name # 做空保证金比例 self.short_margin = short_margin # 做空费率 self.short_fee_rate = short_fee_rate # 做空池剩余 self.shortable = shortable # 做多初始保证金 self.long_initial_margin = long_initial_margin # 做多维持保证金 self.long_maintenance_margin = long_maintenance_margin # 合约月份 self.contract_month = contract_month # 合约标识符 self.identifier = identifier # 股票上市交易所 self.primary_exchange = primary_exchange # 市场 self.market = market # 最小报价单位 self.min_tick = min_tick # 合约的交易级别名称 self.trading_class = trading_class # 状态 self.status = status # 期货专有,是否连续合约 self.continuous = continuous # 期货专有,是否可交易 self.trade = trade # 期货专有,最后交易日 self.last_trading_date = last_trading_date # 期货专有,第一通知日,合约在第一通知日后无法开多仓. 已有的多仓会在第一通知日之前(通常为前三个交易日)被强制平仓 self.first_notice_date = first_notice_date # 期货专有,竞价截止时间 self.last_bidding_close_time = last_bidding_close_time