원하는 뉴스 및 시황 데이터 받아와(크롤링, crowling) 자신만의 주식 위험도 프로그램 만들기(1)
본문 바로가기

주식 자동매매 강의/중급반(시황 및 차트 구현)

원하는 뉴스 및 시황 데이터 받아와(크롤링, crowling) 자신만의 주식 위험도 프로그램 만들기(1)

반응형

앞선 강의에서 ADR 데이터를 받아와 아주 작은 GUI에 전시하는 것을 코딩하셨습니다. 이번엔 조금 발전 지켜서 아주 큰 GUI에 원하는 모든 데이터를 전시하고 분석하여 투자 위험도를 판단할 것입니다.

 

강의에 앞서 전체 강의는 하나의 사이트에서만 받아오는 예제를 진행할 것이며, 나머지는 각 독자께서 원하는 값을 받아와 취합하시면 됩니다. 그리고 기초반을 듣지 않으시고 GUI만 띄우시고 싶으신 분들은 제일 마지막의 코드만 확인하셔도 됩니다.

 

1. 데이터를 받아오기 위한 기본 구조 빌드업 하기

 기초반에서 강의했던 내용을 재 강의 해 드리겠습니다. 앞서 이해하시고 자신만의 프로그램 만드신 분들은 가볍게 읽어 보시면 될 것 같습니다.

 

 [링크 : 강의 모음] : 기초반 강의 모음

 [링크 : 유튜브 강의]

 

 (1) News_all.py 스크립트 생성

 아래 그림을 보시면 Main ui에서 시황 파악하기 버튼을 클릭하면 시황 데이터를 넣을 ui가 새 화면으로 뜨는 것을 확인할 수 있습니다.

시황파악 ui 띄우기
시황파악 ui 띄우기

그러면 ALBA2.ui를 띄울 수 있는 스크립트를 생성 및 코딩을 진행해 보겠습니다.

 

News_all.py 스크립트 생성
News_all.py 스크립트 생성

 ① GUI를 사용하기위한 함수 가져오기

  - from PyQt5.QtWidgets import * : 그래픽 제어를 위한 클래스

  - from PyQt5 import uic               : ui 로드를 위한 클래스

 ② 크롤링을 위한 스레드

  앞으로 Qthread_4에 크롤링을 위한 스레드를 생성할 것입니다.

 ③ 크롤링 된 데이터를 전시하기 위한 GUI 불러오기

  아래 그림과 같이 우리가 불러올 ALBA2.ui를 QT Designer에서 만듭니다. (GUI 만드는 법에 대해서는 많이 설명드렸지만 혹시 기억나지 않는 분을 위해서 관련 링크 걸어 드립니다.[링크 : ui 만들기] )

  파일에 새 프로젝트를 생성하시고 원하는 크기만큼 ui를 확장시킵니다. 그리고 우선 push 버튼을 우측 상단에 생성하신 후 objectName을 설정해 주세요. 닫기를 위한 object입니다.

 

QT Designer에서 ALBA2.ui 만들기
QT Designer에서 ALBA2.ui 만들기

  -  form_secondwindow = uic.loadUiType("ALBA2.ui")[0] : 앞서 우리가 만든 ALBA2.ui를 파이썬이 사용할 수 있게 form_secondwindow에 객체화시킵니다.

 ④ 화면을 띄울 수 있는 클래스 만들기

 클래스 안의 구조와 함수 설명은 [링크 : 기초반 7강]에 아주 자세히 설명되어 있습니다.

 - class secondwindow() : secondwindow클래스 생성 후 GUI 사용을 위해 부모 클래스를 상속받습니다.

 - def __ini__(self) : 함수를 생성하고 초기화합니다.

 - super()__init__() : 부모 클래스의 인자를 사용하기 위해 초기화합니다.

 - self.initUi() : Ui를 초기화합니다.

 - self.show() : 초기화하고 만들어진 ALBA2.ui를 모니터에 전시합니다.

반응형

 - self.pushButton.clicked.connect(self.btn_second_to_main) :  pushButton을 클릭하면 self.btn_second_to_main 함수가 실행되게 합니다. pushButton은 앞서 ALBA2.ui에서 만든 ui이며, 프로그램을 닫기 위해 만든 것입니다.

 - def btn_second_to_main(self)

      self.close

  버튼을 클릭하면 ALBA2.ui가 close(닫힘)되게 됩니다.

