Update app.py
Browse files
app.py
CHANGED
|
@@ -415,6 +415,15 @@ if 'sell_confirm' not in st.session_state:
|
|
| 415 |
st.session_state['sell_confirm'] = False
|
| 416 |
if 'difficulty_level' not in st.session_state:
|
| 417 |
st.session_state['difficulty_level'] = "초등학생" # 기본 난이도 설정
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 418 |
|
| 419 |
# --- 뉴스 생성 함수 ---
|
| 420 |
def generate_news():
|
|
@@ -424,21 +433,27 @@ def generate_news():
|
|
| 424 |
difficulty_prompt_map = {
|
| 425 |
"초등학생": {
|
| 426 |
"level_desc": "초등학생 5~6학년 수준",
|
| 427 |
-
"sentence_count": "10
|
| 428 |
-
"vocabulary_level": "쉬운 어휘와
|
| 429 |
-
"inference_level": "단순하고
|
|
|
|
|
|
|
| 430 |
},
|
| 431 |
"중학생": {
|
| 432 |
"level_desc": "중학생 1~3학년 수준",
|
| 433 |
-
"sentence_count": "12~15",
|
| 434 |
-
"vocabulary_level": "일상적인 어휘와
|
| 435 |
-
"inference_level": "일반적인 경제 흐름과 관련된 추론",
|
|
|
|
|
|
|
| 436 |
},
|
| 437 |
"고등학생": {
|
| 438 |
"level_desc": "고등학생 1~3학년 수준",
|
| 439 |
"sentence_count": "15~20", # 고등학생 수준 문장 수 증가
|
| 440 |
-
"vocabulary_level": "다양한 어휘와 경제 전문 용어
|
| 441 |
-
"inference_level": "심층적인 경제 분석 및 다각적인 추론", # 고등학생 수준 심층 추론
|
|
|
|
|
|
|
| 442 |
},
|
| 443 |
}
|
| 444 |
|
|
@@ -448,6 +463,7 @@ def generate_news():
|
|
| 448 |
sentence_count = level_config["sentence_count"]
|
| 449 |
vocabulary_level = level_config["vocabulary_level"]
|
| 450 |
inference_level = level_config["inference_level"]
|
|
|
|
| 451 |
|
| 452 |
prompt = f"""
|
| 453 |
지시:
|
|
@@ -457,6 +473,7 @@ def generate_news():
|
|
| 457 |
특정 회사 이름이나 주식 종목을 직접적으로 언급하지 마세요.
|
| 458 |
긍정적 뉴스, 부정적 뉴스, 중립적 뉴스 다양하게 생성하세요.(긍정, 부정, 중립 이라는 말은 표시하지 마세요.)
|
| 459 |
뉴스에 따라 주식이 상승하기도 하고 하락하기도 할 수 있습니다.
|
|
|
|
| 460 |
각 뉴스 기사는 "## 뉴스 [번호]" 로 시작해주세요. (예: ## 뉴스 1, ## 뉴스 2 ...)
|
| 461 |
|
| 462 |
**생성된 뉴스 기사:**
|
|
@@ -493,11 +510,35 @@ def explain_daily_news_meanings(daily_news):
|
|
| 493 |
|
| 494 |
difficulty_level = st.session_state['difficulty_level']
|
| 495 |
difficulty_prompt_map = {
|
| 496 |
-
"초등학생":
|
| 497 |
-
|
| 498 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 499 |
}
|
| 500 |
-
|
|
|
|
|
|
|
|
|
|
| 501 |
|
| 502 |
meanings = {}
|
| 503 |
for i, news_article in enumerate(daily_news):
|
|
@@ -506,7 +547,8 @@ def explain_daily_news_meanings(daily_news):
|
|
| 506 |
{news_article}
|
| 507 |
|
| 508 |
**지시:**
|
| 509 |
-
위 신문 기사의 핵심 의미를 {level_prompt}
|
|
|
|
| 510 |
그리고 이 뉴스와 관련된 주식 섹터 1~2개를 쉼표로 구분해서 "관련 섹터: " 다음에 알려주세요. 관련 섹터가 없다면 "관련 섹터: 없음" 이라고 해주세요.
|
| 511 |
|
| 512 |
뉴스 의미 해설:
|
|
@@ -768,67 +810,89 @@ def display_stock_prices():
|
|
| 768 |
for stock_name, stock_info in sector_stocks.items():
|
| 769 |
price_history = stock_info["price_history"]
|
| 770 |
daily_change_rate_str = " - " # 기본값
|
|
|
|
| 771 |
if len(price_history) >= 2:
|
| 772 |
previous_day_price = price_history[-2]
|
| 773 |
current_price = price_history[-1]
|
| 774 |
daily_change_rate = (current_price - previous_day_price) / previous_day_price * 100
|
| 775 |
daily_change_rate_str = f"{daily_change_rate:.2f}%"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 776 |
|
| 777 |
stocks_data.append(
|
| 778 |
{
|
| 779 |
-
"종목": stock_name,
|
| 780 |
"섹터": sector,
|
|
|
|
| 781 |
"현재 주가": f"{stock_info['current_price']:,} 원",
|
| 782 |
-
"전일 대비": daily_change_rate_str, #
|
| 783 |
"price_history": stock_info["price_history"],
|
| 784 |
"description": stock_info["description"],
|
| 785 |
}
|
| 786 |
)
|
| 787 |
stocks_df = pd.DataFrame(stocks_data)
|
| 788 |
-
st.dataframe(stocks_df[["섹터", "종목", "현재 주가", "전일 대비"]], hide_index=True) # "전일 대비" 컬럼 추가
|
| 789 |
-
|
| 790 |
-
selected_stock_all_info = st.selectbox(
|
| 791 |
-
"종목 선택 (기업 정보 및 주가 그래프)", stocks_df["종목"].tolist()
|
| 792 |
-
)
|
| 793 |
-
if selected_stock_all_info:
|
| 794 |
-
selected_stock_sector = stocks_df[
|
| 795 |
-
stocks_df["종목"] == selected_stock_all_info
|
| 796 |
-
]["섹터"].iloc[0]
|
| 797 |
-
col1_info, col2_graph = st.columns([1, 2])
|
| 798 |
-
|
| 799 |
-
with col1_info:
|
| 800 |
-
st.subheader("기업 정보")
|
| 801 |
-
st.info(
|
| 802 |
-
f"**{selected_stock_all_info} ({selected_stock_sector})**\n\n{st.session_state['stocks'][selected_stock_sector][selected_stock_all_info]['description']}"
|
| 803 |
-
)
|
| 804 |
|
| 805 |
-
|
| 806 |
-
|
| 807 |
-
|
| 808 |
-
|
| 809 |
-
|
| 810 |
-
|
| 811 |
-
|
| 812 |
-
|
| 813 |
-
|
| 814 |
-
|
| 815 |
-
|
| 816 |
-
|
| 817 |
-
|
| 818 |
-
|
| 819 |
-
|
| 820 |
-
][
|
| 821 |
-
|
| 822 |
-
|
| 823 |
-
|
| 824 |
-
|
| 825 |
-
|
| 826 |
-
|
| 827 |
-
|
| 828 |
-
|
| 829 |
-
|
| 830 |
-
|
| 831 |
-
st.info("
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 832 |
|
| 833 |
|
| 834 |
def display_portfolio_table():
|
|
@@ -961,13 +1025,13 @@ def main():
|
|
| 961 |
|
| 962 |
with col_main_ui:
|
| 963 |
menu = st.tabs(
|
| 964 |
-
['현재 주가', '내 포트폴리오', '주식 매수', '주식 매도', '어제 뉴스 해설']
|
| 965 |
)
|
| 966 |
|
| 967 |
with menu[0]:
|
| 968 |
-
st.subheader("📈 현재 주가 및 기업 정보")
|
| 969 |
st.markdown("주식 시장의 현재 가격과 기업 정보를 확인하세요.")
|
| 970 |
-
display_stock_prices()
|
| 971 |
|
| 972 |
with menu[1]:
|
| 973 |
st.subheader("📊 내 포트폴리오")
|
|
|
|
| 415 |
st.session_state['sell_confirm'] = False
|
| 416 |
if 'difficulty_level' not in st.session_state:
|
| 417 |
st.session_state['difficulty_level'] = "초등학생" # 기본 난이도 설정
|
| 418 |
+
if 'selected_stock_info' not in st.session_state:
|
| 419 |
+
st.session_state['selected_stock_info'] = None
|
| 420 |
+
if 'selected_stock_sector_info' not in st.session_state:
|
| 421 |
+
st.session_state['selected_stock_sector_info'] = None
|
| 422 |
+
if 'selected_stock_chart' not in st.session_state:
|
| 423 |
+
st.session_state['selected_stock_chart'] = None
|
| 424 |
+
if 'selected_stock_sector_chart' not in st.session_state:
|
| 425 |
+
st.session_state['selected_stock_sector_chart'] = None
|
| 426 |
+
|
| 427 |
|
| 428 |
# --- 뉴스 생성 함수 ---
|
| 429 |
def generate_news():
|
|
|
|
| 433 |
difficulty_prompt_map = {
|
| 434 |
"초등학생": {
|
| 435 |
"level_desc": "초등학생 5~6학년 수준",
|
| 436 |
+
"sentence_count": "8~10", # 더 짧은 문장
|
| 437 |
+
"vocabulary_level": "아주 쉬운 어휘와 짧고 명확한 문장 사용", # 더 쉬운 어휘 강조
|
| 438 |
+
"inference_level": "매우 단순하고 직관적인 정보", # 더 단순한 추론
|
| 439 |
+
"news_prompt_instructions": "단순한 경제 상황, 쉬운 단어, 짧은 문장, 명확한 정보 위주로 작성. 복잡한 경제 용어, 전문 용어, 추상적인 개념 사용 금지.", # 초등학생용 뉴스 생성 지침 추가
|
| 440 |
+
"explanation_prompt_instructions": "핵심 용어, 쉬운 비유 사용, 짧고 명확한 설명, 3문장 이내 요약", # 초등학생용 해설 지침 추가
|
| 441 |
},
|
| 442 |
"중학생": {
|
| 443 |
"level_desc": "중학생 1~3학년 수준",
|
| 444 |
+
"sentence_count": "12~15",
|
| 445 |
+
"vocabulary_level": "일상적인 어휘와 기본적인 경제 용어 포함", # 중학생 수준 어휘
|
| 446 |
+
"inference_level": "일반적인 경제 흐름과 관련된 추론",
|
| 447 |
+
"news_prompt_instructions": "일상적인 경제 뉴스, 쉬운 경제 용어, 적절한 문장 길이, 일반적인 경제 흐름과 관련, 약간의 추론 필요", # 중학생용 뉴스 생성 지침
|
| 448 |
+
"explanation_prompt_instructions": "기본 경제 용어 설명, 경제 개념 쉬운 풀이, 3~4문장 요약", # 중학생용 해설 지침
|
| 449 |
},
|
| 450 |
"고등학생": {
|
| 451 |
"level_desc": "고등학생 1~3학년 수준",
|
| 452 |
"sentence_count": "15~20", # 고등학생 수준 문장 수 증가
|
| 453 |
+
"vocabulary_level": "다양한 어휘와 경제 전문 용어 적극 사용", # 고등학생 수준 어휘
|
| 454 |
+
"inference_level": "심층적인 경제 분석 및 다각적인 추론 요구", # 고등학생 수준 심층 추론
|
| 455 |
+
"news_prompt_instructions": "심층 경제 뉴스, 경제 전문 용어 적극 사용, 긴 문장, 복잡한 구문, 산업 동향, 경제 정책, 국제 경제, 다각적인 분석과 심층 추론 필요", # 고등학생용 뉴스 생성 지침
|
| 456 |
+
"explanation_prompt_instructions": "전문 경제 용어 해설 포함, 심층적인 경제 분석, 5문장 내외 요약, 다양한 관점 제시", # 고등학생용 해설 지침
|
| 457 |
},
|
| 458 |
}
|
| 459 |
|
|
|
|
| 463 |
sentence_count = level_config["sentence_count"]
|
| 464 |
vocabulary_level = level_config["vocabulary_level"]
|
| 465 |
inference_level = level_config["inference_level"]
|
| 466 |
+
news_prompt_instructions = level_config["news_prompt_instructions"] # 난이도별 뉴스 생성 지침 추가
|
| 467 |
|
| 468 |
prompt = f"""
|
| 469 |
지시:
|
|
|
|
| 473 |
특정 회사 이름이나 주식 종목을 직접적으로 언급하지 마세요.
|
| 474 |
긍정적 뉴스, 부정적 뉴스, 중립적 뉴스 다양하게 생성하세요.(긍정, 부정, 중립 이라는 말은 표시하지 마세요.)
|
| 475 |
뉴스에 따라 주식이 상승하기도 하고 하락하기도 할 수 있습니다.
|
| 476 |
+
{news_prompt_instructions} # 난이도별 뉴스 생성 지침 추가
|
| 477 |
각 뉴스 기사는 "## 뉴스 [번호]" 로 시작해주세요. (예: ## 뉴스 1, ## 뉴스 2 ...)
|
| 478 |
|
| 479 |
**생성된 뉴스 기사:**
|
|
|
|
| 510 |
|
| 511 |
difficulty_level = st.session_state['difficulty_level']
|
| 512 |
difficulty_prompt_map = {
|
| 513 |
+
"초등학생": {
|
| 514 |
+
"level_desc": "초등학생 5~6학년",
|
| 515 |
+
"sentence_count": "8~10", # 더 짧은 문장
|
| 516 |
+
"vocabulary_level": "아주 쉬운 어휘와 짧고 명확한 문장 사용", # 더 쉬운 어휘 강조
|
| 517 |
+
"inference_level": "매우 단순하고 직관적인 정보", # 더 단순한 추론
|
| 518 |
+
"news_prompt_instructions": "단순한 경제 상황, 쉬운 단어, 짧은 문장, 명확한 정보 위주로 작성. 복잡한 경제 용어, 전문 용어, 추상적인 개념 사용 금지.", # 초등학생용 뉴스 생성 지침 추가
|
| 519 |
+
"explanation_prompt_instructions": "핵심 용어, 쉬운 비유 사용, 짧고 명확한 설명, 3문장 이내 요약", # 초등학생용 해설 지침 추가
|
| 520 |
+
},
|
| 521 |
+
"중학생": {
|
| 522 |
+
"level_desc": "중학생 1~3학년 수준",
|
| 523 |
+
"sentence_count": "12~15",
|
| 524 |
+
"vocabulary_level": "일상적인 어휘와 기본적인 경제 용어 포함", # 중학생 수준 어휘
|
| 525 |
+
"inference_level": "일반적인 경제 흐름과 관련된 추론",
|
| 526 |
+
"news_prompt_instructions": "일상적인 경제 뉴스, 쉬운 경제 용어, 적절한 문장 길이, 일반적인 경제 흐름과 관련, 약간의 추론 필요", # 중학생용 뉴스 생성 지침
|
| 527 |
+
"explanation_prompt_instructions": "기본 경제 용어 설명, 경제 개념 쉬운 풀이, 3~4문장 요약", # 중학생용 해설 지침
|
| 528 |
+
},
|
| 529 |
+
"고등학생": {
|
| 530 |
+
"level_desc": "고등학생 1~3학년 수준",
|
| 531 |
+
"sentence_count": "15~20", # 고등학생 수준 문장 수 증가
|
| 532 |
+
"vocabulary_level": "다양한 어휘와 경제 전문 용어 적극 사용", # 고등학생 수준 어휘
|
| 533 |
+
"inference_level": "심층적인 경제 분석 및 다각적인 추론 요구", # 고등학생 수준 심층 추론
|
| 534 |
+
"news_prompt_instructions": "심층 경제 뉴스, 경제 전문 용어 적극 사용, 긴 문장, 복잡한 구문, 산업 동향, 경제 정책, 국제 경제, 다각적인 분석과 심층 추론 필요", # 고등학생용 뉴스 생성 지침
|
| 535 |
+
"explanation_prompt_instructions": "전문 경제 용어 해설 포함, 심층적인 경제 분석, 5문장 내외 요약, 다양한 관점 제시", # 고등학생용 해설 지침
|
| 536 |
+
},
|
| 537 |
}
|
| 538 |
+
level_config = difficulty_prompt_map.get(difficulty_level, difficulty_prompt_map["초등학생"]) # 기본값 초등학생
|
| 539 |
+
level_prompt = level_config["level_desc"]
|
| 540 |
+
explanation_prompt_instructions = level_config["explanation_prompt_instructions"] # 난이도별 해설 지침 추가
|
| 541 |
+
|
| 542 |
|
| 543 |
meanings = {}
|
| 544 |
for i, news_article in enumerate(daily_news):
|
|
|
|
| 547 |
{news_article}
|
| 548 |
|
| 549 |
**지시:**
|
| 550 |
+
위 신문 기사의 핵심 의미를 {level_prompt} 수준의 학생이 이해하기 쉽게 요약하고 해설해주세요.
|
| 551 |
+
{explanation_prompt_instructions} # 난이도별 해설 지침 추가
|
| 552 |
그리고 이 뉴스와 관련된 주식 섹터 1~2개를 쉼표로 구분해서 "관련 섹터: " 다음에 알려주세요. 관련 섹터가 없다면 "관련 섹터: 없음" 이라고 해주세요.
|
| 553 |
|
| 554 |
뉴스 의미 해설:
|
|
|
|
| 810 |
for stock_name, stock_info in sector_stocks.items():
|
| 811 |
price_history = stock_info["price_history"]
|
| 812 |
daily_change_rate_str = " - " # 기본값
|
| 813 |
+
daily_change_color = "gray" # 기본 색상 회색
|
| 814 |
if len(price_history) >= 2:
|
| 815 |
previous_day_price = price_history[-2]
|
| 816 |
current_price = price_history[-1]
|
| 817 |
daily_change_rate = (current_price - previous_day_price) / previous_day_price * 100
|
| 818 |
daily_change_rate_str = f"{daily_change_rate:.2f}%"
|
| 819 |
+
if daily_change_rate > 0:
|
| 820 |
+
daily_change_color = "red" # 상승 시 빨간색
|
| 821 |
+
elif daily_change_rate < 0:
|
| 822 |
+
daily_change_color = "blue" # 하락 시 파란색
|
| 823 |
+
else:
|
| 824 |
+
daily_change_color = "gray" # 보합 시 회색
|
| 825 |
|
| 826 |
stocks_data.append(
|
| 827 |
{
|
|
|
|
| 828 |
"섹터": sector,
|
| 829 |
+
"종목": stock_name,
|
| 830 |
"현재 주가": f"{stock_info['current_price']:,} 원",
|
| 831 |
+
"전일 대비": f'<span style="color:{daily_change_color};">{daily_change_rate_str}</span>', # 색상 적용
|
| 832 |
"price_history": stock_info["price_history"],
|
| 833 |
"description": stock_info["description"],
|
| 834 |
}
|
| 835 |
)
|
| 836 |
stocks_df = pd.DataFrame(stocks_data)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 837 |
|
| 838 |
+
sector_list = stocks_df['섹터'].unique() # 섹터 목록 추출
|
| 839 |
+
|
| 840 |
+
for sector in sector_list: # 섹터별로 정보 표시
|
| 841 |
+
st.subheader(f"[{sector}]")
|
| 842 |
+
sector_df = stocks_df[stocks_df['섹터'] == sector].reset_index(drop=True) # 섹터별 데이터프레임 생성
|
| 843 |
+
for index, row in sector_df.iterrows(): # 섹터별 데이터프레임 순회
|
| 844 |
+
col1, col2, col3, col4, col5 = st.columns([2, 2, 1.5, 1.5, 1]) # 컬럼 너비 조정
|
| 845 |
+
with col1:
|
| 846 |
+
st.markdown(f"**{row['종목']}**") # 종목명 굵게 표시
|
| 847 |
+
with col2:
|
| 848 |
+
st.metric(label="현재 주가", value=row['현재 주가']) # 현재 주가 metric 스타일 적용
|
| 849 |
+
with col3:
|
| 850 |
+
st.markdown(f"전일 대비: {row['전일 대비']}", unsafe_allow_html=True) # 전일 대비 등락률 및 색상 적용
|
| 851 |
+
with col4:
|
| 852 |
+
if st.button("기업 정보", key=f"info_{index}_{sector}", use_container_width=True): # 기업 정보 버튼
|
| 853 |
+
st.session_state['selected_stock_info'] = row['종목'] # 선택 종목 저장
|
| 854 |
+
st.session_state['selected_stock_sector_info'] = row['섹터'] # 선택 섹터 저장
|
| 855 |
+
with col5:
|
| 856 |
+
if st.button("주가 그래프", key=f"chart_{index}_{sector}", use_container_width=True): # 주가 그래프 버튼
|
| 857 |
+
st.session_state['selected_stock_chart'] = row['종목'] # 선택 종목 저장
|
| 858 |
+
st.session_state['selected_stock_sector_chart'] = row['섹터'] # 선택 섹터 저장
|
| 859 |
+
st.markdown("---") # 섹터 구분선
|
| 860 |
+
|
| 861 |
+
if 'selected_stock_info' in st.session_state: # 기업 정보 표시
|
| 862 |
+
selected_stock_info = st.session_state['selected_stock_info']
|
| 863 |
+
selected_stock_sector_info = st.session_state['selected_stock_sector_info']
|
| 864 |
+
st.info(f"**[{selected_stock_sector_info}] {selected_stock_info}**\n\n{st.session_state['stocks'][selected_stock_sector_info][selected_stock_info]['description']}")
|
| 865 |
+
del st.session_state['selected_stock_info'] # 세션 상태 삭제
|
| 866 |
+
del st.session_state['selected_stock_sector_info'] # 세션 상태 삭제
|
| 867 |
+
|
| 868 |
+
if 'selected_stock_chart' in st.session_state: # 주가 그래프 표시
|
| 869 |
+
selected_stock_chart = st.session_state['selected_stock_chart']
|
| 870 |
+
selected_stock_sector_chart = st.session_state['selected_stock_sector_chart']
|
| 871 |
+
price_history_df = pd.DataFrame(
|
| 872 |
+
{
|
| 873 |
+
"날짜": range(
|
| 874 |
+
1,
|
| 875 |
+
len(
|
| 876 |
+
st.session_state["stocks"][selected_stock_sector_chart][
|
| 877 |
+
selected_stock_chart
|
| 878 |
+
]["price_history"]
|
| 879 |
+
)
|
| 880 |
+
+ 1,
|
| 881 |
+
),
|
| 882 |
+
"주가": st.session_state["stocks"][selected_stock_sector_chart][
|
| 883 |
+
selected_stock_chart
|
| 884 |
+
]["price_history"],
|
| 885 |
+
}
|
| 886 |
+
)
|
| 887 |
+
fig = px.line(
|
| 888 |
+
price_history_df,
|
| 889 |
+
x="날짜",
|
| 890 |
+
y="주가",
|
| 891 |
+
title=f"[{selected_stock_sector_chart}] {selected_stock_chart} 주가 변동",
|
| 892 |
+
)
|
| 893 |
+
st.plotly_chart(fig)
|
| 894 |
+
del st.session_state['selected_stock_chart'] # 세션 상태 삭제
|
| 895 |
+
del st.session_state['selected_stock_sector_chart'] # 세션 상태 삭제
|
| 896 |
|
| 897 |
|
| 898 |
def display_portfolio_table():
|
|
|
|
| 1025 |
|
| 1026 |
with col_main_ui:
|
| 1027 |
menu = st.tabs(
|
| 1028 |
+
['현재 주가 및 기업 정보', '내 포트폴리오', '주식 매수', '주식 매도', '어제 뉴스 해설']
|
| 1029 |
)
|
| 1030 |
|
| 1031 |
with menu[0]:
|
| 1032 |
+
st.subheader("📈 현재 주가 및 기업 정보") # 탭 이름 변경
|
| 1033 |
st.markdown("주식 시장의 현재 가격과 기업 정보를 확인하세요.")
|
| 1034 |
+
display_stock_prices() # 수정된 함수 호출
|
| 1035 |
|
| 1036 |
with menu[1]:
|
| 1037 |
st.subheader("📊 내 포트폴리오")
|