def setup_net_profit_per_share_last_year(self, financial_data_tuple_list):
        if self.total_share == 0:
            return

        if Utility.is_empty(financial_data_tuple_list):
            return

        if len(financial_data_tuple_list
               ) < 2 * Constants.SEASONS_IN_A_YEAR + 1:
            return

        self.net_profit_per_share_last_year = 0

        for i in range(Constants.SEASONS_IN_A_YEAR,
                       2 * Constants.SEASONS_IN_A_YEAR):
            financial_data = FinancialData(financial_data_tuple_list[i])
            prev = FinancialData(financial_data_tuple_list[i + 1])

            if financial_data is None or prev is None:
                break

            if "03-31" in financial_data.date:
                net_profit_per_share = financial_data.net_profit / self.total_share
            else:
                net_profit_per_share = (financial_data.net_profit -
                                        prev.net_profit) / self.total_share

            self.net_profit_per_share_last_year += net_profit_per_share
Exemple #2
0
def analyze_financial_data(stock, financial_data_tuple_list):
    if stock is None:
        return stock

    if Utility.is_empty(financial_data_tuple_list):
        return stock

    if len(financial_data_tuple_list) < 2 * Constants.SEASONS_IN_A_YEAR + 1:
        return stock

    financial_data = FinancialData(financial_data_tuple_list[0])
    if financial_data is None:
        return stock

    stock.set_total_assets(financial_data.total_assets)
    stock.set_total_long_term_liabilities(
        financial_data.total_long_term_liabilities)
    stock.set_book_value_per_share(financial_data.book_value_per_share)
    stock.set_cash_flow_per_share(financial_data.cash_flow_per_share)
    stock.set_net_profit(financial_data.net_profit)

    stock.setup_net_profit_per_share()
    stock.setup_net_profit_per_share_in_year(financial_data_tuple_list)
    stock.setup_net_profit_per_share_last_year(financial_data_tuple_list)
    stock.setup_rate()
    stock.setup_debt_to_net_assets_ratio()
    stock.setup_roe(financial_data_tuple_list)
    stock.setup_pe()
    stock.setup_pb()
    stock.setup_roi()
    stock.setup_market_value()

    return stock
Exemple #3
0
def setup_roe(financial_data_tuple_list):
    if Utility.is_empty(financial_data_tuple_list):
        return

    if len(financial_data_tuple_list) < Constants.SEASONS_IN_A_YEAR + 1:
        return

    for i in range(
            len(financial_data_tuple_list) - Constants.SEASONS_IN_A_YEAR):
        financial_data = FinancialData(financial_data_tuple_list[i])
        prev = FinancialData(
            financial_data_tuple_list[i + Constants.SEASONS_IN_A_YEAR])

        if prev is None or prev.get_book_value_per_share() == 0:
            continue

        roe = round(
            100.0 * financial_data.get_net_profit_per_share_in_year() /
            prev.get_book_value_per_share(), Constants.DOUBLE_FIXED_DECIMAL)
        financial_data.set_roe(roe)
        financial_data_tuple_list[i] = financial_data.to_tuple(include_id=True)
Exemple #4
0
def setup_net_profit_per_share(financial_data_tuple_list):
    if Utility.is_empty(financial_data_tuple_list):
        return

    for i in range(len(financial_data_tuple_list)):
        financial_data_tuple = financial_data_tuple_list[i]
        financial_data = FinancialData(financial_data_tuple)
        financial_data.setup_net_profit_per_share()
        financial_data.setup_debt_to_net_assets_ratio()
        financial_data_tuple_list[i] = financial_data.to_tuple(include_id=True)
    def setup_roe(self, financial_data_tuple_list):
        if Utility.is_empty(financial_data_tuple_list):
            return

        if len(financial_data_tuple_list) < Constants.SEASONS_IN_A_YEAR + 1:
            return

        financial_data = FinancialData(
            financial_data_tuple_list[Constants.SEASONS_IN_A_YEAR])
        if financial_data is None:
            return

        book_value_per_share = financial_data.book_value_per_share
        if book_value_per_share == 0:
            return

        self.roe = round(
            100.0 * self.net_profit_per_share_in_year / book_value_per_share,
            Constants.DOUBLE_FIXED_DECIMAL)
