コード例 #1
0
ファイル: getBaostockData.py プロジェクト: zazaji/finance
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
コード例 #2
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
コード例 #3
0
def fetch_cash_flow_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"]:
        cash_flow_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 + ' cash_flow: ' + year.__str__() + 'Q' + quarter.__str__())
                    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([year, quarter] + rs_cash_flow.get_row_data())

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

    bs.logout()
コード例 #4
0
def get_cash_flow_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_cash_flow_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
コード例 #5
0
ファイル: baseImport.py プロジェクト: tianzhuzhu/mystock
def queryCashFlowByCode(code,year,quater):
    list=[]
    data=query_cash_flow_data(code,year,quater)
    while (data.error_code == '0') & data.next():
        list.append(data.get_row_data())
    data = pd.DataFrame(list, columns=data.fields)
    return data
コード例 #6
0
def query_cashflow():
    # 接口提供的数据最早从2007年开始
    lg = bs.login()
    shobjs = AStocksHeader.objects.all()  #all()
    count = 0
    start = time()
    for obj in shobjs:
        cash_flow_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_cash_flow_data(code="sh.{}".format(
                        obj.stock_code),
                                                        year=year,
                                                        quarter=quarter)
                else:
                    rs_profit = bs.query_cash_flow_data(code="sz.{}".format(
                        obj.stock_code),
                                                        year=year,
                                                        quarter=quarter)
                while (rs_profit.error_code == '0') & rs_profit.next():
                    cash_flow_list.append(rs_profit.get_row_data())
        result_profit = pd.DataFrame(cash_flow_list,
                                     columns=rs_profit.fields).values
        for item in result_profit:
            print(item)
            if any([
                    item[3], item[4], item[5], item[6], item[7], item[8],
                    item[9]
            ]):
                ac = AStocksCashFlow()
                ac.stock = obj
                ac.pub_date = item[1]
                ac.stat_date = item[2]
                ac.cat_to_asset = float(item[3]) if item[3] else 0.0
                ac.nca_to_asset = float(item[4]) if item[4] else 0.0
                ac.tangible_asset_to_asset = float(item[5]) if item[5] else 0.0
                ac.ebit_to_interest = float(item[6]) if item[6] else 0.0
                ac.cfo_to_or = float(item[7]) if item[7] else 0.0
                ac.cfo_to_np = float(item[8]) if item[8] else 0.0
                ac.cfo_to_gr = float(item[9]) if item[9] else 0.0
                ac.save()
    print('import finish, need time: ', time() - start)
    bs.logout()
