Beispiel #1
0
    def query_shibor_data(start_date=None, end_date=None):
        """
        银行间同业拆放利率
        方法说明:通过API接口获取银行间同业拆放利率,可以通过参数设置获取对应起止日期的数据。
        返回类型:pandas的DataFrame类型。
        参数含义:
        start_date:开始日期,格式XXXX,发布日期在这个范围内,可以为空;
        end_date:结束日期,格式XXXX,发布日期在这个范围内,可以为空。
        """
        lg = bs.login()
        if lg.error_code != '0':
            logger.error('login respond  error_msg:' + lg.error_msg)

        rs = bs.query_shibor_data(start_date=start_date, end_date=end_date)
        if rs.error_code != '0':
            logger.error('query_shibor_data respond  error_msg:' +
                         rs.error_msg)

        data_list = []
        while (rs.error_code == '0') & rs.next():
            data_list.append(rs.get_row_data())
        result = pd.DataFrame(data_list, columns=rs.fields)

        bs.logout()
        return result
Beispiel #2
0
    def query_stock_industry(code=None, date=None):
        """
        行业分类
        方法说明:通过API接口获取行业分类信息,更新频率:每周一更新。
        返回类型:pandas的DataFrame类型。
        参数含义:
        code:A股股票代码,sh或sz.+6位数字代码,或者指数代码,如:sh.601398。sh:上海;sz:深圳。可以为空;
        date:查询日期,格式XXXX-XX-XX,为空时默认最新日期。
        """
        lg = bs.login()
        if lg.error_code != '0':
            logger.error('login respond  error_msg:' + lg.error_msg)

        rs = bs.query_stock_industry(code, date)
        if rs.error_code != '0':
            logger.error('query_stock_industry respond  error_msg:' +
                         rs.error_msg)

        industry_list = []
        while (rs.error_code == '0') & rs.next():
            industry_list.append(rs.get_row_data())
        result = pd.DataFrame(industry_list, columns=rs.fields)

        bs.logout()
        return result
Beispiel #3
0
    def query_forcast_report(code, start_date, end_date):
        """
        季频公司业绩预告
        方法说明:通过API接口获取季频公司业绩预告信息,可以通过参数设置获取起止年份数据,提供2003年至今数据。
        返回类型:pandas的DataFrame类型。
        参数含义:
        code:股票代码,sh或sz.+6位数字代码,或者指数代码,如:sh.601398。sh:上海;sz:深圳。此参数不可为空;
        start_date:开始日期,发布日期或更新日期在这个范围内;
        end_date:结束日期,发布日期或更新日期在这个范围内。
        """
        lg = bs.login()
        if lg.error_code != '0':
            logger.error('login respond  error_msg:' + lg.error_msg)

        rs_forecast = bs.query_forecast_report(code,
                                               start_date=start_date,
                                               end_date=end_date)
        if rs_forecast.error_code != '0':
            logger.error('query_forecast_reprot respond  error_msg:' +
                         rs_forecast.error_msg)

        rs_forecast_list = []
        while (rs_forecast.error_code == '0') & rs_forecast.next():
            rs_forecast_list.append(rs_forecast.get_row_data())
        result_forecast = pd.DataFrame(rs_forecast_list,
                                       columns=rs_forecast.fields)

        bs.logout()
        return result_forecast
Beispiel #4
0
    def query_required_reserve_ratio_data(start_date=None,
                                          end_date=None,
                                          yearType=None):
        """
        存款准备金率
        方法说明:通过API接口获取存款准备金率,可以通过参数设置获取对应起止日期的数据。
        返回类型:pandas的DataFrame类型。
        参数含义:
        start_date:开始日期,格式XXXX-XX-XX,发布日期在这个范围内,可以为空;
        end_date:结束日期,格式XXXX-XX-XX,发布日期在这个范围内,可以为空;
        yearType:年份类别,默认为0,查询公告日期;1查询生效日期。
        """
        yearType = yearType or '0'

        lg = bs.login()
        if lg.error_code != '0':
            logger.error('login respond  error_msg:' + lg.error_msg)

        rs = bs.query_required_reserve_ratio_data(start_date=start_date,
                                                  end_date=end_date,
                                                  yearType=yearType)
        if rs.error_code != '0':
            logger.error(
                'query_required_reserve_ratio_data respond  error_msg:' +
                rs.error_msg)

        data_list = []
        while (rs.error_code == '0') & rs.next():
            data_list.append(rs.get_row_data())
        result = pd.DataFrame(data_list, columns=rs.fields)

        bs.logout()
        return result