Exemple #6
0
def write_financial_data_to_file(stock, financial_data_tuple_list):
    if stock is None:
        return

    if Utility.is_empty(financial_data_tuple_list):
        return

    file_name = get_financial_data_file_name(stock)

    field_name_tuple = tuple(
        ("date", "book_value_per_share", "cash_flow_per_share",
         "total_current_assets", "total_assets", "total_long_term_liabilities",
         "main_business_income", "financial_expenses", "net_profit",
         "net_profit_per_share", "roe"))

    with open(file_name, 'w', newline='') as csv_file:
        writer = csv.DictWriter(csv_file, fieldnames=field_name_tuple)
        writer.writeheader()

        for financial_data_tuple in financial_data_tuple_list:
            financial_data = FinancialData(financial_data_tuple)
            if financial_data is None:
                continue

            financial_data_dict = {
                "date": financial_data.date,
                "book_value_per_share": financial_data.book_value_per_share,
                "cash_flow_per_share": financial_data.cash_flow_per_share,
                "total_current_assets": financial_data.total_current_assets,
                "total_assets": financial_data.total_assets,
                "total_long_term_liabilities":
                financial_data.total_long_term_liabilities,
                "main_business_income": financial_data.main_business_income,
                "financial_expenses": financial_data.financial_expenses,
                "net_profit": financial_data.net_profit,
                "net_profit_per_share": financial_data.net_profit_per_share,
                "roe": financial_data.roe,
            }
            writer.writerow(financial_data_dict)
Exemple #7
0
def setup_roi(stock_data_tuple_list, financial_data_tuple_list):
    if Utility.is_empty(stock_data_tuple_list):
        return

    if Utility.is_empty(financial_data_tuple_list):
        return

    j = 0
    for i in range(len(stock_data_tuple_list)):
        stock_data = StockData(stock_data_tuple_list[i])
        price = stock_data.get_close()
        if price == 0:
            continue

        while j < len(financial_data_tuple_list):
            financial_data = FinancialData(financial_data_tuple_list[j])
            if datetime.strptime(stock_data.get_date(),
                                 Constants.DATE_FORMAT) >= datetime.strptime(
                                     financial_data.get_date(),
                                     Constants.DATE_FORMAT):
                pe = round(
                    100.0 * financial_data.get_net_profit_per_share_in_year() /
                    price, Constants.DOUBLE_FIXED_DECIMAL)
                pb = 0
                if financial_data.get_book_value_per_share() != 0:
                    pb = round(
                        price / financial_data.get_book_value_per_share(),
                        Constants.DOUBLE_FIXED_DECIMAL)
                # roi = round(financial_data.rate * financial_data.roe * pe * Constants.ROI_COEFFICIENT,
                #             Constants.DOUBLE_FIXED_DECIMAL)
                roi = round(
                    financial_data.roe * pe * Constants.ROI_COEFFICIENT,
                    Constants.DOUBLE_FIXED_DECIMAL)
                if roi < 0:
                    roi = 0

                stock_data.set_pe(pe)
                stock_data.set_pb(pb)
                stock_data.set_roi(roi)
                stock_data_tuple_list[i] = stock_data.to_tuple(include_id=True)
                break
            else:
                j += 1
