Exemple #1
0
 def get_profit_df(code: str, start_date: str, end_date: str) -> pd.DataFrame:
     column_mapping = {"pubDate": "date", "statDate": "period", "roeAvg": "value"}
     fields = bs.query_profit_data(code="sh.600519", year=2020, quarter=1).fields
     start_date = datetime.strptime(start_date, "%Y-%m-%d")
     end_date = datetime.strptime(end_date, "%Y-%m-%d")
     args = [(year, quarter) for quarter in range(1, 5) for year in range(start_date.year - 1, end_date.year + 1)]
     profit_list = []
     for year, quarter in args:
         resp = bs.query_profit_data(code=code, year=year, quarter=quarter)
         while (resp.error_code == "0") and resp.next():
             if "pubDate" not in resp.fields:
                 continue
             row_data = resp.get_row_data()
             pub_date = pd.Timestamp(row_data[resp.fields.index("pubDate")])
             if start_date <= pub_date <= end_date and row_data:
                 profit_list.append(row_data)
     profit_df = pd.DataFrame(profit_list, columns=fields)
     try:
         profit_df = profit_df[list(column_mapping.keys())]
     except KeyError:
         return pd.DataFrame()
     profit_df.rename(columns=column_mapping, inplace=True)
     profit_df["field"] = "roeWa"
     profit_df["value"] = pd.to_numeric(profit_df["value"], errors="ignore")
     return profit_df
Exemple #2
0
def get_profit_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_profit_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 + ")" + "的数据处理完成")
    return result
Exemple #3
0
def roeget(stackcode):
    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)
    # 查询季频估值指标盈利能力
    profit_list = []
    for y in range(2007, 2021):
        qu = 4
        if y == 2021:
            qu = 1
        for i in range(qu):
            rs_profit = bs.query_profit_data(code=stackcode,
                                             year=y,
                                             quarter=i + 1)
            while (rs_profit.error_code == '0') & rs_profit.next():
                profit_list.append(rs_profit.get_row_data())
    result_profit = pd.DataFrame(profit_list, columns=rs_profit.fields)
    # 结果集输出到csv文件
    result_profit.to_csv("profit_data.csv", encoding="utf8", index=False)
    # 登出系统
    bs.logout()
Exemple #4
0
def get_quarter_data(code,start='2019-01-01',end='2020-02-02'):
    start_year=start[:4]
    end_year=end[:4]
    cash_flow_list=[]
    profit_list = []
    balance_list =[]
    growth_list = []

    for year in range(int(start_year),int(end_year)):
        for quarter in range(1,5):
            if today[:4]>=str(year):
#                 print(code,start, end)
                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())
                rs_profit = bs.query_profit_data(code=code, year=year, quarter=quarter)##盈利
                while (rs_profit.error_code == '0') & rs_profit.next():
                    profit_list.append(rs_profit.get_row_data())
                rs_balance = bs.query_balance_data(code=code, year=year, quarter=quarter) ##资产负债
                while (rs_balance.error_code == '0') & rs_balance.next():
                    balance_list.append(rs_balance.get_row_data())
                rs_growth = bs.query_growth_data(code=code, year=year, quarter=quarter) ##成长
                while (rs_growth.error_code == '0') & rs_growth.next():
                    growth_list.append(rs_growth.get_row_data())
                    
    result_cash_flow = pd.DataFrame(cash_flow_list, columns=rs_cash_flow.fields)
    result_profit = pd.DataFrame(profit_list, columns=rs_profit.fields)
    result_balance = pd.DataFrame(balance_list, columns=rs_balance.fields)
    result_growth = pd.DataFrame(growth_list, columns=rs_growth.fields)

    return result_cash_flow,result_profit,result_balance,result_growth
Exemple #5
0
def fetch_profit_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"]:
        profit_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 + ' profit: ' + year.__str__() + 'Q' + quarter.__str__())
                    rs_profit = bs.query_profit_data(code=code, year=year, quarter=quarter)
                    while (rs_profit.error_code == '0') & rs_profit.next():
                        profit_list.append([year, quarter] + rs_profit.get_row_data())

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

    bs.logout()