Beispiel #5
0
    def query_cash_flow_data(code, year=None, quarter=None):
        """
        季频现金流量
        方法说明:通过API接口获取季频现金流量信息,可以通过参数设置获取对应年份、季度数据,提供2007年至今数据。
        返回类型:pandas的DataFrame类型.
        参数含义:
        code:股票代码,sh或sz.+6位数字代码,或者指数代码,如:sh.601398。sh:上海;sz:深圳。此参数不可为空;
        year:统计年份,为空时默认当前年;
        quarter:统计季度,为空时默认当前季度。不为空时只有4个取值:1,2,3,4。
        """
        lg = bs.login()
        if lg.error_code != '0':
            logger.error('login respond  error_msg:' + lg.error_msg)

        cash_flow_list = []
        rs_cash_flow = bs.query_cash_flow_data(code=code,
                                               year=year,
                                               quarter=quarter)
        while (rs_cash_flow.error_code == '0') & rs_cash_flow.next():
            cash_flow_list.append(rs_cash_flow.get_row_data())
        result_cash_flow = pd.DataFrame(cash_flow_list,
                                        columns=rs_cash_flow.fields)

        bs.logout()
        return result_cash_flow
Beispiel #6
0
 def __init__(self, config_file, symbol=None, path=None, delay=None):
     """initialize Trade API client."""
     try:
         sleep(delay or 10)
         if symbol:
             self.code = str(symbol).replace("sh", "") if str(
                 symbol).startswith("sh") else str(symbol).replace(
                     "sz", "")
         else:
             self.code = ""
         config.loads(config_file)
         self.user = easytrader.use('ths')
         if path:
             self.user.connect(path)
         else:
             self.user.connect(r'C:\东方同花顺独立下单\xiadan.exe')
         logger.info("initialize trade client success !")
     except Exception as e:
         logger.error(
             "initialize trade client failed ! error message: {}".format(e))
Beispiel #7
0
    def query_adjust_factor(code, start_date=None, end_date=None):
        """
        查询复权因子信息
        BaoStock提供的是涨跌幅复权算法复权因子
        :param code:股票代码,sh或sz.+6位数字代码,或者指数代码,如:sh.601398。sh:上海;sz:深圳。此参数不可为空;
        :param start_date:开始日期,为空时默认为2015-01-01,包含此日期;
        :param end_date:结束日期,为空时默认当前日期,包含此日期。
        """
        lg = bs.login()
        if lg.error_code != '0':
            logger.error('login respond  error_msg:' + lg.error_msg)

        rs_list = []
        rs_factor = bs.query_adjust_factor(code=code,
                                           start_date=start_date,
                                           end_date=end_date)
        while (rs_factor.error_code == '0') & rs_factor.next():
            rs_list.append(rs_factor.get_row_data())
        result_factor = pd.DataFrame(rs_list, columns=rs_factor.fields)

        bs.logout()
        return result_factor
Beispiel #8
0
    def query_dividend_data(code, year, yearType):
        """
        查询除权除息信息
        :param code:股票代码,sh或sz.+6位数字代码,或者指数代码,如:sh.601398。sh:上海;sz:深圳。此参数不可为空;
        :param year:年份,如:2017。此参数不可为空;
        :param yearType:年份类别。"report":预案公告年份,"operate":除权除息年份。此参数不可为空。
        """
        lg = bs.login()
        if lg.error_code != '1':
            logger.error('login respond  error_msg:' + lg.error_msg)

        rs_list = []
        rs_dividend = bs.query_dividend_data(code=code,
                                             year=year,
                                             yearType=yearType)
        while (rs_dividend.error_code == '0') & rs_dividend.next():
            rs_list.append(rs_dividend.get_row_data())

        result_dividend = pd.DataFrame(rs_list, columns=rs_dividend.fields)

        bs.logout()
        return result_dividend
Beispiel #9
0
    def query_zz500_stocks(date=None):
        """
        中证500成分股
        方法说明:通过API接口获取中证500成分股信息,更新频率:每周一更新。
        返回类型:pandas的DataFrame类型。
        date:查询日期,格式XXXX-XX-XX,为空时默认最新日期。
        """
        lg = bs.login()
        if lg.error_code != '0':
            logger.error('login respond  error_msg:' + lg.error_msg)

        rs = bs.query_zz500_stocks(date)
        if rs.error_code != '0':
            logger.error('query_zz500_stocks respond  error_msg:' +
                         rs.error_msg)

        zz500_stocks = []
        while (rs.error_code == '0') & rs.next():
            zz500_stocks.append(rs.get_row_data())
        result = pd.DataFrame(zz500_stocks, columns=rs.fields)

        bs.logout()
        return result
Beispiel #10
0
    def query_all_stock(day=None):
        """
        证券代码查询
        方法说明:获取指定交易日期所有股票列表。通过API接口获取证券代码及股票交易状态信息,与日K线数据同时更新。可以通过参数‘某交易日’获取数据(包括:A股、指数),提供2006-今数据。
        返回类型:pandas的DataFrame类型。
        更新时间:与日K线同时更新。
        :param day:需要查询的交易日期,为空时默认当前日期。
        """
        lg = bs.login()
        if lg.error_code != '0':
            logger.error('login respond  error_msg:' + lg.error_msg)

        rs = bs.query_all_stock(day=day)
        if rs.error_code != '0':
            logger.error('query_all_stock respond  error_msg:' + rs.error_msg)

        data_list = []
        while (rs.error_code == '0') & rs.next():
            data_list.append(rs.get_row_data())
        result = pd.DataFrame(data_list, columns=rs.fields)

        bs.logout()
        return result