2. 생성한 secondwindow클래스 Main Window에서 실행하기

  (1) secondwindow의 ALBA2.ui를 열기위한 push 버튼(시황 파악하기) CRR(objectName) 생성하기

ALBA2.ui를 열기위한 push 버튼 CRR(objectName) 생성하기
ALBA2.ui를 열기위한 push 버튼 CRR(objectName) 생성하기

(2) main 스크립트에 secndwindow 클래스 기능 가져오기

main 스크립트에 secndwindow 클래스 기능 가져오기
main 스크립트에 secndwindow 클래스 기능 가져오기

(3) 시황파악하기 pushButton인 CRR 클릭 시 ALBA2.ui가 전시되기 위한 함수 self.Crolling 시작하기

ALBA2.ui가 전시되기 위한 함수 self.Crolling 시작하기
ALBA2.ui가 전시되기 위한 함수 self.Crolling 시작하기

(4) def Crolling(self) 함수 이벤트 발생 시 secondwindow() 실행하기

def Crolling(self) 함수 이벤트 발생 시 secondwindow() 실행하기
def Crolling(self) 함수 이벤트 발생 시 secondwindow() 실행하기

 위의 4가지를 완성하시면, main 스크립트에서 우리가 만든 secndwindow 클래스를 실행할 수 있습니다.

 

3. 요약

 오늘은 앞으로 우리가 검색하여 획득한 뉴스, 시황, 각 경제지수 지표 등을 띄울 수 있는 두 번째 GUI(ALBA2.ui) 기본 구조를 세팅하였습니다. 특히 스크립트 및 ui를 생성하였으며, 두 정보를 합치는 작업까지 완료하였습니다. 다음 강의에서는 네이버나 기타 사이트에서 특정 데이터를 받아와 위험도 판단이 가능한 데이터를 ALBA2.ui에 전시해 보겠습니다.

 그리고 설명을 최대한 간소하게 해 놓았는데 기초반의 [링크 : ui 만들기],  [링크 : 기초반 7강]은 숙지해 주시기 바랍니다. 이해가 되지 않는 부분은 질문해 주시면 수정 및 보완 또는 답변 달아 드립니다.

혹시 기초반을 듣지 않으신 분들이 코딩을 하기에 벅차시다면... 아래와 같이 if __name....을 추가하시면 어느 스크립트에서든 gui화면을 띄울 수 있습니다.

 

* 기초반을 듣지 않으신 분들을 위한 코드

import sys                        # system specific parameters and functions : 파이썬 스크립트 관리
from PyQt5.QtWidgets import *     # GUI의 그래픽적 요소를 제어       하단의 terminal 선택, activate py37_32,  pip install pyqt5,   전부다 y
from PyQt5 import uic             # ui 파일을 가져오기위한 함수

###################################################
from Qthread_4 import Thread4      # thread
###################################################

form_secondwindow = uic.loadUiType("ALBA2.ui")[0]

class secondwindow(QMainWindow, QWidget, form_secondwindow):
    def __init__(self):
        super(secondwindow, self).__init__()
        self.initUi()

        self.check_ADR()

        self.pushButton.clicked.connect(self.btn_second_to_main)

    def initUi(self):
        self.setupUi(self)

    def btn_second_to_main(self):
        self.close()  # 클릭시 종료됨.

    def check_ADR(self):
        print("ADR 정보 가져오기")
        h4 = Thread4(self)
        h4.start()

if __name__ == '__main__':  # import된 것들을 실행시키지 않고 __main__에서 실행하는 것만 실행 시킨다.
            # 즉 import된 다른 함수의 코드를 이 화면에서 실행시키지 않겠다는 의미이다.

    app = QApplication(sys.argv)  # PyQt5로 실행할 파일명을 자동으로 설정, PyQt5에서 자동으로 프로그램 실행
    CH = secondwindow()  # Main 클래스 myApp으로 인스턴스화
    CH.show()  # myApp에 있는 ui를 실행한다.
    app.exec_()  # 이벤트 루프

 

 

 

 

 

반응형

.link_tit