Exemple #6
0
def jingzichshouyi(stock_code, myyear, myquarter):
    list1 = []
    rs1 = bs.query_profit_data(code=stock_code, year=myyear, quarter=myquarter)
    while (rs1.error_code == '0') & rs1.next():
        list1.append(rs1.get_row_data())
    result1 = pd.DataFrame(list1, columns=rs1.fields)
    return result1[['roeAvg']]
Exemple #7
0
 def query_profit_data(self, quarter):
     data_list = []
     rs = bs.query_profit_data(code=self.code, year=self.year, quarter=quarter)
     fields = ['code', 'pubDate', 'statDate', 'roeAvg', 'npMargin', 'gpMargin', 'netProfit', 'epsTTM', 'MBRevenue', 'totalShare', 'liqaShare']
     while (rs.error_code == '0') & rs.next():
         data_list.append(rs.get_row_data())
     data = jsonWrapper(data_list, fields)
     return rs.error_code, rs.error_msg, list(map(lambda x: { attr: x.get(attr, '') for attr in self.attr_fields }, data)) if self.attr_fields else data
Exemple #8
0
def queryProfitByCode(code,year,season):
    # 查询季频估值指标盈利能力
    profit_list = []
    rs_profit = bs.query_profit_data(code=code, year=year, quarter=season)
    while (rs_profit.error_code == '0') & rs_profit.next():
        profit_list.append(rs_profit.get_row_data())
    result_profit = pd.DataFrame(profit_list, columns=rs_profit.fields)
    return result_profit
Exemple #9
0
    def queryInfo(self, stock_code):
        profit_list = []
        rs_profit = bs.query_profit_data(stock_code, year=2020, quarter=2)
        while (rs_profit.error_code == '0') & rs_profit.next():
            profit_list.append(rs_profit.get_row_data())

        result_profit = pd.DataFrame(profit_list, columns=rs_profit.fields)
        liqaShare = result_profit['liqaShare']
        return float(liqaShare)
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
Exemple #11
0
def get_profit_data(id, year, quar):
    profit_list = []
    rs_profit = bs.query_profit_data(code=id, year=year, quarter=quar)
    while (rs_profit.error_code == '0') & rs_profit.next():
        profit_list.append(rs_profit.get_row_data())
    result_profit = pd.DataFrame(profit_list, columns=rs_profit.fields)
    result_profit["liqaShare"] = [
        1 if x == "" else float(x) for x in result_profit["liqaShare"]
    ]
    return (result_profit)
Exemple #12
0
def get_profit_data():
    """
    获取季频盈利能力数据
    """
    # 登陆系统
    lg = bs.login()
    # 显示登陆返回信息
    print('login respond error_code:' + lg.error_code)
    print('login respond  error_msg:' + lg.error_msg)

    with concurrent.futures.ThreadPoolExecutor() as executor:
        with session_scope() as sm:
            rp = sm.query(TaskTable).filter(
                TaskTable.task == TaskEnum.季频盈利能力.value,
                TaskTable.finished == False)

            for task in rp:
                if task.finished:
                    continue

                start_year = task.begin_date.year
                end_year = task.end_date.year

                dflist = []
                for y in range(start_year, end_year):
                    for q in range(1, 5):

                        max_try = 8  # 失败重连的最大次数
                        for i in range(max_try):
                            rs_profit = bs.query_profit_data(code=task.ts_code,
                                                             year=y,
                                                             quarter=q)
                            if rs_profit.error_code == '0':
                                profit_list = []
                                while (rs_profit.error_code
                                       == '0') & rs_profit.next():
                                    profit_list.append(
                                        rs_profit.get_row_data())
                                result_df = pd.DataFrame(
                                    profit_list, columns=rs_profit.fields)
                                dflist.append(result_df)

                                break
                            elif i < (max_try - 1):
                                time.sleep(2)
                                _logger.error('{}:{}-{} 获取数据失败,重连……'.format(
                                    task.ts_code, y, q))
                                continue

                task.finished = True
                executor.submit(_save_date, dflist, task.ts_code)
        sm.commit()

    # 登出系统
    bs.logout()
