Exemplo n.º 1
0
 def get_order(self, account=None, id=None, order_id=None, is_brief=False):
     """
     获取指定订单
     :param account:
     :param id:
     :param order_id:
     :param is_brief: 是否返回精简的订单数据
     :return: Order 对象. 对象信息参见 tigeropen.trade.domain.order
     """
     params = OrderParams()
     params.account = account if account else self._account
     params.secret_key = self._secret_key
     params.id = id
     params.order_id = order_id
     params.is_brief = is_brief
     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[0] if len(
                 response.orders) == 1 else None
         else:
             raise ApiException(response.code, response.message)
     return None
Exemplo n.º 2
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: 开始时间
        :param end_time: 结束时间
        :param limit: 数量限制
        :return:
        """
        params = FutureQuoteParams()
        params.contract_codes = identifiers
        if period:
            params.period = period.value
        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)
Exemplo n.º 3
0
    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 = market.value
        params.fields = [
            field.value if isinstance(field, enum.Enum) else field
            for field in fields
        ]
        params.period_type = period_type.value

        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)
Exemplo n.º 4
0
    def get_timeline(self,
                     symbol,
                     include_hour_trading=False,
                     begin_time=-1,
                     period=TimelinePeriod.DAY,
                     lang=None):
        """
        获取分时数据
        :param symbol: 股票代码
        :param include_hour_trading: 是否包含盘前盘后分时
        :param begin_time: 开始时间
        :param period: 分时 :day,5日分时: 5day
        :param lang: 语言支持: zh_CN,zh_TW,en_US
        :return:
        """
        params = SingleQuoteParams()
        params.symbol = symbol
        params.include_hour_trading = include_hour_trading
        params.begin_time = begin_time
        params.period = period.value
        params.lang = lang.value if lang else self._lang.value

        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():
                if include_hour_trading:
                    return response.pre_market, response.regular, response.after_hours
                else:
                    return response.regular
            else:
                raise ApiException(response.code, response.message)
        print(response_content)
Exemplo n.º 5
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
Exemplo n.º 6
0
    def get_financial_daily(self, symbols, market, fields, begin_date, end_date):
        """
        获取日级的财务数据
        :param symbols:
        :param market:
        :param fields:
        :param begin_date:
        :param end_date:
        :return:
        """
        params = FinancialDailyParams()
        params.symbols = symbols
        params.market = market.value
        params.fields = [field.value if isinstance(field, enum.Enum) else 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)
Exemplo n.º 7
0
    def get_option_trade_ticks(self, identifiers):
        """
        获取期权逐笔成交
        :param identifiers: 期权代码
        :return:
        """
        params = MultipleContractParams()
        contracts = []
        for identifier in identifiers:
            symbol, expiry, put_call, strike = extract_option_info(identifier)
            if symbol is None or expiry is None or put_call is None or strike is None:
                continue
            param = SingleContractParams()
            param.symbol = symbol
            param.expiry = int(delorean.parse(expiry, timezone=eastern, dayfirst=False).datetime.timestamp() * 1000)
            param.put_call = put_call
            param.strike = strike
            contracts.append(param)
        params.contracts = contracts

        request = OpenApiRequest(OPTION_TRADE_TICK, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = OptionTradeTickResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.trade_ticks
            else:
                raise ApiException(response.code, response.message)

        return None
Exemplo n.º 8
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 = market.value
        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)
Exemplo n.º 9
0
    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 = lang.value if lang else self._lang.value

        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
Exemplo n.º 10
0
    def get_option_bars(self, identifiers, begin_time=-1, end_time=4070880000000):
        """
        获取K线(DAY)数据
        :param identifiers: 期权代码
        :param begin_time: 开始时间
        :param end_time: 结束时间
        :return:
        """
        params = MultipleContractParams()
        contracts = []
        for identifier in identifiers:
            symbol, expiry, put_call, strike = extract_option_info(identifier)
            if symbol is None or expiry is None or put_call is None or strike is None:
                continue
            param = SingleOptionQuoteParams()
            param.symbol = symbol
            param.expiry = int(delorean.parse(expiry, timezone=eastern, dayfirst=False).datetime.timestamp() * 1000)
            param.put_call = put_call
            param.strike = strike
            param.period = BarPeriod.DAY.value
            param.begin_time = begin_time
            param.end_time = end_time
            contracts.append(param)
        params.contracts = contracts

        request = OpenApiRequest(OPTION_KLINE, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = OptionQuoteBarResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.bars
            else:
                raise ApiException(response.code, response.message)
Exemplo n.º 11
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
Exemplo n.º 12
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: 开始时间
        :param end_time: 结束时间
        :param right: 复权选项 ,br: 前复权,nr: 不复权
        :param limit: 数量限制
        :param lang: 语言支持: zh_CN,zh_TW,en_US
        :return:
        """
        params = MultipleQuoteParams()
        params.symbols = symbols
        if period:
            params.period = period.value
        params.begin_time = begin_time
        params.end_time = end_time
        params.right = right.value
        params.limit = limit
        params.lang = lang.value if lang else self._lang.value

        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)
