Ejemplo n.º 1
0
def fetch_dupont_data(stocklist, start_year=2007, current_year=2020, current_quarter=4):
    bs.login()
    db_conn = create_engine(common.db_path_sqlalchemy)
    for code in stocklist["code"]:
        dupont_list = []
        if code.startswith("sh.6") | code.startswith("sz.00") | code.startswith("sz.300"):
            for year in range(start_year, current_year + 1):
                start_quarter = 1
                if year < current_year:
                    end_quarter = 4
                else:
                    end_quarter = current_quarter - 1
                for quarter in range(start_quarter, end_quarter + 1):
                    # 查询季频估值指标盈利能力
                    print(code + ' dupont: ' + year.__str__() + 'Q' + quarter.__str__())
                    rs_dupont = bs.query_dupont_data(code=code, year=year, quarter=quarter)
                    while (rs_dupont.error_code == '0') & rs_dupont.next():
                        dupont_list.append([year, quarter] + rs_dupont.get_row_data())

            if len(dupont_list) > 0:
                db_conn.execute(r'''INSERT OR REPLACE INTO stock_dupont_data VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)''',
                                dupont_list)
            print(code + ' fetch dupont data finish and write database')

    bs.logout()
Ejemplo n.º 2
0
def get_dupont_data(stock_number,stock_name,year,quarter):

    print('==========================================================')
    print("开始进行: "+stock_name+"("+stock_number+")"+"的数据处理")
    print("尝试登陆baostock")
    #####login#####
    lg=bs.login(user_id="anonymous",password="******")
    if(lg.error_code == '0'):
          print("登陆成功")
    else:
          print("登录失败")


    #####get stock data#####
    rs=bs.query_dupont_data(code=stock_number,year=year,quarter=quarter)

    print('请求历史数据返回代码:'+rs.error_code)
    print('请求历史数据返回信息:'+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()
    print(stock_name+"("+stock_number+")"+"的数据处理完成")
    print('==========================================================')
    return result
Ejemplo n.º 3
0
def queryDubpontByCode(code,year,quater):
    dupont_list = []
    rs_dupont = bs.query_dupont_data(code=code, year=year, quarter=quater)
    while (rs_dupont.error_code == '0') & rs_dupont.next():
        dupont_list.append(rs_dupont.get_row_data())
    result_profit = pd.DataFrame(dupont_list, columns=rs_dupont.fields)
    return result_profit
Ejemplo n.º 4
0
def download(stockCode, yearList: list, fileName):
    #### 登陆系统 ####
    lg = bs.login()
    # 显示登陆返回信息
    print('login respond error_code:' + lg.error_code)
    print('login respond  error_msg:' + lg.error_msg)

    # 查询季频估值指标盈利能力
    operation_list = []

    for year in yearList:
        for quarter in [1, 2, 3, 4]:
            rs_dupont = bs.query_dupont_data(code=stockCode,
                                             year=year,
                                             quarter=quarter)
            # rs_dupont = bs.query_dupont_data(code="sh.600000", year=2017, quarter=2)

            # rs_growth = bs.query_growth_data(code="sh.600000", year=2017, quarter=2)
            while (rs_dupont.error_code == '0') & rs_dupont.next():
                operation_list.append(rs_dupont.get_row_data())

    saveToCsv(operation_list, fileName)

    #### 登出系统 ####
    bs.logout()
Ejemplo n.º 5
0
def getROEQuery(stock, year, quarter):
    dupont_list = []
    rs_dupont = bs.query_dupont_data(stock['code'], year, quarter)
    while (rs_dupont.error_code == '0') & rs_dupont.next():
        dupont_list.append(rs_dupont.get_row_data())
    result_profit = pd.DataFrame(dupont_list,
                                 columns=rs_dupont.fields)
    return result_profit
def getquarterdata(companycode, year, quarter):
    profit_list = []
    rs_profit = bs.query_profit_data(code=companycode,
                                     year=year,
                                     quarter=quarter)
    while (rs_profit.error_code == '0') & rs_profit.next():
        profit_list.append(rs_profit.get_row_data())
    if len(profit_list) == 0:
        return [], []
    # 营运能力
    operation_list = []
    rs_operation = bs.query_operation_data(code=companycode,
                                           year=year,
                                           quarter=quarter)
    while (rs_operation.error_code == '0') & rs_operation.next():
        operation_list.append(rs_operation.get_row_data())

    # 成长能力
    growth_list = []
    rs_growth = bs.query_growth_data(code=companycode,
                                     year=year,
                                     quarter=quarter)
    while (rs_growth.error_code == '0') & rs_growth.next():
        growth_list.append(rs_growth.get_row_data())

    # 偿债能力
    balance_list = []
    rs_balance = bs.query_balance_data(code=companycode,
                                       year=year,
                                       quarter=quarter)
    while (rs_balance.error_code == '0') & rs_balance.next():
        balance_list.append(rs_balance.get_row_data())

    # 季频现金流量
    cash_flow_list = []
    rs_cash_flow = bs.query_cash_flow_data(code=companycode,
                                           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())

    # 查询杜邦指数
    dupont_list = []
    rs_dupont = bs.query_dupont_data(code=companycode,
                                     year=year,
                                     quarter=quarter)
    while (rs_dupont.error_code == '0') & rs_dupont.next():
        dupont_list.append(rs_dupont.get_row_data())
    if len(profit_list) * len(operation_list) * len(growth_list) * len(
            balance_list) * len(cash_flow_list) * len(dupont_list) == 0:
        return [], []
    datalist = [companycode + "-" + year + "-" + quarter]
    datalist += profit_list[0] + operation_list[0] + growth_list[
        0] + balance_list[0] + cash_flow_list[0] + dupont_list[0]
    fieldslist = ["quaryContent"]
    fieldslist += rs_profit.fields + rs_operation.fields + rs_growth.fields + rs_balance.fields + rs_cash_flow.fields + rs_dupont.fields
    return datalist, fieldslist
def getROE(code="SH.600000", year=2015):
    rs_dupont = bs.query_dupont_data(code=code, year=year, quarter=4)
    re = 0
    try:
        re = rs_dupont.get_row_data()[3]
        re = round(float(re) * 100, 2)
    except:
        pass
    return re
Ejemplo n.º 8
0
def computeROE(code, year, quarter):
    # 查询杜邦指数
    dupont_list = []
    rs_dupont = bs.query_dupont_data(code, year, quarter)
    while (rs_dupont.error_code == '0') & rs_dupont.next():
        dupont_list.append(rs_dupont.get_row_data())
    result_profit = pd.DataFrame(dupont_list, columns=rs_dupont.fields)
    # 打印输出
    return result_profit
Ejemplo n.º 9
0
def dupont(code_n, year_n, quarter_n):
    dupont_list = []
    rs_dupont = bs.query_dupont_data(code=code_n,
                                     year=year_n,
                                     quarter=quarter_n)
    while (rs_dupont.error_code == '0') & rs_dupont.next():
        dupont_list.append(rs_dupont.get_row_data())
    result_profit = pd.DataFrame(dupont_list, columns=rs_dupont.fields)
    # 打印输出
    return result_profit
Ejemplo n.º 10
0
def get_dupont(code):
    dupont_list = []
    for year in range(2000, 2020):
        for quarter in [4]:
            rs_dupont = bs.query_dupont_data(code=code,
                                             year=year,
                                             quarter=quarter)
            while (rs_dupont.error_code == '0') & rs_dupont.next():
                dupont_list.append(rs_dupont.get_row_data())
    result_profit = pd.DataFrame(dupont_list, columns=rs_dupont.fields)
    return result_profit
Ejemplo n.º 11
0
 def query_dupont_data(self, code, year = None, quarter = None):
     '''
     code:股票代码,sh或sz.+6位数字代码,或者指数代码,如:sh.601398。sh:上海;sz:深圳。此参数不可为空;
     year:统计年份,为空时默认当前年;
     quarter:统计季度,为空时默认当前季度。不为空时只有4个取值:1,2,3,4。
     '''
     dupont_list = []
     rs_dupont = bs.query_dupont_data(code=code, year=year, quarter=quarter)
     self.log('query_dupont_data respond  error_msg:', rs_dupont)
     while (rs_dupont.error_code == '0') & rs_dupont.next():
         dupont_list.append(rs_dupont.get_row_data())
     result_profit = pd.DataFrame(dupont_list, columns=rs_dupont.fields)
     return result_profit
Ejemplo n.º 12
0
    def query_dupont_data(self):
        """
		季频杜邦指数:query_dupont_data()
		方法说明:查询季频杜邦指数信息,可以通过参数设置获取对应年份、季度数据,提供2007年至今数据。 
		返回类型:pandas的DataFrame类型。
		"""
        all_stock = pd.read_csv(self.path + "all_stock.csv")
        all_stock.drop_duplicates(subset=['code'], keep='first', inplace=True)
        end_year = int(self.end_date[0:4])
        quarter_list = [1, 2, 3, 4]

        # 登陆系统
        lg = bs.login()
        # 显示登陆返回信息
        #print('login respond error_code:'+lg.error_code)
        #print('login respond  error_msg:'+lg.error_msg)

        # 查询杜邦指数
        result_all = pd.DataFrame([])
        for code in all_stock.code:
            # 查询季频估值指标盈利能力
            year = int(self.start_date[0:4])
            while (year <= end_year):
                for quarter in quarter_list:
                    dupont_list = []
                    rs_dupont = bs.query_dupont_data(code=code,
                                                     year=year,
                                                     quarter=quarter)
                    while (rs_dupont.error_code == '0') & rs_dupont.next():
                        dupont_list.append(rs_dupont.get_row_data())
                    result_profit = pd.DataFrame(dupont_list,
                                                 columns=rs_dupont.fields)
                    result_all = result_all.append(result_profit)

                year = year + 1

        # 打印输出
        #print(result_profit)
        # 结果集输出到csv文件
        dupont_data = pd.read_csv(self.path + "dupont_data.csv")
        result_all = result_all.append(dupont_data)
        result_all.drop_duplicates(subset=['code', 'pubDate', 'statDate'],
                                   keep='first',
                                   inplace=True)
        result_all.to_csv(self.path + "dupont_data.csv",
                          encoding="gbk",
                          index=False)

        # 登出系统
        bs.logout()
        return
Ejemplo n.º 13
0
def dupont(code, year, quarter):
    filename = "data/dupont_{}_{}_{}.csv".format(code, year, quarter)

    if os.path.exists(filename):
        # get from local
        result_profile = pd.read_csv(filename)
    else:
        # get from remote
        dupont_list = []
        rs_dupont = bs.query_dupont_data(code=code, year=year, quarter=quarter)
        while (rs_dupont.error_code == '0') & rs_dupont.next():
            dupont_list.append(rs_dupont.get_row_data())
        result_profile = pd.DataFrame(dupont_list, columns=rs_dupont.fields)
        result_profile.to_csv(filename, encoding="utf-8", index=False)
    return result_profile
Ejemplo n.º 14
0
    def getFinDataFromBS(self, codes: list, year: int, quarter: int):

        #盈利能力
        bs.login()
        for code in codes:
            ay = code.split(".")
            exchg = ay[0]
            rawcode = ay[1]
            bscode = ''
            if exchg == 'SSE':
                bscode = 'sh.' + rawcode
            else:
                bscode = 'sz.' + rawcode

            fdata = dict()
            fdata['code'] = code
            rs = bs.query_profit_data(bscode, year, quarter)
            fdata = recordToDict(rs, fdata)

            rs = bs.query_operation_data(bscode, year, quarter)
            fdata = recordToDict(rs, fdata)

            rs = bs.query_growth_data(bscode, year, quarter)
            fdata = recordToDict(rs, fdata)

            rs = bs.query_balance_data(bscode, year, quarter)
            fdata = recordToDict(rs, fdata)

            rs = bs.query_cash_flow_data(bscode, year, quarter)
            fdata = recordToDict(rs, fdata)

            rs = bs.query_dupont_data(bscode, year, quarter)
            fdata = recordToDict(rs, fdata)

            # rs = bs.query_performance_express_report(bscode, year, quarter)
            # fdata = recordToDict(rs, fdata)

            # rs = bs.query_forcast_report(bscode, year, quarter)
            # fdata = recordToDict(rs, fdata)

        bs.logout()
        return fdata
Ejemplo n.º 15
0
def get_dupont_data_year(stock_number,stock_name,start_year,end_year):
    print('==========================================================')
    print("开始进行: "+stock_name+"("+stock_number+")"+"的数据处理")
    print("尝试登陆baostock")
    data_list=[]
    lg=bs.login(user_id="anonymous",password="******")
    if(lg.error_code == '0'):
        print("登陆成功")
    else:
        print("登录失败")
    for y in range(int(start_year),int(end_year)+1):
        for  q in range(1,5):
                #####get stock data#####
                rs=bs.query_dupont_data(code=stock_number,year=y,quarter=q)
                while(rs.error_code=='0')&rs.next():
                    data_list.append(rs.get_row_data())
    result=pd.DataFrame(data_list,columns=rs.fields)
    bs.logout()
    print(stock_name+"("+stock_number+")"+"的数据处理完成")
    print('==========================================================')
    return result
Ejemplo n.º 16
0
    def GetCurrentStockFundamentals(self, *args, **kwargs):
        post_data_code = CheckKeyOrAbort(kStockCodeKey, kwargs)

        profit_data_handler = bs.query_profit_data(post_data_code)
        profit_data = profit_data_handler.get_data()
        operation_data_handler = bs.query_operation_data(post_data_code)
        operation_data = operation_data_handler.get_data()
        growth_data_handler = bs.query_growth_data(post_data_code)
        growth_data = growth_data_handler.get_data()
        balance_data_handler = bs.query_balance_data(post_data_code)
        balance_data = balance_data_handler.get_data()
        cash_flow_data_handler = bs.query_balance_data(post_data_code)
        cash_flow_data = cash_flow_data_handler.get_data()
        dupont_data_handler = bs.query_dupont_data(post_data_code)
        dupont_data = dupont_data_handler.get_data()
        performance_data_handler = bs.query_performance_express_report(
            post_data_code)
        performance_data = performance_data_handler.get_data()
        forecast_data_handler = bs.query_forecast_report(post_data_code)
        forecast_data = forecast_data_handler.get_data()

        return profit_data, operation_data, growth_data, balance_data, cash_flow_data, dupont_data, performance_data, forecast_data
Ejemplo n.º 17
0
    def query_dupont_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)

        dupont_list = []
        rs_dupont = bs.query_dupont_data(code=code, year=year, quarter=quarter)
        while (rs_dupont.error_code == '0') & rs_dupont.next():
            dupont_list.append(rs_dupont.get_row_data())
        result_profit = pd.DataFrame(dupont_list, columns=rs_dupont.fields)

        bs.logout()
        return result_profit
