def main():
    target_date = get_today_as_str()

    result = utils.structured_data_utils.get_structed_data_from_date(
        target_date)

    result = sort_by(result, "날짜")
    result = filter_remove_not_equals(result, "종류", "주식")
    result = filter_remove_equals(result, "수량", "")

    first_date = str2date(get_first_date(result))
    print_annual_profit_rate(result, first_date, datetime.date.today())
def main():
    target_date_as_string = get_today_as_str()
    # target_date_as_string = "2019-03-31"

    structured_data = structured_data_utils.get_structed_data_from_date(
        get_today_as_str())
    structured_data = sort_by(structured_data, "날짜")

    for p2pname in [
            "어니스트펀드",
            "테라펀딩",
            "피플펀드",
            "투게더",
    ]:
        print(p2pname)
        print_information(structured_data, target_date_as_string, "p2p",
                          p2pname)
        print()

    # print("Total")
    # print_information(strcted_data, target_date_as_string, "p2p")
    print()
def main():
    target_date = get_today_as_str()

    result = utils.structured_data_utils.get_structed_data_from_date(target_date)

    result = sort_by(result, "날짜")
    result = filter_remove_not_equals(result, "종류", "주식")
    result = filter_remove_equals(result, "수량", "")
    # result = filter_remove_not_equals(result, "종목", "아프리카TV")
    # result = filter_remove_not_equals(result, "종목", "시디즈")
    # result = filter_remove_not_equals(result, "종목", "엔에이치엔")
    # result = filter_remove_not_equals(result, "종목", "이마트")
    result = filter_remove_not_equals(result, "종목", "카카오")

    do_something(result, "2019-01-01", "2019-09-01")
def main():
    target_date = get_today_as_str()

    result = utils.structured_data_utils.get_structed_data_from_date(
        target_date)

    result = sort_by(result, "날짜")

    result = filter_remove_not_equals(result, "종류", "주식")
    # result = filter_remove_not_equals(result, "종목", "NAVER")
    # result = filter_remove_not_equals(result, "종목", "SK텔레콤")
    # result = filter_remove_not_equals(result, "종목", "tiger 200 it")
    # result = filter_remove_not_equals(result, "종목", "카카오")
    # result = filter_remove_equals(result, "가격", "")

    for idx, each_row in enumerate(result.data):
        each_price = safe_int(result.get_value_with_label(idx, "가격"))
        quantity = safe_int(result.get_value_with_label(idx, "수량"))

        result.data[idx][result.get_label_idx("총가격")] = each_price * quantity
        print(result.data[idx][result.get_label_idx("총가격")])

    average_balance = get_average_balance(result, target_date)
    # print(average_balance)

    start_date_as_string = get_start_date(result)
    days = date_minus(target_date, start_date_as_string)
    current_profit = get_stock_profit(result, target_date)

    annual_interest_rate = get_annual_interest_rate(current_profit,
                                                    average_balance, days)
    print_profits(average_balance=average_balance,
                  current_profit=current_profit,
                  start_date=start_date_as_string,
                  target_date=target_date,
                  days=days,
                  annual_interest_rate=annual_interest_rate)
def do_something(structured_data, from_date, to_date):
    if type(from_date) == datetime.date:
        pass

    stocks = {}
    single_stock_queue = {}
    earned_profit_sum = 0

    balance_sum = 0
    average_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, "가격"))
        cur_date = structured_data.get_value_with_label(idx, "날짜")
        name = structured_data.get_value_with_label(idx, "종목")

        if name not in stocks:
            stocks[name] = Stock(name, 0, 0)

        if count > 0:
            price_sum = float(stocks[name].price) * stocks[name].count + float(price) * count
            count_sum = stocks[name].count + count

            stocks[name].price = price_sum / count_sum
            stocks[name].count = count_sum
        else:
            count_sum = stocks[name].count + count

            stocks[name].count = count_sum

        if from_date < cur_date < to_date:
            print(f"[{cur_date}]: [{stocks[name]}]")

        if count > 0:
            if name not in single_stock_queue:
                single_stock_queue[name] = queue.Queue()
            for _ in range(count):
                single_stock_queue[name].put(SingleStock(name, price, cur_date))
        elif count < 0:
            for each in range(-count):
                poped = single_stock_queue[name].get()
                if from_date < poped.date < to_date:
                    security_fee = structured_data.get_value_with_label(idx, "수수료")
                    if security_fee:
                        security_fee = float(security_fee)
                    else:
                        security_fee = 0

                    duration_days = date_minus(cur_date, poped.date) + 1
                    balance_sum += poped.price
                    average_balance += float(poped.price) * duration_days / 365
                    print(f"poped.price=[{poped.price}]], duration_days=[{duration_days}], balance_sum=[{balance_sum}]")
                    tax_rate = get_tax_rate(name, cur_date)
                    earned_profit = price - poped.price - price * tax_rate - security_fee
                    print(f"[{poped.date}] [{poped.name}]: [{price}] - [{poped.price}] - [{price * tax_rate}] - [{security_fee}] = [{earned_profit}]")
                    earned_profit_sum += earned_profit

    value_profit_sum = 0
    for key, each_queue in single_stock_queue.items():
        for idx in range(each_queue.qsize()):
            each = each_queue.get()
            if from_date < each.date < to_date:
                duration_days = date_minus(get_today_as_str(), each.date) + 1
                balance_sum += each.price
                average_balance += float(each.price) * duration_days / 365

                curr_price = get_price_data(each.name, get_today())
                tax_rate = get_tax_rate(each.name, get_today())
                value_profit = curr_price - each.price - curr_price * tax_rate
                print(f"[{each.date}] [보유종목] - [{each.name}]: 현재가[{curr_price}] - 구매가[{each.price}] - 세금[{curr_price * tax_rate}] = [{value_profit}]")
                value_profit_sum += value_profit
    print(f"earned_profit_sum = [{earned_profit_sum}]")
    print(f"value_profit_sum = [{value_profit_sum}]")
    print(f"profit_rate = ([{earned_profit_sum}] + [{value_profit_sum}]) / [{balance_sum}] = [{(earned_profit_sum + value_profit_sum) / balance_sum}]")
    print(f"annual_profit_rate = [{(earned_profit_sum + value_profit_sum) / average_balance}]")