def query_profit():
    # 接口提供的数据最早从2007年开始
    lg = bs.login()
    shobjs = AStocksHeader.objects.all()
    count = 0
    start = time()
    for obj in shobjs:
        profit_list = []
        count += 1
        print(count)
        for year in range(2007, 2020):
            for quarter in range(1, 5):
                if obj.stock_code.startswith('6'):
                    rs_profit = bs.query_profit_data(code="sh.{}".format(
                        obj.stock_code),
                                                     year=year,
                                                     quarter=quarter)
                else:
                    rs_profit = bs.query_profit_data(code="sz.{}".format(
                        obj.stock_code),
                                                     year=year,
                                                     quarter=quarter)
                while (rs_profit.error_code == '0') & rs_profit.next():
                    profit_list.append(rs_profit.get_row_data())
        result_profit = pd.DataFrame(profit_list,
                                     columns=rs_profit.fields).values
        for item in result_profit:
            ap = AStocksProfit()
            ap.stock = obj
            ap.pub_date = item[1]
            ap.stat_date = item[2]
            ap.roe_avg = float(item[3]) if item[3] else 0.0
            ap.np_margin = float(item[4]) if item[4] else 0.0
            ap.gp_margin = float(item[5]) if item[5] else 0.0
            ap.net_profit = float(item[6]) if item[6] else 0.0
            ap.epsttm = float(item[7]) if item[7] else 0.0
            ap.mb_revenue = float(item[8]) if item[8] else 0.0
            ap.total_share = float(item[9]) if item[9] else 0.0
            ap.liqa_share = float(item[10]) if item[10] else 0.0
            ap.save()
    print('import finish, need time: ', time() - start)
    bs.logout()
def query_one_stock_profit_data(stock_code, year, quarter):
    '''
    查询季频估值指标盈利能力
    '''
    profit_list = []
    rs_profit = bs.query_profit_data(code=stock_code,
                                     year=year,
                                     quarter=quarter)
    print(rs_profit.fields)
    while (rs_profit.error_code == '0') & rs_profit.next():
        profit_list.append(rs_profit.get_row_data())
    return profit_list
Exemple #15
0
 def query_profit_data(self, code, year = None, quarter = None):
     '''
     code:股票代码,sh或sz.+6位数字代码,或者指数代码,如:sh.601398。sh:上海;sz:深圳。此参数不可为空;
     year:统计年份,为空时默认当前年;
     quarter:统计季度,可为空,默认当前季度。不为空时只有4个取值:1,2,3,4。
     '''
     profit_list = []
     rs = bs.query_profit_data(code=code, year=year, quarter=quarter)
     self.log('query_profit_data respond  error_msg:', rs)
     while (rs.error_code == '0') & rs.next():
         profit_list.append(rs.get_row_data())
     result = pd.DataFrame(profit_list, columns=rs.fields)
     return result
Exemple #16
0
def profit(code, year, quarter):
    filename = "data/profile_{}_{}_{}.csv".format(code, year, quarter)

    if os.path.exists(filename):
        result_profit = pd.read_csv(filename)
    else:
        rs_profit = bs.query_profit_data(code, year=year, quarter=quarter)
        data_list = []
        while (rs_profit.error_code == '0') & rs_profit.next():
            data_list.append(rs_profit.get_row_data())
        result_profit = pd.DataFrame(data_list, columns=rs_profit.fields)
        result_profit.to_csv(filename, encoding="utf-8", index=False)
    return result_profit
Exemple #17
0
def get_closeprice(code):
    rs_open = bs.query_profit_data(code, year=2015, quarter=3)
    data_list = []
    while(rs_open.error_code == '0') & rs_open.next():
        data_list.append(rs_open.get_row_data())
    result_open = pd.DataFrame(data_list, columns=rs_open.fields, index=[code])

    rs_close = bs.query_profit_data(code, year=2020, quarter=3)
    data_list = []
    while(rs_close.error_code == '0') & rs_close.next():
        data_list.append(rs_close.get_row_data())
    result_close = pd.DataFrame(data_list, columns=rs_close.fields, index=[code])

    result = pd.merge(result_open, result_close, on="code")
    result = result[["code","netProfit_x","netProfit_y","roeAvg_y","npMargin_y","gpMargin_y"]]

    evalue_list = []
    evalue = bs.query_history_k_data_plus(code, "peTTM", start_date="2021-03-08", frequency="d", adjustflag="3")
    while(evalue.error_code == '0') & evalue.next():
        evalue_list.append(evalue.get_row_data())
    result["pe"] = evalue_list[len(evalue_list) - 1][0]

    return result
