Beispiel #1
0
 def sub_cost_for_dividend(self, cash: Decimal):
     """
     分红后降低成本
     :param cash: 拿到的分红钱
     :return:
     """
     self.__cost = decimal_utils.sub(self.__cost, cash)
Beispiel #2
0
def cal_inc_rate(n: MqQuarterMetric, l: MqQuarterMetric):
    if n is None or l is None:
        return None
    else:
        if mq_quarter_metric_enum.is_percent_indicator(n.name):
            return decimal_utils.sub(n.value, l.value)
        else:
            return decimal_utils.yoy(n.value, l.value)
Beispiel #3
0
def extract_from_income_adjust(result_list: list, store: MqQuarterStore,
                               period_dict: dict, income: TsIncome):
    update_date = date_utils.format_delta(income.mq_ann_date, -1)

    nprofit_new = store.find_period_exact(income.ts_code,
                                          mq_quarter_metric_enum.nprofit.name,
                                          income.end_date, update_date)
    nprofit_old = store.find_period_latest(
        income.ts_code, mq_quarter_metric_enum.nprofit.name, income.end_date,
        date_utils.format_delta(update_date, -1))
    dprofit_old = store.find_period_latest(
        income.ts_code, mq_quarter_metric_enum.dprofit.name, income.end_date,
        date_utils.format_delta(update_date, -2))

    to_add = None
    if nprofit_new is None:
        log.error('Cant find nprofit in adjust income. %s %s' %
                  (income.ts_code, income.end_date))
    elif nprofit_old is None or dprofit_old is None:
        to_add = MqQuarterMetric(
            ts_code=income.ts_code,
            report_type=(1 << mq_report_type.report_adjust),
            period=income.end_date,
            update_date=update_date,
            name=mq_quarter_metric_enum.dprofit.name,
            value=nprofit_new.value)
    else:
        to_add = MqQuarterMetric(
            ts_code=income.ts_code,
            report_type=(1 << mq_report_type.report_adjust),
            period=income.end_date,
            update_date=update_date,
            name=mq_quarter_metric_enum.dprofit.name,
            value=decimal_utils.sub(
                nprofit_new.value,
                decimal_utils.sub(nprofit_old.value, dprofit_old.value)))

    if to_add is not None:
        common_add(result_list, store, to_add)
Beispiel #4
0
def cal_quarter(name: str, i1: MqQuarterMetric,
                i2: MqQuarterMetric) -> MqQuarterMetric:
    if i1 is not None and date_utils.get_quarter_num(i1.period) == 1:
        return MqQuarterMetric(ts_code=i1.ts_code,
                               report_type=i1.report_type,
                               period=i1.period,
                               update_date=i1.update_date,
                               name=name,
                               value=i1.value)
    elif i1 is None or i2 is None:
        return None
    return MqQuarterMetric(ts_code=i1.ts_code,
                           report_type=i1.report_type | i2.report_type,
                           period=i1.period,
                           update_date=i1.update_date,
                           name=name,
                           value=decimal_utils.sub(i1.value, i2.value))
Beispiel #5
0
def sub_from(name: str, arr: list) -> MqQuarterMetric:
    report_type = 0
    sum = None
    for index, i in enumerate(arr):  # type: MqQuarterMetric
        if i is not None:
            if sum is None:
                sum = MqQuarterMetric(ts_code=i.ts_code,
                                      period=i.period,
                                      update_date=i.update_date,
                                      name=name)
            report_type = report_type | i.report_type
            if index == 0:
                sum.value = decimal_utils.add(sum.value, i.value)
            else:
                sum.value = decimal_utils.sub(sum.value, i.value)
    if sum is not None:
        sum.report_type = report_type
    return sum