Ejemplo n.º 18
0
import baostock as bs
import pandas as pd

# 登陆系统
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:' + lg.error_code)
print('login respond  error_msg:' + lg.error_msg)

# 查询杜邦指数
dupont_list = []
rs_dupont = bs.query_dupont_data(code="sz.000001", year=2019, quarter=2)
while (rs_dupont.error_code == '0') & rs_dupont.next():
    dupont_list.append(rs_dupont.get_row_data())
result_profit = pd.DataFrame(dupont_list, columns=rs_dupont.fields)
# 打印输出
print(result_profit)
# 结果集输出到csv文件
result_profit.to_csv("D:\\dupont_data.csv", encoding="gbk", index=False)

# 登出系统
bs.logout()
Ejemplo n.º 19
0
def getSeasonDataOneCode(i):
    import baostock as bs
    import pandas as pd

    # #### 登陆系统 ####
    # lg = bs.login()

    profit_list = []
    growth_list = []
    dupont_list = []
    code = codeFormat(i)
    for j in range(2015, 2023):
        for k in range(1, 5):
            # 读取季度盈利
            rs_profit = bs.query_profit_data(code=code, year=j, quarter=k)
            while (rs_profit.error_code == '0') & rs_profit.next():
                profit_list.append(rs_profit.get_row_data())

            # 读取季度成长
            rs_growth = bs.query_growth_data(code=code, year=j, quarter=k)
            while (rs_growth.error_code == '0') & rs_growth.next():
                growth_list.append(rs_growth.get_row_data())

            # 读取杜邦分析
            rs_dupont = bs.query_dupont_data(code=code, year=j, quarter=k)
            while (rs_dupont.error_code == '0') & rs_dupont.next():
                dupont_list.append(rs_dupont.get_row_data())

    # 处理盈利分析
    profit_list = profit_list[::-1]
    if profit_list != []:
        epsTTMArray = [i, "每股收益/epsTTM",
                       dateSeasonFormat(profit_list[0][2])]  # 每股收益
        # roeAvgArray = [i, "净资产收益率/roeAvg",profit_list[0][2]] #净资产收益率
        for x in profit_list:
            x[2] = dateSeasonFormat(x[2])
            if x[7] != '':
                epsTTMArray.append(round(float(x[7]), 2))
            else:
                epsTTMArray.append(0)
            # roeAvgArray.append(round(float(x[3]),2))

        # 处理成长
        growth_list = growth_list[::-1]
        yoyniArray = [
            i, "净利润同比增长率G/yoyni",
            dateSeasonFormat(growth_list[0][2])
        ]  # 净利润同比增长率
        for x in growth_list:
            x[2] = dateSeasonFormat(x[2])
            if x[5] == '':
                yoyniArray.append('')
            else:
                yoyniArray.append(round(float(x[5]), 2))

        # 处理杜邦分析
        dupont_list = dupont_list[::-1]
        dupontROEArray = [
            i, "净资产收益率/dupontROE",
            dateSeasonFormat(dupont_list[0][2])
        ]  # 杜邦表ROE,净资产收益率
        dupontNitogrArray = [
            i, "销售净利润率/dupontNitogr",
            dateSeasonFormat(dupont_list[0][2])
        ]  # 销售净利润率,净利润/营业总收入
        dupontAssetTurnArray = [
            i, "总资产周转率/dupontAssetTurn",
            dateSeasonFormat(dupont_list[0][2])
        ]  # 总资产周转率
        dupontAssetStoEquityArray = [
            i, "权益乘数/dupontAssetStoEquity",
            dateSeasonFormat(dupont_list[0][2])
        ]  # 权益乘数

        for x in dupont_list:
            x[2] = dateSeasonFormat(x[2])
            if x[3] == '':
                dupontROEArray.append('')
            else:
                dupontROEArray.append(round(float(x[3]), 3))
            if x[7] == '':
                dupontNitogrArray.append('')
            else:
                dupontNitogrArray.append(round(float(x[7]), 2))
            if x[5] == '':
                dupontAssetTurnArray.append('')
            else:
                dupontAssetTurnArray.append(round(float(x[5]), 2))
            if x[4] == '':
                dupontAssetStoEquityArray.append('')
            else:
                dupontAssetStoEquityArray.append(round(float(x[4]), 2))

        # 把数据聚合
        # array.append(epsTTMArray)
        # array.append(yoyniArray)
        # array.append(dupontROEArray)
        # array.append(dupontNitogrArray)
        # array.append(dupontAssetTurnArray)
        # array.append(dupontAssetStoEquityArray)
        # bs.logout()
        return [
            epsTTMArray, yoyniArray, dupontROEArray, dupontNitogrArray,
            dupontAssetTurnArray, dupontAssetStoEquityArray
        ]
    #### 登出系统 ####

    else:
        # bs.logout()
        return [[], [], [], [], [], []]
Ejemplo n.º 20
0
import baostock as bs
import pandas as pd

# 登陆系统
lg = bs.login(user_id="anonymous", password="******")
# 显示登陆返回信息
print('login respond error_code:' + lg.error_code)
print('login respond  error_msg:' + lg.error_msg)

# 查询杜邦指数
dupont_list = []
rs_dupont = bs.query_dupont_data(code="sh.600000", year=2017, quarter=2)
while (rs_dupont.error_code == '0') & rs_dupont.next():
    dupont_list.append(rs_dupont.get_row_data())
result_profit = pd.DataFrame(dupont_list, columns=rs_dupont.fields)
# 打印输出
print(result_profit)
# 结果集输出到csv文件
result_profit.to_csv("D:\\dupont_data.csv", encoding="gbk", index=False)

# 登出系统
bs.logout()
Ejemplo n.º 21
0
 def quarter_dupont_data(self, code, year, quarter):
     self.getStockInstance()
     rs = bs.query_dupont_data(code, year, quarter)
     self._test_rs(rs)
     return rs