コード例 #7
0
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
コード例 #8
0
ファイル: baoStockApi.py プロジェクト: dxcv/quantest
    def query_cash_flow_data(self):
        """
		季频现金流量:query_cash_flow_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:
                    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)
                    result_all = result_all.append(result_cash_flow)

                year = year + 1

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

        # 登出系统
        bs.logout()
        return
コード例 #9
0
 def query_cash_flow_data(self, code, year = None, quarter = None):
     '''
     code:股票代码,sh或sz.+6位数字代码,或者指数代码,如:sh.601398。sh:上海;sz:深圳。此参数不可为空;
     year:统计年份,为空时默认当前年;
     quarter:统计季度,为空时默认当前季度。不为空时只有4个取值:1,2,3,4。
     '''
     cash_flow_list = []
     rs_cash_flow = bs.query_cash_flow_data(code=code, year=year, quarter=quarter)
     self.log('query_cash_flow_data respond  error_msg:', rs_cash_flow)
     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)
     return result_cash_flow
コード例 #10
0
def get_cash_flow_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_cash_flow_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
コード例 #11
0
ファイル: StockToolkit.py プロジェクト: zhuzhenping/wtpy
    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
コード例 #12
0
def get_cash_flow_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_cash_flow_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
コード例 #13
0
 def post(self, request):
     '''
         quarter: 为空--"",默认查当前季度
     '''
     if request.body:
         msg = json.loads(request.body)
         # 查询季频估值指标盈利能力
         profit_list = []
         rs_profit = baostock.query_cash_flow_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)
コード例 #14
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_cash_flow = bs.query_cash_flow_data(code=stockCode,
                                                   year=year,
                                                   quarter=quarter)

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

    saveToCsv(operation_list, fileName)

    #### 登出系统 ####
    bs.logout()
コード例 #15
0
ファイル: cash_flow.py プロジェクト: mmlhq/ibaostock
]

count = 0  # 親數據
for code_item in code_item_list:
    for year in range(2019, 2020):
        for quarter in range(1, 5):
            code = code_item[1] + "." + code_item[0]
            cur_growth_sql = "select code,year,quarter from tdx.cash_flow where code='%s' and year='%d' and quarter='%d';" % (
                code, year, quarter)
            # 查看数据库是否已有该数据
            cur_cash_flow.execute(cur_growth_sql)
            findinfo = cur_cash_flow.fetchone()

            if findinfo is None:  # 數據庫中還沒有該數據,寫入數據庫
                rs_cash_flow = bs.query_cash_flow_data(code=code_item[1] +
                                                       "." + code_item[0],
                                                       year=year,
                                                       quarter=quarter)
                while (rs_cash_flow.error_code == '0') & rs_cash_flow.next():
                    growth_list = rs_cash_flow.get_row_data()

                    insert_sql = "INSERT INTO cash_flow("
                    value_sql = "VALUES("
                    value_list = []

                    for index in range(len(growth_list)):
                        if growth_list[index] != '':
                            insert_sql += cash_flow_head[index] + ','
                            value_sql += "'%s',"
                            value_list.append(growth_list[index])

                    insert_sql += 'year,quarter) '
コード例 #16
0
def getCashFlow(id: str, yea: str = None, quarter: str = None):
    data = BaoStock.query_cash_flow_data(id, yea, quarter).get_data()
    return {getCashFlowMap[key][0]: getCashFlowMap[key][1](data.at[0, key]) for key in data.keys() if key in getCashFlowMap}
コード例 #17
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)

# 季频现金流量
cash_flow_list = []
rs_cash_flow = bs.query_cash_flow_data(code="sh.600000", year=2017, quarter=2)
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)
# 打印输出
print(result_cash_flow)
# 结果集输出到csv文件
result_cash_flow.to_csv("D:\\cash_flow_data.csv", encoding="gbk", index=False)

# 登出系统
bs.logout()
コード例 #18
0
        continue

    print(stock_code)

    profit_list_1 = []
    profit_list_2 = []
    profit_list_3 = []
    balance_list = []
    cash_flow_list = []
    operation_list = []

    rs_profit_1 = bs.query_profit_data(code=stock_code, year=last_year_1, quarter=4)
    rs_profit_2 = bs.query_profit_data(code=stock_code, year=last_year_2, quarter=4)
    rs_profit_3 = bs.query_profit_data(code=stock_code, year=last_year_3, quarter=4)
    rs_balance = bs.query_balance_data(code=stock_code, year=assign_year, quarter=assign_quarter)
    rs_cash_flow = bs.query_cash_flow_data(code=stock_code, year=assign_year, quarter=assign_quarter)
    rs_operation = bs.query_operation_data(code=stock_code, year=assign_year, quarter=assign_quarter)

    while (rs_profit_1.error_code == '0') & rs_profit_1.next():
        profit_list_1.append(rs_profit_1.get_row_data())
        if rs_profit_2.cur_row_num != 0:
            profit_list_2.append(rs_profit_2.get_row_data())
        if rs_profit_2.cur_row_num != 0:
            profit_list_3.append(rs_profit_3.get_row_data())
        balance_list.append(rs_balance.get_row_data())
        cash_flow_list.append(rs_cash_flow.get_row_data())
        operation_list.append(rs_operation.get_row_data())
    try:
        result_profit_1 = pd.DataFrame(profit_list_1, columns=rs_profit_1.fields)
        result_profit_2 = pd.DataFrame(profit_list_2, columns=rs_profit_2.fields)
        result_profit_3 = pd.DataFrame(profit_list_3, columns=rs_profit_3.fields)
コード例 #19
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)

# 季频现金流量
cash_flow_list = []
rs_cash_flow = bs.query_cash_flow_data(code="sz.000001", year=2019, quarter=2)
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)
# 打印输出
print(result_cash_flow)
# 结果集输出到csv文件
result_cash_flow.to_csv("D:\\cash_flow_data.csv", encoding="gbk", index=False)

# 登出系统
bs.logout()
コード例 #20
0
ファイル: stock.py プロジェクト: likehang/stock_analystic
 def quarter_cash_flow_data(self, code, year, quarter):
     self.getStockInstance()
     rs = bs.query_cash_flow_data(code, year, quarter)
     self._test_rs(rs)
     return rs