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
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
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)