Beispiel #11
0
    def query_trade_dates(start_date=None, end_date=None):
        """
        交易日查询
        方法说明:通过API接口获取股票交易日信息,可以通过参数设置获取起止年份数据,提供上交所1990-今年数据。 返回类型:pandas的DataFrame类型。
        :param start_date:开始日期,为空时默认为2015-01-01。
        :param end_date:结束日期,为空时默认为当前日期。
        """
        lg = bs.login()
        if lg.error_code != '0':
            logger.error('login respond  error_msg:' + lg.error_msg)

        rs = bs.query_trade_dates(start_date=start_date, end_date=end_date)
        if rs.error_code != '0':
            logger.error('query_trade_dates respond  error_msg:' +
                         rs.error_msg)

        data_list = []
        while (rs.error_code == '0') & rs.next():
            data_list.append(rs.get_row_data())
        result = pd.DataFrame(data_list, columns=rs.fields)

        bs.logout()
        return result
Beispiel #12
0
    def query_stock_basic(code=None, code_name=None):
        """
        证券基本资料
        方法说明:获取证券基本资料,可以通过参数设置获取对应证券代码、证券名称的数据。
        返回类型:pandas的DataFrame类型。
        :param code:A股股票代码,sh或sz.+6位数字代码,或者指数代码,如:sh.601398。sh:上海;sz:深圳。可以为空;
        :param code_name:股票名称,支持模糊查询,可以为空。
        """
        lg = bs.login()
        if lg.error_code != '0':
            logger.error('login respond  error_msg:' + lg.error_msg)

        rs = bs.query_stock_basic(code=code, code_name=code_name)
        if rs.error_code != '0':
            logger.error('query_stock_basic respond  error_msg:' +
                         rs.error_msg)

        data_list = []
        while (rs.error_code == '0') & rs.next():
            data_list.append(rs.get_row_data())
        result = pd.DataFrame(data_list, columns=rs.fields)

        bs.logout()
        return result
Beispiel #13
0
    def query_history_k_data_plus(symbol,
                                  timeframe,
                                  adj=None,
                                  start_date=None,
                                  end_date=None):
        """
        获取k线数据
        注意:
            股票停牌时,对于日线,开、高、低、收价都相同,且都为前一交易日的收盘价,成交量、成交额为0,换手率为空。
        :param symbol:股票代码,sh或sz+6位数字代码,或者指数代码,如:sh601398。sh:上海;sz:深圳。此参数不可为空;
        :param timeframe:k线周期,"5m"为5分钟,"15m"为15分钟,"30m"为30分钟,"1h"为1小时,"1d"为日,"1w"为一周,"1M"为一月。指数没有分钟线数据;周线每周最后一个交易日才可以获取,月线每月最后一个交易日才可以获取。
        :param adj:复权类型,默认是"3"不复权;前复权:"2";后复权:"1"。已支持分钟线、日线、周线、月线前后复权。 BaoStock提供的是涨跌幅复权算法复权因子,具体介绍见:复权因子简介或者BaoStock复权因子简介。
        :param start_date:开始日期(包含),格式“YYYY-MM-DD”,为空时取2015-01-01;
        :param end_date:结束日期(包含),格式“YYYY-MM-DD”,为空时取最近一个交易日;
        :return:返回一个列表
        """
        frequency = ''
        if timeframe == "5m":
            frequency = "5"
        elif timeframe == "15m":
            frequency = "15"
        elif timeframe == "30m":
            frequency = "30"
        elif timeframe == "1h":
            frequency = "60"
        elif timeframe == "1d":
            frequency = "d"
        elif timeframe == "1w":
            frequency = 'w'
        elif timeframe == "1M":
            frequency = "m"
        else:
            logger.error("timeframe error !")

        fields = ''
        if 'm' in timeframe or 'h' in timeframe:
            fields = "date,time,code,open,high,low,close,volume,amount,adjustflag"
        elif "d" in timeframe:
            fields = "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST"
        elif 'w' in timeframe or 'M' in timeframe:
            fields = "date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg"
        else:
            logger.error("timeframe error !")

        stock_name = 'sh.' + str(symbol).split('sh')[1] if str(
            symbol).startswith("sh") else 'sz.' + str(symbol).split('sz')[1]
        adjust_flag = "3" if not adj else adj

        lg = bs.login()
        if lg.error_code != "0":
            logger.error("error: {}".format(lg.error_msg))

        rs = bs.query_history_k_data_plus(code=stock_name,
                                          fields=fields,
                                          start_date=start_date,
                                          end_date=end_date,
                                          frequency=frequency,
                                          adjustflag=adjust_flag)
        if rs.error_code != "0":
            logger.error('query_history_k_data_plus respond error: {}'.format(
                rs.error_msg))

        data_list = []
        while (rs.error_code == '0') & rs.next():
            data_list.append(rs.get_row_data())
        result = pd.DataFrame(data_list, columns=rs.fields)

        bs.logout()

        if 'm' in timeframe or 'h' in timeframe:
            result = result.drop("date", axis=1)
        result = result.drop('code', axis=1)
        result = result.values.tolist()
        return result