Ejemplo n.º 1
0
def run():
    mongodb_fi = Utils.get_conn_fi()
    date_str = '20190608'
    file = data_path + '/stock_basic/all_stock_list_' + date_str + '.csv'
    count = 0
    with open(file, newline='', encoding='UTF-8') as cf:
        reader = csv.DictReader(cf)
        for row in reader:
            count += 1
            try:
                transfer_to_mongodb(row, mongodb_fi)
                print(str(count)+'\t', row['ts_code'], row['fullname'], '\t\t\t\t\t\t成功')
            except Exception as e:
                print(e)
                print(str(count)+'\t', row['ts_code'], '\t\t失败')
                with open(data_path + '/err_log/err_income_' + date_str + '.log', 'a') as f:
                    f.write(row['ts_code']+'\n')
def calculate(ts_code):
    fina_indicators = copy.deepcopy(fina_indicators_dict)
    mongodb_fi = Utils.get_conn_fi()
    stock_info = mongodb_fi.find_one({'_id': ts_code})
    financial_statements = stock_info['financial_statements']
    stock_basic = stock_info['stock_basic']
    for end_date, data in financial_statements.items():
        if not data['balance_sheet'] or not data['income'] or not data[
                'cash_flow'] or not data['fifi']:
            continue
        # 资产负债表
        # 资产负债比率(占总资产%)
        # 现金与约当现金比率
        cash_to_total_assets_rate = calculate_cash_to_total_assets_rate(
            data['balance_sheet'])
        fina_indicators['现金与约当现金比率'][end_date] = Utils.get_rate(
            cash_to_total_assets_rate)
        # 应收账款比率
        accounts_receivable_rate = calculate_accounts_receivable_rate(
            data['balance_sheet'])
        fina_indicators['应收账款比率'][end_date] = Utils.get_rate(
            accounts_receivable_rate)
        # 存货比率
        inventory_rate = calculate_inventory_rate(data['balance_sheet'])
        fina_indicators['存货比率'][end_date] = Utils.get_rate(inventory_rate)
        # 流动资产比率
        liquidity_rate = calculate_liquidity_rate(data['balance_sheet'])
        fina_indicators['流动资产比率'][end_date] = Utils.get_rate(liquidity_rate)
        # 应付账款比率
        total_accounts_payable_rate = calculate_accounts_payable_rate(
            data['balance_sheet'])
        fina_indicators['应付账款比率'][end_date] = Utils.get_rate(
            total_accounts_payable_rate)
        # 流动负债比率
        total_current_liability_rate = calculate_current_liability_rate(
            data['balance_sheet'])
        fina_indicators['流动负债比率'][end_date] = Utils.get_rate(
            total_current_liability_rate)
        # 长期负债比率
        total_long_term_debt_rate = calculate_long_term_debt_rate(
            data['balance_sheet'])
        fina_indicators['长期负债比率'][end_date] = Utils.get_rate(
            total_long_term_debt_rate)
        # 股东权益比率
        total_shareholder_equity_rate = calculate_shareholder_equity_rate(
            data['balance_sheet'])
        fina_indicators['股东权益比率'][end_date] = Utils.get_rate(
            total_shareholder_equity_rate)
        # 五大财务比率
        # 五大财务比率--财务结构
        # 负债占资产比率
        total_debt_to_asset_rate = calculate_debt_to_asset_rate(
            data['balance_sheet'])
        fina_indicators['负债占资产比率'][end_date] = Utils.get_rate(
            total_debt_to_asset_rate)
        # 长期资金占不动产/厂房及设备比率 = 长期资金占投资比率
        long_term_capital_to_invest_rate = calculate_long_term_capital_to_invest_rate(
            data['balance_sheet'])
        fina_indicators['长期资金占投资比率'][end_date] = Utils.get_rate(
            long_term_capital_to_invest_rate)
        # 五大财务比率--偿债能力
        # 流动比率
        liquidity_asset_to_liquidity_debt_rate = calculate_liquidity_asset_to_liquidity_debt_rate(
            data['balance_sheet'])
        fina_indicators['流动比率'][end_date] = Utils.get_rate(
            liquidity_asset_to_liquidity_debt_rate)
        # 速动比率
        quick_moving_rate = calculate_quick_moving_rate(data['balance_sheet'])
        fina_indicators['速动比率'][end_date] = Utils.get_rate(quick_moving_rate)
        # 五大财务比率--经营能力
        # 应收账款周转率(次)
        receivable_turnover_rate = calculate_receivable_turnover_rate(
            data['balance_sheet'], data['income'])
        fina_indicators['应收账款周转率(次)'][end_date] = Utils.get_rate(
            receivable_turnover_rate)
        # 平均收现日数
        ave_receive_days = calculate_ave_receivable_days(
            data['balance_sheet'], data['income'])
        fina_indicators['平均收现日数'][end_date] = Utils.get_rate(ave_receive_days)
        # 存货周转率(次)
        inventory_turnover = calculate_inventory_turnover(
            data['balance_sheet'], data['income'])
        fina_indicators['存货周转率(次)'][end_date] = Utils.get_rate(
            inventory_turnover)
        # 平均销货日数(平均在库天数)
        ave_sale_days = calculate_ave_sale_days(data['balance_sheet'],
                                                data['income'])
        fina_indicators['平均销货日数(平均在库天数)'][end_date] = Utils.get_rate(
            ave_sale_days)
        # 固定资产周转率
        fixed_invest_turnover_rate = calculate_fixed_invest_turnover_rate(
            data['fifi'])
        fina_indicators['固定资产周转率'][end_date] = Utils.get_round(
            fixed_invest_turnover_rate)
        # 总资产周转率(次)
        total_assert_turnover_rate = calculate_total_assert_turnover_rate(
            data['fifi'])
        fina_indicators['总资产周转率'][end_date] = Utils.get_round(
            total_assert_turnover_rate)
        # 五大财务比率--获利能力
        # 净资产收益率RoE
        roe = calculate_roe(data['fifi'])
        fina_indicators['净资产收益率RoE'][end_date] = Utils.get_round(roe)
        # 总资产报酬率RoA
        roa = calculate_roa(data['fifi'])
        fina_indicators['总资产报酬率RoA'][end_date] = Utils.get_round(roa)
        # 销售毛利率
        roe = calculate_operating_margin(data['fifi'])
        fina_indicators['销售毛利率'][end_date] = Utils.get_round(roe)
        # 销售净利率
        roa = calculate_business_interest_rate(data['fifi'])
        fina_indicators['销售净利率'][end_date] = Utils.get_round(roa)
        # 净利率=纯益率
        net_interest_rate = calculate_net_interest_rate(data['income'])
        fina_indicators['净利率'][end_date] = Utils.get_rate(net_interest_rate)
        # 基本每股收益=每股盈余(元)
        surplus_rese_ps = calculate_eps(data['fifi'])
        fina_indicators['基本每股收益'][end_date] = Utils.get_round(surplus_rese_ps)
        # 税后净利(百万元)
        n_income = calculate_n_income(data['income'])
        fina_indicators['税后净利(百万元)'][end_date] = Utils.get_round(n_income)
        # 五大财务比率--现金流量
        # 现金流量比率
        cash_flow_rate = calculate_cash_flow_rate(data['balance_sheet'],
                                                  data['cash_flow'])
        fina_indicators['现金流量比率'][end_date] = Utils.get_rate(cash_flow_rate)
        # 营业活动现金流量(百万元)
        cash_flow = calculate_cash_flow(data['cash_flow'])
        fina_indicators['营业活动现金流量(百万元)'][end_date] = Utils.get_round(cash_flow)
        # 投资活动现金流量(百万元)
        invest_cash_flow = calculate_invest_cash_flow(data['cash_flow'])
        fina_indicators['投资活动现金流量(百万元)'][end_date] = Utils.get_round(
            invest_cash_flow)
        # 筹资活动现金流量(百万元)
        finance_cash_flow = calculate_finance_cash_flow(data['cash_flow'])
        fina_indicators['筹资活动现金流量(百万元)'][end_date] = Utils.get_round(
            finance_cash_flow)
    return get_html_table_code(fina_indicators, stock_basic)