Exemple #18
0
    def query_profit_data(self):
        """
		季频盈利能力:query_profit_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:
                    profit_list = []
                    rs_profit = bs.query_profit_data(code=code,
                                                     year=year,
                                                     quarter=quarter)
                    while (rs_profit.error_code == '0') & rs_profit.next():
                        profit_list.append(rs_profit.get_row_data())
                    result_profit = pd.DataFrame(profit_list,
                                                 columns=rs_profit.fields)
                    result_all = result_all.append(result_profit)

                year = year + 1

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

        # 登出系统
        bs.logout()
        return
Exemple #19
0
def find_data(code, year_list, quarter_list):
    # 查询季频估值指标盈利能力
    profit_list = []

    for year in year_list:
        for quarter in quarter_list:
            rs_profit = bs.query_profit_data(code=code,
                                             year=year,
                                             quarter=quarter)
            while (rs_profit.error_code == '0') & rs_profit.next():
                profit_list.append(rs_profit.get_row_data())

    result_profit = pd.DataFrame(profit_list, columns=rs_profit.fields)

    # print(result_profit)
    return result_profit
Exemple #20
0
def download_foundamental(start, end, gpb):
    lg = bs.login()
    logger.info("login error code: {}, logging error messge: {}".format(
        lg.error_code, lg.error_msg))

    df_stock = pd.read_excel(r'Tickers_download.xlsx')
    new_stock_list = []
    for i in df_stock.index:
        new_stock_list.append(df_stock['Ticker'][i])
        downloads = os.listdir('downloads_{}/'.format(gpb))
    had = set()
    for f in downloads:
        parts = f.split("_")
        had.add(int(parts[0]))

    t = start
    total = end - start
    count = 0
    for i in new_stock_list[start:end]:
        count += 1
        result_list = []
        for k in range(2015, 2020):
            for j in range(1, 5):
                if (t in had):
                    logger.info("====omit {}====".format(t))
                    t += 1
                    continue
                else:
                    logger.info("====process {}_{}, {} out of {}====".format(
                        i, t, count, total))
                if gpb == "gro":
                    rs = bs.query_growth_data(code=i, year=k, quarter=j)
                elif gpb == "pro":
                    rs = bs.query_profit_data(code=i, year=k, quarter=j)
                elif gpb == "bal":
                    rs = bs.query_balance_data(code=i, year=k, quarter=j)
                logger.info("error code: {}, error message: {}".format(
                    rs.error_code, rs.error_msg))

                while (rs.error_code == '0') & rs.next():
                    result_list.append(rs.get_row_data())
                # print(result_list)
        result = pd.DataFrame(result_list, columns=rs.fields)
        output = "downloads_{}/{}_{}.csv".format(gpb, t, i)
        t += 1
        result.to_csv(output, encoding="gbk", index=False)
def generate_stock_details(stock_price_df, quarter_date_list, saved=False):
    code_list = stock_price_df['code'].unique()
    result = pd.DataFrame()
    lg = bs.login()

    for i in range(len(quarter_date_list) - 1):
        print(quarter_date_list[i], end=',')
        left_date = datetime.datetime.strptime(
            quarter_date_list[i], "%Y-%m-%d") - datetime.timedelta(1)
        left_date_str = datetime.datetime(left_date.year, left_date.month,
                                          left_date.day, 0,
                                          0).strftime("%Y-%m-%d")
        right_date_str = quarter_date_list[i + 1]

        profit_list = []
        for code in code_list:
            rs_profit = bs.query_profit_data(code=code,
                                             year=left_date.year,
                                             quarter=left_date.month // 4 + 1)
            while (rs_profit.error_code == '0') & rs_profit.next():
                temp = rs_profit.get_row_data()
                profit_list.append(temp)

        profit_df = pd.DataFrame(profit_list, columns=rs_profit.fields)
        result = pd.concat([
            result,
            pd.merge(
                stock_price_df[(stock_price_df['date'] > left_date_str)
                               & (stock_price_df['date'] < right_date_str)],
                profit_df[['code', 'totalShare']],
                on='code')
        ])

    result[['totalShare']] = result[['totalShare']].astype('float')
    result['marketCapitalization'] = result['totalShare'] * result['ave_close']
    bs.logout()
    if saved is True:
        result.to_csv("TMT_stock_details.csv",
                      index=False,
                      encoding='utf_8_sig')
    else:
        result.reset_index(drop=True)
        return result
Exemple #22
0
def get_profit_from_start_year(code, start_year: int):
    """
    获取指定年度到现在的1,2,3,4季度
    """
    data_list = []
    for y in range(start_year, datetime.datetime.now().year + 1):
        for i in range(1, 5):
            rs = bs.query_profit_data(get_type(code) + code, year=y, quarter=i)
            while (rs.error_code == '0') & rs.next():
                d = {}
                r = rs.get_row_data()
                for k_i in range(len(r)):
                    d[rs.fields[k_i]] = r[k_i]
                d['statDate'] = datetime.datetime.strptime(d['statDate'], '%Y-%m-%d')
                for k in d.keys():
                    if k not in ['code', 'pubDate', 'statDate']:
                        d[k] = str_to_dec(d[k])
                data_list.insert(0, d)
    return data_list
Exemple #23
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
Exemple #24
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)

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

    for year in yearList:
        for quarter in [1, 2, 3, 4]:
            rs_profit = bs.query_profit_data(code=stockCode, year=year, quarter=quarter)
            while (rs_profit.error_code == '0') & rs_profit.next():
                profit_list.append(rs_profit.get_row_data())

    saveToCsv(profit_list, fileName)

    #### 登出系统 ####
    bs.logout()
Exemple #25
0
def get_profit_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_profit_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
Exemple #26
0
 def post(self, request):
     '''
         quarter: 为空--"",默认查当前季度
     '''
     if request.body:
         msg = json.loads(request.body)
         # 查询季频估值指标盈利能力
         profit_list = []
         rs_profit = baostock.query_profit_data(code=msg["code"],
                                                year=msg["year"],
                                                quarter=msg["quarter"])
         while (rs_profit.error_code == '0') & rs_profit.next():
             profit_list.append(rs_profit.get_row_data())
         result_profit = pandas.DataFrame(profit_list,
                                          columns=rs_profit.fields)
         response = result_profit.to_json(orient="records")
         print(response)
         return HttpResponse(json.dumps(response))
     else:
         result = {"code": -1, "msg": "fail"}
         return HttpResponse(result)
Exemple #27
0
    def query_profit_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)

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

        bs.logout()
        return result_profit
Exemple #28
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
Exemple #29
0
def getProfit(code, year, quarter):

    if DEBUG_PROFIT_CACHE:

        fileName = "%s_%s_profit_data.csv" % (year, quarter)

        filePath = DEBUG_CACHE_DIR + fileName

        print("read cache profit: ", filePath)

        result_profit = csv2DateFrame(filePath)

        try:
            result_profit.index = result_profit['code']
            result_profit = result_profit.loc[code]
        except:
            result_profit = None

    else:

        lg = bs.login()

        if lg.error_code == '0':
            # 查询季频估值指标盈利能力
            profit_list = []

            rs_profit = bs.query_profit_data(code=code,
                                             year=year,
                                             quarter=quarter)

            while (rs_profit.error_code == '0') & rs_profit.next():
                profit_list.append(rs_profit.get_row_data())

            result_profit = pd.DataFrame(profit_list,
                                         columns=rs_profit.fields).loc[0]

        bs.logout()

    return result_profit
Exemple #30
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 [[], [], [], [], [], []]