Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
 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
Ejemplo n.º 4
0
 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
Ejemplo n.º 10
0
    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
Ejemplo n.º 11
0
    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
Ejemplo n.º 12
0
    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
Ejemplo n.º 13
0
    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)
Ejemplo n.º 14
0
 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
Ejemplo n.º 15
0
    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
Ejemplo n.º 16
0
    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)
Ejemplo n.º 17
0
    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
Ejemplo n.º 18
0
    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
Ejemplo n.º 19
0
    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
Ejemplo n.º 20
0
    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)
Ejemplo n.º 21
0
    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)
Ejemplo n.º 22
0
 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
Ejemplo n.º 23
0
    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)
Ejemplo n.º 24
0
    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
Ejemplo n.º 25
0
 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)
Ejemplo n.º 26
0
 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)
Ejemplo n.º 27
0
    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)
Ejemplo n.º 28
0
 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)
Ejemplo n.º 29
0
    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)
Ejemplo n.º 30
0
 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