glorifiedjx commited on
Commit
60cc4fd
ยท
verified ยท
1 Parent(s): 7bb6d85

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -17
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 = 'KOSDAQ'; name = TICKER
457
- try:
458
- kospi = fdr.StockListing('KOSPI')
459
- kosdaq = fdr.StockListing('KOSDAQ')
460
- if TICKER in kospi['Code'].values:
461
- market = 'KOSPI'
462
- name = kospi[kospi['Code'] == TICKER]['Name'].values[0]
463
- elif TICKER in kosdaq['Code'].values:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
464
  market = 'KOSDAQ'
465
- name = kosdaq[kosdaq['Code'] == TICKER]['Name'].values[0]
466
- print(f" {name} ({TICKER}) / {market}")
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__":