Exemplo n.º 13
0
    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
Exemplo n.º 14
0
    def get_future_contracts(self, exchange, lang=None):
        """
        获取交易所下的可交易合约
        :param exchange:
        :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 = FutureExchangeParams()
        params.exchange_code = exchange
        params.lang = get_enum_value(lang) if lang else get_enum_value(
            self._lang)

        request = OpenApiRequest(FUTURE_CONTRACT_BY_EXCHANGE_CODE,
                                 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
Exemplo n.º 15
0
    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 = market.value
        params.fields = [
            field.value if isinstance(field, enum.Enum) else 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)
Exemplo n.º 16
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
Exemplo n.º 17
0
    def get_timeline(self,
                     symbols,
                     include_hour_trading=False,
                     begin_time=-1,
                     lang=None):
        """
        获取当日分时数据
        :param symbols: 股票代码
        :param include_hour_trading: 是否包含盘前盘后分时
        :param begin_time: 开始时间
        :param lang: 语言支持: zh_CN,zh_TW,en_US
        :return:
        """
        params = MultipleQuoteParams()
        params.symbols = symbols
        params.include_hour_trading = include_hour_trading
        params.begin_time = begin_time
        params.lang = lang.value if lang else self._lang.value

        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)
Exemplo n.º 18
0
    def get_trade_ticks(self,
                        symbol,
                        begin_index=0,
                        end_index=30,
                        limit=30,
                        lang=None):
        """
        获取逐笔成交
        :param symbol: 股票代码
        :param begin_index: 开始索引
        :param end_index: 结束索引
        :param limit: 数量限制
        :param lang: 语言支持: zh_CN,zh_TW,en_US
        :return:
        """
        params = SingleQuoteParams()
        params.symbol = symbol
        params.begin_index = begin_index
        params.end_index = end_index
        params.limit = limit
        params.lang = lang.value if lang else self._lang.value

        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
Exemplo n.º 19
0
    def get_option_chain(self, symbol, expiry):
        """
        获取美股期权链
        :param symbol: 股票代码
        :param expiry: 过期日(类似2019-01-04或者1546578000000)
        :return:
        """
        params = MultipleContractParams()
        param = SingleContractParams()
        param.symbol = symbol
        if isinstance(expiry, six.string_types) and re.match('[0-9]{4}\-[0-9]{2}\-[0-9]{2}', expiry):
            param.expiry = int(delorean.parse(expiry, timezone=eastern, dayfirst=False).datetime.timestamp() * 1000)
        else:
            param.expiry = expiry
        params.contracts = [param]
        request = OpenApiRequest(OPTION_CHAIN, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = OptionChainsResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.chain
            else:
                raise ApiException(response.code, response.message)

        return None
Exemplo n.º 20
0
    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 = right.value
        params.lang = lang.value if lang else self._lang.value

        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
Exemplo n.º 21
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
Exemplo n.º 22
0
    def get_future_brief(self, identifiers):
        """
        获取期货最新行情
        :param identifiers: 期货代码列表
        :return: pandas.DataFrame,各 column 含义如下
            identifier: 期货代码
            ask_price: 卖价
            ask_size: 卖量
            bid_price: 买价
            bid_size: 买量
            pre_close: 前收价
            latest_price: 最新价
            latest_size: 最新成交量
            latest_time: 最新价成交时间
            volume: 当日累计成交手数
            open_interest: 未平仓合约数量
            open: 开盘价
            high: 最高价
            low: 最低价
            limit_up: 涨停价
            limit_down: 跌停价
        """
        params = FutureQuoteParams()
        params.contract_codes = identifiers

        request = OpenApiRequest(FUTURE_REAL_TIME_QUOTE, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = FutureBriefsResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.briefs
            else:
                raise ApiException(response.code, response.message)
Exemplo n.º 23
0
    def get_corporate_dividend(self, symbols, market, begin_date, end_date):
        """
        获取公司派息数据
        :param symbols:
        :param market:
        :param begin_date:
        :param end_date:
        :return:
        """
        params = CorporateActionParams()
        params.action_type = CorporateActionType.DIVIDEND.value
        params.symbols = symbols
        params.market = market.value
        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)
Exemplo n.º 24
0
    def get_future_trade_ticks(self,
                               identifiers,
                               begin_index=0,
                               end_index=30,
                               limit=1000):
        """
        获取期货逐笔成交
        :param identifiers: 期货代码列表
        :param begin_index: 开始索引
        :param end_index: 结束索引
        :param limit: 数量限制
        :return: pandas.DataFrame, 各 column 含义如下
            index: 索引值
            time: 成交时间,精确到毫秒的时间戳
            price: 成交价格
            volume: 成交量
        """
        params = FutureQuoteParams()
        params.contract_codes = identifiers
        params.begin_index = begin_index
        params.end_index = end_index
        params.limit = limit

        request = OpenApiRequest(FUTURE_TICK, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = FutureTradeTickResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.trade_ticks
            else:
                raise ApiException(response.code, response.message)
Exemplo n.º 25
0
    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 = lang.value if lang else self._lang.value

        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
Exemplo n.º 26
0
    def get_future_trading_times(self, identifier, trading_date=None):
        """
        查询指定期货合约的交易时间
        :param identifier: 合约代码
        :param trading_date: 指定交易日的时间. 若是时间戳需要精确到毫秒, 为13位整数;
                                             或是日期时间格式的字符串, 如 "2019-01-01" 或 "2019-01-01 12:00:00"
        :return: pandas.DataFrame, 各column含义如下:
            start: 交易开始时间
            end: 交易结束时间
            trading: 是否为连续交易
            bidding: 是否为竞价交易
            zone: 时区
        """
        params = FutureTradingTimeParams()
        params.contract_code = identifier
        params.trading_date = trading_date

        request = OpenApiRequest(FUTURE_TRADING_DATE, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = FutureTradingTimesResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.trading_times
            else:
                raise ApiException(response.code, response.message)
        return None
Exemplo n.º 27
0
    def get_option_briefs(self, identifiers):
        """
        获取期权最新行情
        :param identifiers: 期权代码列表
        :return: pandas.DataFrame, 各 column 的含义如下:
            identifier: 期权代码
            symbol: 期权对应的正股代码
            expiry: 到期日,毫秒级时间戳
            strike: 行权价
            put_call: 期权方向
            multiplier: 乘数
            ask_price: 卖价
            ask_size: 卖量
            bid_price: 买价
            bid_size: 买量
            pre_close: 前收价
            latest_price: 最新价
            latest_time: 最新交易时间
            volume: 成交量
            open_interest: 未平仓数量
            open: 开盘价
            high: 最高价
            low: 最低价
            rates_bonds: 无风险利率
            volatility: 历史波动率
        """
        params = MultipleContractParams()
        contracts = []
        for identifier in identifiers:
            symbol, expiry, put_call, strike = extract_option_info(identifier)
            if symbol is None or expiry is None or put_call is None or strike is None:
                continue
            param = SingleContractParams()
            param.symbol = symbol
            param.expiry = int(
                delorean.parse(expiry, timezone=eastern,
                               dayfirst=False).datetime.timestamp() * 1000)
            param.put_call = put_call
            param.strike = strike
            contracts.append(param)
        params.contracts = contracts

        request = OpenApiRequest(OPTION_BRIEF, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = OptionBriefsResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.briefs
            else:
                raise ApiException(response.code, response.message)

        return None
Exemplo n.º 28
0
    def get_assets(self,
                   account=None,
                   sub_accounts=None,
                   segment=False,
                   market_value=False):
        """
        获取账户资产信息
        :param account:
        :param sub_accounts: 子账户列表
        :param segment: 是否包含证券/期货分类
        :param market_value: 是否包含分市场市值
        :return: 由 PortfolioAccount 对象构成的列表. PortfolioAccount 对象下的 summary 属性包含一个 Account 对象,
         Account 对象有如下属性:
            net_liquidation: 净清算值
            accrued_cash: 净累计利息
            accrued_dividend: 净累计分红
            available_funds: 可用资金(可用于交易)
            accrued_interest: 累计利息
            buying_power: 购买力
            cash: 证券账户金额+期货账户金额
            currency: 货币
            cushion: 当前保证金缓存
            day_trades_remaining: 剩余日内交易次数,-1表示无限制
            equity_with_loan: 含借贷值股权
            excess_liquidity: 当前结余流动性,为保持当前拥有的头寸,必须维持的缓冲保证金的数额,日内风险数值(App)
            gross_position_value: 持仓市值
            initial_margin_requirement: 初始保证金要求
            maintenance_margin_requirement: 维持保证金要求
            regt_equity: RegT 资产
            regt_margin: RegT 保证金
            sma: 特殊备忘录账户,隔夜风险数值(App)
            settled_cash: 结算利息
            leverage: 总杠杆
            net_leverage: 净杠杆
        """
        params = AssetParams()
        params.account = account if account else self._account
        params.secret_key = self._secret_key
        params.sub_accounts = sub_accounts
        params.segment = segment
        params.market_value = market_value

        request = OpenApiRequest(ASSETS, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = AssetsResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.assets
            else:
                raise ApiException(response.code, response.message)

        return None
Exemplo n.º 29
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
Exemplo n.º 30
0
    def modify_order(self,
                     order,
                     quantity=None,
                     limit_price=None,
                     aux_price=None,
                     trail_stop_price=None,
                     trailing_percent=None,
                     percent_offset=None,
                     time_in_force=None,
                     outside_rth=None):
        """
        修改订单
        :param order:
        :param quantity:
        :param limit_price: 限价
        :param aux_price: 在止损单表示止损价格; 在跟踪止损单表示价差
        :param trail_stop_price: 跟踪止损单--触发止损单的价格
        :param trailing_percent: 跟踪止损单--百分比
        :param percent_offset:
        :param time_in_force: 订单有效期, 'DAY'(当日有效)和'GTC'(取消前有效)
        :param outside_rth: 是否允许盘前盘后交易(美股专属)
        :return:
        """
        params = PlaceModifyOrderParams()
        params.account = order.account
        params.order_id = order.order_id
        params.id = order.id
        params.contract = order.contract
        params.action = order.action
        params.order_type = order.order_type
        params.quantity = quantity if quantity is not None else order.quantity
        params.limit_price = limit_price if limit_price is not None else order.limit_price
        params.aux_price = aux_price if aux_price is not None else order.aux_price
        params.trail_stop_price = trail_stop_price if trail_stop_price is not None else order.trail_stop_price
        params.trailing_percent = trailing_percent if trailing_percent is not None else order.trailing_percent
        params.percent_offset = percent_offset if percent_offset is not None else order.percent_offset
        params.time_in_force = time_in_force if time_in_force is not None else order.time_in_force
        params.outside_rth = outside_rth if outside_rth is not None else order.outside_rth
        params.secret_key = order.secret_key if order.secret_key else self._secret_key

        request = OpenApiRequest(MODIFY_ORDER, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = OrderIdResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.order_id == order.order_id if order.order_id else response.id == order.id
            else:
                raise ApiException(response.code, response.message)

        return False