112 lines
2.9 KiB
Python
112 lines
2.9 KiB
Python
"""Symbol universe grouped by role. Keys are Yahoo Finance tickers.
|
|
|
|
Group names are used by the renderer/prompt to organise the briefing, so keep them stable.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
# group -> {ticker: display name (Korean)}
|
|
SYMBOL_GROUPS: dict[str, dict[str, str]] = {
|
|
"indices": {
|
|
"^GSPC": "S&P 500",
|
|
"^DJI": "다우존스",
|
|
"^IXIC": "나스닥 종합",
|
|
"^RUT": "러셀 2000",
|
|
"^SOX": "필라델피아 반도체(SOX)",
|
|
"^VIX": "VIX",
|
|
},
|
|
"futures": {
|
|
"ES=F": "S&P 500 선물",
|
|
"NQ=F": "나스닥 100 선물",
|
|
"YM=F": "다우 선물",
|
|
},
|
|
"rates": {
|
|
"^IRX": "미 3개월물",
|
|
"^FVX": "미 5년물",
|
|
"^TNX": "미 10년물",
|
|
"^TYX": "미 30년물",
|
|
},
|
|
"fx": {
|
|
"KRW=X": "달러/원",
|
|
"DX-Y.NYB": "달러인덱스(DXY)",
|
|
"JPY=X": "달러/엔",
|
|
},
|
|
"commodities": {
|
|
"CL=F": "WTI 원유",
|
|
"GC=F": "금",
|
|
"HG=F": "구리",
|
|
"BTC-USD": "비트코인",
|
|
},
|
|
"sectors": {
|
|
"XLK": "기술(XLK)",
|
|
"XLF": "금융(XLF)",
|
|
"XLE": "에너지(XLE)",
|
|
"XLV": "헬스케어(XLV)",
|
|
"XLI": "산업재(XLI)",
|
|
"SMH": "반도체 ETF(SMH)",
|
|
},
|
|
"korea_linked": {
|
|
"EWY": "MSCI Korea ETF(EWY)",
|
|
"CPNG": "쿠팡",
|
|
"KB": "KB금융 ADR",
|
|
"SHG": "신한지주 ADR",
|
|
"PKX": "POSCO홀딩스 ADR",
|
|
"KEP": "한국전력 ADR",
|
|
"LPL": "LG디스플레이 ADR",
|
|
"SKM": "SK텔레콤 ADR",
|
|
},
|
|
"semis": {
|
|
"NVDA": "엔비디아",
|
|
"TSM": "TSMC",
|
|
"MU": "마이크론",
|
|
"AMD": "AMD",
|
|
"AVGO": "브로드컴",
|
|
"ASML": "ASML",
|
|
},
|
|
"megacap": {
|
|
"AAPL": "애플",
|
|
"MSFT": "마이크로소프트",
|
|
"GOOGL": "알파벳",
|
|
"AMZN": "아마존",
|
|
"META": "메타",
|
|
"TSLA": "테슬라",
|
|
},
|
|
}
|
|
|
|
# Groups whose "change" is expressed in yield points / index points rather than percent
|
|
POINT_CHANGE_GROUPS = {"rates"}
|
|
|
|
GROUP_TITLES_KO: dict[str, str] = {
|
|
"indices": "주요 지수",
|
|
"futures": "야간 선물",
|
|
"rates": "미국 국채 금리",
|
|
"fx": "환율·달러",
|
|
"commodities": "원자재·크립토",
|
|
"sectors": "섹터 ETF",
|
|
"korea_linked": "한국 연관(EWY·ADR)",
|
|
"semis": "반도체",
|
|
"megacap": "빅테크",
|
|
}
|
|
|
|
|
|
def all_tickers() -> list[str]:
|
|
seen: dict[str, None] = {}
|
|
for grp in SYMBOL_GROUPS.values():
|
|
for t in grp:
|
|
seen.setdefault(t, None)
|
|
return list(seen)
|
|
|
|
|
|
def group_of(ticker: str) -> str | None:
|
|
for g, members in SYMBOL_GROUPS.items():
|
|
if ticker in members:
|
|
return g
|
|
return None
|
|
|
|
|
|
def display_name(ticker: str) -> str:
|
|
for members in SYMBOL_GROUPS.values():
|
|
if ticker in members:
|
|
return members[ticker]
|
|
return ticker
|