コード例 #1
0
class DividendPolicyFeedBuilder:
    def __init__(self):
        self.date_utils = DateUtils()

    def build(self, dao):
        tuple_feed = self.__build_tuple(dao)
        return DividendPolicyFeed(tuple_feed)

    def __build_tuple(self, dao):
        feed = []
        stock_symbol = dao.get_stock_symbol()
        release_date = self.date_utils.now_date()
        for row in dao.get_row_list():
            stmt_date = row[0]
            cash_dividend = row[1]  # 現金股利
            stock_dividend_from_retained_earnings = row[2]  # 盈餘配股
            stock_dividend_from_capital_reserve = row[3]  # 公積配股
            employee_stock_bonuses_ratio = row[6]  # 員工配股率%
            entry = {
                "release_date": release_date,
                "stock_symbol": stock_symbol,
                "stmt_date": stmt_date,
                "account": u"現金股利",
                "account_order": 1,
                "value": cash_dividend,
            }
            feed.append(entry)
            entry = {
                "release_date": release_date,
                "stock_symbol": stock_symbol,
                "stmt_date": stmt_date,
                "account": u"盈餘配股",
                "account_order": 2,
                "value": stock_dividend_from_retained_earnings,
            }
            feed.append(entry)
            entry = {
                "release_date": release_date,
                "stock_symbol": stock_symbol,
                "stmt_date": stmt_date,
                "account": u"公積配股",
                "account_order": 3,
                "value": stock_dividend_from_capital_reserve,
            }
            feed.append(entry)
            entry = {
                "release_date": release_date,
                "stock_symbol": stock_symbol,
                "stmt_date": stmt_date,
                "account": u"員工配股率",
                "account_order": 4,
                "value": employee_stock_bonuses_ratio,
            }
            feed.append(entry)
        return tuple(feed)
コード例 #2
0
class CapitalIncreaseHistoryFeedBuilder():
    def __init__(self):
        self.date_utils = DateUtils()

    def build(self, dao):
        tuple_feed = self.__build_tuple(dao)
        return CapitalIncreaseHistoryFeed(tuple_feed)

    def __build_tuple(self, dao):
        feed = []
        stock_symbol = dao.get_stock_symbol()
        release_date = self.date_utils.now_date()
        for row in dao.get_row_list():
            stmt_date = row[0]
            capital_increase_by_cash = row[1]
            capital_increase_by_earnings = row[3]
            capital_increase_by_surplus = row[5]
            entry = {
                'release_date' : release_date,
                'stock_symbol' : stock_symbol,
                'stmt_date' : stmt_date, 
                'account' : u'現金增資',
                'account_order' : 1,
                'value' : capital_increase_by_cash
            }
            feed.append(entry)
            entry = {
                'release_date' : release_date,
                'stock_symbol' : stock_symbol,
                'stmt_date' : stmt_date, 
                'account' : u'盈餘轉增資',
                'account_order' : 2,
                'value' : capital_increase_by_earnings
            }
            feed.append(entry)
            entry = {
                'release_date' : release_date,
                'stock_symbol' : stock_symbol,
                'stmt_date' : stmt_date, 
                'account' : u'公積及其他',
                'account_order' : 3,
                'value' : capital_increase_by_surplus
            }
            feed.append(entry)    
        return tuple(feed)
コード例 #3
0
class TupleFeedBuilder():
    def __init__(self):
        self.date_utils = DateUtils()

    def build(self, dao):
        feed = []
        release_date = self.date_utils.now_date()
        stock_symbol = dao.get_stock_symbol()
        column_name_list = dao.get_column_name_list()
        stmt_date_list = column_name_list[1:] # the first column is account
        stmt_date_list = self.__flatten_stmt_date_list(stmt_date_list)
        stmt_date_len = len(stmt_date_list)

        account_order = 1
        for row in dao.get_row_list():
            account = row[0]
            number_list = row[1:]
            number_len = len(number_list)
            for i in range(stmt_date_len):
                stmt_date = stmt_date_list[i]
                value = number_list[i] if i < number_len else None
                entry = {
                    'release_date' : release_date,
                    'stock_symbol' : stock_symbol,
                    'stmt_date' : stmt_date, 
                    'account' : account,
                    'account_order' : account_order,
                    'value' : value
                }
                feed.append(entry)
            account_order += 1
        return tuple(feed)

    # flatten to date if stmt_date_list if date period list
    def __flatten_stmt_date_list(self, stmt_date_list):
        # if date period, we flatten to end date because begin date is always 
        # the first date of this year. 
        if len(stmt_date_list) > 0 and isinstance(stmt_date_list[0], tuple):
            return [stmt_date[1] for stmt_date in stmt_date_list]
        else:
            return stmt_date_list