Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -437,7 +437,7 @@ def run_ma240(ticker):
|
|
| 437 |
# ============================================================
|
| 438 |
# 3) ์ ๋๋งค๋ (RSยท์ด๊ฒฉ) (sell_+10_debug.py ๋ก์ง ๊ทธ๋๋ก)
|
| 439 |
# ============================================================
|
| 440 |
-
def run_sell(ticker):
|
| 441 |
buf = io.StringIO()
|
| 442 |
try:
|
| 443 |
with contextlib.redirect_stdout(buf):
|
|
@@ -453,19 +453,35 @@ def run_sell(ticker):
|
|
| 453 |
print(f"๋ถ์ ์ข
๋ชฉ: {TICKER}")
|
| 454 |
print("=" * 70)
|
| 455 |
print("\n[1/3] ์์ฅ ํ๋ณ ์ค...")
|
| 456 |
-
market =
|
| 457 |
-
|
| 458 |
-
|
| 459 |
-
|
| 460 |
-
|
| 461 |
-
|
| 462 |
-
|
| 463 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 464 |
market = 'KOSDAQ'
|
| 465 |
-
|
| 466 |
-
|
| 467 |
-
except:
|
| 468 |
-
print(f" ํ๋ณ ์คํจ -> {market} ๊ฐ์ ")
|
| 469 |
|
| 470 |
print("\n[2/3] ๋ฐ์ดํฐ ๋ก๋ ์ค...")
|
| 471 |
stock_df = fdr.DataReader(TICKER, DATA_START, ANALYZE_TO)
|
|
@@ -917,7 +933,7 @@ SELL = "์ ๋๋งค๋ (RSยท์ด๊ฒฉ)"
|
|
| 917 |
CHOICES = [VCP_DETECT, VCP_SELL, BOLL, MA240, SELL]
|
| 918 |
|
| 919 |
|
| 920 |
-
def analyze(choice, ticker, diag_date):
|
| 921 |
ticker = (ticker or "").strip()
|
| 922 |
if not ticker:
|
| 923 |
return "ํฐ์ปค ๋ฒํธ(6์๋ฆฌ)๋ฅผ ์
๋ ฅํ์ธ์.\n์: 005930(์ผ์ฑ์ ์), 009150(์ผ์ฑ์ ๊ธฐ)"
|
|
@@ -932,7 +948,7 @@ def analyze(choice, ticker, diag_date):
|
|
| 932 |
if choice == MA240:
|
| 933 |
return run_ma240(ticker)
|
| 934 |
if choice == SELL:
|
| 935 |
-
return run_sell(ticker)
|
| 936 |
return "๋ถ์ ์ข
๋ฅ๋ฅผ ์ ํํ์ธ์."
|
| 937 |
|
| 938 |
|
|
@@ -949,11 +965,15 @@ with gr.Blocks(title="์ฃผ์ ๋๋ฒ๊ฑฐ", theme=gr.themes.Soft()) as demo:
|
|
| 949 |
label="VCP ์ง๋จ ๋ ์ง (์ ํ ยท 'VCP ๋ํ ๊ฐ์ง'์์๋ง ์ฌ์ฉ)",
|
| 950 |
placeholder="์: 2025-12-16 (๋น์๋๋ฉด ์ง๋จ ์๋ต)",
|
| 951 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 952 |
btn = gr.Button("๋ถ์ ์คํ", variant="primary")
|
| 953 |
out = gr.Code(label="๊ฒฐ๊ณผ", lines=30)
|
| 954 |
|
| 955 |
-
btn.click(analyze, inputs=[choice, ticker, diag_date], outputs=out)
|
| 956 |
-
ticker.submit(analyze, inputs=[choice, ticker, diag_date], outputs=out)
|
| 957 |
|
| 958 |
|
| 959 |
if __name__ == "__main__":
|
|
|
|
| 437 |
# ============================================================
|
| 438 |
# 3) ์ ๋๋งค๋ (RSยท์ด๊ฒฉ) (sell_+10_debug.py ๋ก์ง ๊ทธ๋๋ก)
|
| 439 |
# ============================================================
|
| 440 |
+
def run_sell(ticker, market_override="์๋"):
|
| 441 |
buf = io.StringIO()
|
| 442 |
try:
|
| 443 |
with contextlib.redirect_stdout(buf):
|
|
|
|
| 453 |
print(f"๋ถ์ ์ข
๋ชฉ: {TICKER}")
|
| 454 |
print("=" * 70)
|
| 455 |
print("\n[1/3] ์์ฅ ํ๋ณ ์ค...")
|
| 456 |
+
market = None; name = TICKER
|
| 457 |
+
mo = (market_override or "์๋").strip()
|
| 458 |
+
if mo in ('KOSPI', 'KOSDAQ'):
|
| 459 |
+
market = mo
|
| 460 |
+
print(f" (์๋ ์ง์ ) {market}")
|
| 461 |
+
else:
|
| 462 |
+
try:
|
| 463 |
+
for mk in ('KOSPI', 'KOSDAQ'):
|
| 464 |
+
lst = fdr.StockListing(mk)
|
| 465 |
+
code_col = next((c for c in lst.columns
|
| 466 |
+
if str(c).lower() in ('code', 'symbol', '์ข
๋ชฉ์ฝ๋')), None)
|
| 467 |
+
name_col = next((c for c in lst.columns
|
| 468 |
+
if str(c).lower() in ('name', '์ข
๋ชฉ๋ช
', 'korname')), None)
|
| 469 |
+
codes = (lst[code_col] if code_col is not None else lst.index).astype(str)
|
| 470 |
+
hit = (codes == TICKER)
|
| 471 |
+
if bool(hit.any()):
|
| 472 |
+
market = mk
|
| 473 |
+
if name_col is not None:
|
| 474 |
+
name = str(lst.loc[hit, name_col].values[0])
|
| 475 |
+
break
|
| 476 |
+
if market is None:
|
| 477 |
+
market = 'KOSDAQ'
|
| 478 |
+
print(f" ๋ชฉ๋ก์์ ๋ชป ์ฐพ์ -> KOSDAQ ๊ฐ์ (์ '์์ฅ' ๋ฉ๋ด์์ ์ง์ ์ ํ ๊ฐ๋ฅ)")
|
| 479 |
+
else:
|
| 480 |
+
print(f" {name} ({TICKER}) / {market}")
|
| 481 |
+
except Exception as e:
|
| 482 |
market = 'KOSDAQ'
|
| 483 |
+
print(f" ํ๋ณ ์คํจ({type(e).__name__}) -> KOSDAQ ๊ฐ์ . "
|
| 484 |
+
f"์ '์์ฅ' ๋ฉ๋ด์์ KOSPI/KOSDAQ๋ฅผ ์ง์ ๊ณจ๋ผ์ค.")
|
|
|
|
|
|
|
| 485 |
|
| 486 |
print("\n[2/3] ๋ฐ์ดํฐ ๋ก๋ ์ค...")
|
| 487 |
stock_df = fdr.DataReader(TICKER, DATA_START, ANALYZE_TO)
|
|
|
|
| 933 |
CHOICES = [VCP_DETECT, VCP_SELL, BOLL, MA240, SELL]
|
| 934 |
|
| 935 |
|
| 936 |
+
def analyze(choice, ticker, diag_date, market_sel):
|
| 937 |
ticker = (ticker or "").strip()
|
| 938 |
if not ticker:
|
| 939 |
return "ํฐ์ปค ๋ฒํธ(6์๋ฆฌ)๋ฅผ ์
๋ ฅํ์ธ์.\n์: 005930(์ผ์ฑ์ ์), 009150(์ผ์ฑ์ ๊ธฐ)"
|
|
|
|
| 948 |
if choice == MA240:
|
| 949 |
return run_ma240(ticker)
|
| 950 |
if choice == SELL:
|
| 951 |
+
return run_sell(ticker, market_sel)
|
| 952 |
return "๋ถ์ ์ข
๋ฅ๋ฅผ ์ ํํ์ธ์."
|
| 953 |
|
| 954 |
|
|
|
|
| 965 |
label="VCP ์ง๋จ ๋ ์ง (์ ํ ยท 'VCP ๋ํ ๊ฐ์ง'์์๋ง ์ฌ์ฉ)",
|
| 966 |
placeholder="์: 2025-12-16 (๋น์๋๋ฉด ์ง๋จ ์๋ต)",
|
| 967 |
)
|
| 968 |
+
market_sel = gr.Dropdown(
|
| 969 |
+
choices=["์๋", "KOSPI", "KOSDAQ"], value="์๋",
|
| 970 |
+
label="์์ฅ (์ ๋๋งค๋์ฉ ยท ์๋ ํ๋ณ ์คํจ ์ ์ง์ ์ ํ)",
|
| 971 |
+
)
|
| 972 |
btn = gr.Button("๋ถ์ ์คํ", variant="primary")
|
| 973 |
out = gr.Code(label="๊ฒฐ๊ณผ", lines=30)
|
| 974 |
|
| 975 |
+
btn.click(analyze, inputs=[choice, ticker, diag_date, market_sel], outputs=out)
|
| 976 |
+
ticker.submit(analyze, inputs=[choice, ticker, diag_date, market_sel], outputs=out)
|
| 977 |
|
| 978 |
|
| 979 |
if __name__ == "__main__":
|