Prompt Detail:
아래는 주식 시스템 요건에 따라 작성된 파이썬 코드입니다. 코드는 PyQt5와 pykrx 패키지를 사용하여 작성되었습니다.
pythonimport sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5 import uic
from pykrx import stock
import pandas as pd
class StockSearchApp(QMainWindow):
def __init__(self):
super().__init__()
uic.loadUi("Stocksearch.ui", self)
self.pushButton.clicked.connect(self.search_stocks)
def search_stocks(self):
# PER, DIV 값을 가져옴
per_threshold = float(self.lineEdit.text())
div_threshold = float(self.lineEdit_2.text())
# 코스피200 구성종목 리스트 가져오기
kospi200 = stock.get_index_portfolio_deposit_file("1028") # 1028: 코스피200 코드
kospi200_codes = kospi200['종목코드']
# 종목별 PER, DIV, OHLCV, 펀더멘털 지표 가져오기
result = []
for code in kospi200_codes:
try:
df = stock.get_market_ohlcv_by_date("20230324", "20240324", code)
fundamental = stock.get_market_fundamental_by_date("20240324", "20240324", code)
if fundamental['PER'][0] >= per_threshold and fundamental['DIV'][0] >= div_threshold:
ma5 = df['종가'].rolling(window=5).mean()
ma20 = df['종가'].rolling(window=20).mean()
ma60 = df['종가'].rolling(window=60).mean()
if all(df['종가'].iloc[-3:] > ma5.iloc[-3:]) and all(df['종가'].iloc[-3:] > ma20.iloc[-3:]) and all(df['종가'].iloc[-3:] > ma60.iloc[-3:]):
upper, _, lower = stock.get_bollinger_bands(df['종가'], window=20, width=2)
if df['종가'].iloc[-1] < upper.iloc[-1] and df['종가'].iloc[-1] > lower.iloc[-1]:
name = stock.get_market_ticker_name(code)
result.append((code, name))
except Exception as e:
pass
# 결과 출력
if result:
text = ""
for item in result:
text += f"{item[0]} ({item[1]})\n"
self.textEdit.setText(text)
else:
self.textEdit.setText("조건에 맞는 주식이 없습니다.")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = StockSearchApp()
window.show()
sys.exit(app.exec_())
위 코드는 Stocksearch.ui를 GUI로 사용하여 주식 검색 시스템을 구현합니다. 요건에 맞게 코스피200 구성종목을 가져와서 주식별로 PER, DIV 등을 분석하고, 이동평균선과 볼린저 밴드를 적용하여 조건에 맞는 주식을 검색합니다. 결과는 textEdit에 출력됩니다.
Add a comment