Exemple #8
0
def setup_total_share(financial_data_tuple_list, total_share_tuple_list):
    if Utility.is_empty(financial_data_tuple_list):
        return

    if Utility.is_empty(total_share_tuple_list):
        return

    j = 0
    for i in range(len(financial_data_tuple_list)):
        financial_data_tuple = financial_data_tuple_list[i]
        financial_data = FinancialData(financial_data_tuple)

        while j < len(total_share_tuple_list):
            total_share = TotalShare(total_share_tuple_list[j])
            if datetime.strptime(financial_data.get_date(),
                                 Constants.DATE_FORMAT) >= datetime.strptime(
                                     total_share.get_date(),
                                     Constants.DATE_FORMAT):
                financial_data.set_total_share(total_share.get_total_share())
                financial_data_tuple_list[i] = financial_data.to_tuple(
                    include_id=True)
                break
            else:
                j += 1
Exemple #9
0
def setup_net_profit_per_share_in_year(financial_data_tuple_list):
    if Utility.is_empty(financial_data_tuple_list):
        return

    if len(financial_data_tuple_list) < Constants.SEASONS_IN_A_YEAR + 1:
        return

    for i in range(
            len(financial_data_tuple_list) - Constants.SEASONS_IN_A_YEAR):
        net_profit_per_share_in_year = 0
        for j in range(Constants.SEASONS_IN_A_YEAR):
            current = FinancialData(financial_data_tuple_list[i + j])
            prev = FinancialData(financial_data_tuple_list[i + j + 1])

            if current is None or prev is None:
                continue

            if current.get_total_share() == 0:
                continue

            if "03-31" in current.date:
                net_profit_per_share = current.get_net_profit(
                ) / current.get_total_share()
            else:
                net_profit_per_share = (
                    current.get_net_profit() -
                    prev.get_net_profit()) / current.get_total_share()

            net_profit_per_share_in_year += net_profit_per_share

        financial_data_tuple = financial_data_tuple_list[i]
        financial_data = FinancialData(financial_data_tuple)
        financial_data.set_net_profit_per_share_in_year(
            net_profit_per_share_in_year)
        financial_data_tuple_list[i] = financial_data.to_tuple(include_id=True)
Exemple #10
0
def write_financial_data_to_database(stock_code, financial_data_list):
    connect = None
    record_list = []

    delete_sql = FinancialData.get_delete_sql()
    insert_sql = FinancialData.get_insert_sql()

    if Utility.is_empty(financial_data_list):
        print("financial_data_list is empty, return")
        return

    try:
        connect = sqlite3.connect(Constants.DATA_DATABASE_ORION_DB)
        cursor = connect.cursor()

        cursor.execute(delete_sql, (stock_code, ))

        for financial_data in financial_data_list:
            now = datetime.now().strftime(Constants.DATE_TIME_FORMAT)

            if isinstance(financial_data, dict):
                financial_data_obj = FinancialData()
                financial_data_obj.set_stock_code(stock_code)
                financial_data_obj.set_date(financial_data['date'])
                financial_data_obj.set_book_value_per_share(
                    financial_data['book_value_per_share'])
                financial_data_obj.set_cash_flow_per_share(
                    financial_data['cash_flow_per_share'])
                financial_data_obj.set_total_current_assets(
                    financial_data['total_current_assets'])
                financial_data_obj.set_total_assets(
                    financial_data['total_assets'])
                financial_data_obj.set_total_long_term_liabilities(
                    financial_data['total_long_term_liabilities'])
                financial_data_obj.set_main_business_income(
                    financial_data['main_business_income'])
                financial_data_obj.set_financial_expenses(
                    financial_data['financial_expenses'])
                financial_data_obj.set_net_profit(financial_data['net_profit'])
                financial_data_obj.set_net_profit_per_share(
                    financial_data['net_profit_per_share'])
                financial_data_obj.set_created(now)
                financial_data_obj.set_modified(now)
            elif isinstance(financial_data, tuple):
                financial_data_obj = FinancialData(financial_data)
                financial_data_obj.set_modified(now)

            record = financial_data_obj.to_tuple(include_id=False)
            record_list.append(record)

        cursor.executemany(insert_sql, record_list)
        connect.commit()
    except sqlite3.Error as e:
        print('e:', e)
    finally:
        if connect is not None:
            connect.close()