def get_netprofit_with_period(structured_data, from_date, to_date):
    full_data = structured_data
    filtered = filter_remove_greater_than(structured_data, "날짜",
                                          to_date.strftime("%Y-%m-%d"))
    filtered = filter_remove_less_than(filtered, "날짜",
                                       from_date.strftime("%Y-%m-%d"))
    filtered = filter_remove_greater_than(filtered, "수량", 0)

    earned_profit = 0

    for idx in range(len(filtered.data)):
        count = int(filtered.get_value_with_label(idx, "수량"))
        price = int(filtered.get_value_with_label(idx, "가격"))
        cur_date = filtered.get_value_with_label(idx, "날짜")
        name = filtered.get_value_with_label(idx, "종목")
        stock_infos = get_stock_infos_with_date(
            full_data,
            datetime.datetime.strptime(cur_date, "%Y-%m-%d") -
            datetime.timedelta(days=1))
        bep_price = stock_infos[name]["bep_price"]
        earned_profit += (price - bep_price) * -count

    value_profit = get_valueprofit_with_period(structured_data, to_date) \
                   - get_valueprofit_with_period(structured_data, from_date)
    print("value_profit=[{}]".format(value_profit))
    print("earned_profit=[{}]".format(earned_profit))
    return value_profit + earned_profit
Esempio n. 2
0
def get_total_earn(structured_data, target_date):
    structured_data = filter_remove_greater_than(structured_data, "날짜",
                                                 target_date)
    structured_data = convert_to_int(structured_data, "총가격")
    structured_data = filter_remove_greater_than(structured_data, "총가격", 0)
    structured_data = filter_remove_equals(structured_data, "총가격", "")

    balance = 0
    for idx, each_row in enumerate(structured_data.data):
        # print(structured_data.get_value_with_label(idx, "종목"))
        # print(structured_data.get_value_with_label(idx, "총가격"))
        # print()
        balance += int(structured_data.get_value_with_label(idx, "총가격"))
    print()

    return -balance
def get_stock_infos_with_date(structured_data, curr_date):
    if isinstance(curr_date, datetime.datetime) or isinstance(
            curr_date, datetime.date):
        curr_date = curr_date.strftime("%Y-%m-%d")

    structured_data = filter_remove_greater_than(structured_data, "날짜",
                                                 curr_date)
    stock_infos = {}

    for idx in range(len(structured_data.data)):
        name = structured_data.get_value_with_label(idx, "종목")
        count = int(structured_data.get_value_with_label(idx, "수량"))
        price = int(structured_data.get_value_with_label(idx, "가격"))
        if not name in stock_infos:
            stock_infos[name] = {
                "count": 0,
                "avg_price": 0,
            }

        prev_count, prev_avg_price = stock_infos[name]["count"], stock_infos[
            name]["avg_price"]
        stock_infos[name]["count"] = prev_count + count
        if count > 0:
            stock_infos[name]["avg_price"] = (prev_avg_price * prev_count +
                                              price * count) / (prev_count +
                                                                count)
            stock_infos[name][
                "bep_price"] = stock_infos[name]["avg_price"] * 1.0025
        if stock_infos[name]["count"] == 0:
            del stock_infos[name]

    return stock_infos
def get_balance_with_date(structured_data, curr_date):
    structured_data = filter_remove_greater_than(
        structured_data, "날짜", curr_date.strftime("%Y-%m-%d"))

    balance = 0

    for idx in range(len(structured_data.data)):
        count = int(structured_data.get_value_with_label(idx, "수량"))
        price = int(structured_data.get_value_with_label(idx, "가격"))
        balance += count * price

    return balance
Esempio n. 5
0
def get_evaluation_stock_sum(structured_data, target_date_as_string):
    structured_data = filter_remove_greater_than(structured_data, "날짜",
                                                 target_date_as_string)
    # structured_data = filter_remove_equals(structured_data, "현재평가금", "")
    # print_data(structured_data)
    structured_data = sort_by(structured_data, "날짜")
    structured_data = sort_by(structured_data, "종목")

    current_evaluation = {}
    current_quantity = {}
    for idx, each in enumerate(structured_data.data):
        # print(structured_data.get_value_with_label(idx, "날짜"))
        # print(structured_data.get_value_with_label(idx, "종목"))
        # print(structured_data.get_value_with_label(idx, "현재평가금"))
        # print()
        name = structured_data.get_value_with_label(idx, "종목")
        current_price = structured_data.get_value_with_label(idx, "현재평가금")
        # print("current_price", current_price)
        if current_price:
            current_evaluation[name] = int(current_price)

        if name not in current_quantity:
            current_quantity[name] = 0

        price = safe_int(structured_data.get_value_with_label(idx, "가격"))
        quantity = safe_int(structured_data.get_value_with_label(idx, "수량"))
        direction = safe_division(price, abs(price))
        # print("direction")
        # print(direction)
        current_quantity[name] += direction * quantity
        # print("name", name)
        # print("current_quantity[name]", current_quantity[name])

    evaluation_sum = 0
    for idx, val in current_evaluation.items():
        evaluation_sum += current_quantity[idx] * val

    return evaluation_sum
def print_information(structure_data,
                      target_date,
                      investment_type,
                      investment_name=None):
    structure_data = filter_remove_not_equals(structure_data, "종류",
                                              investment_type)
    if investment_name is not None:
        structure_data = filter_remove_not_equals(structure_data, "종목",
                                                  investment_name)
    structure_data = filter_remove_greater_than(structure_data, "날짜",
                                                target_date)
    structure_data = filter_remove_not_equals(structure_data, "환금가능금액", "")

    # print("데이터개수", len(structure_data.data))
    average_balance = get_average_balance(structure_data, target_date)
    start_date_as_string = get_start_date(structure_data)
    days = date_minus(target_date, start_date_as_string)
    current_profit = get_p2p_profit(structure_data, target_date)
    annual_interest_rate = get_annual_interest_rate(current_profit,
                                                    average_balance, days)

    print_profits(average_balance, current_profit, start_date_as_string,
                  target_date, days, annual_interest_rate)