더북(TheBook)

RSIStrategy 클래스를 살펴보면 QThread를 상속받고 있습니다. 앞서 API를 요청하고 응답을 기다리는 도중에 다른 작업을 수행할 수 있다고 설명했는데요. 이를 위해 PyQt5 패키지의 QThread를 사용해야 하기 때문입니다.

QThread를 상속하는 RSIStrategy 클래스에서 QThreadrun 함수를 재정의하여 키움 API를 이용하는 작업들과 병행할 수 있도록 만들겠습니다. run 함수는 실질적으로 전략을 수행하는 곳이라고 생각하면 될 것 같습니다.

생성자 함수(__init__) 안에 등장하는 QThread.__init__(self)QThread를 사용하는 데 필요한 초기화 함수라고 할 수 있습니다. 그다음 self.strategy_name = "RSIStrategy"는 전략 이름을 설정한 것으로, 전략이 많아지면 데이터베이스 이름이나 변수들을 구분하는 데 사용할 수 있습니다.

이후 self.kiwoom = Kiwoom() 코드로 키움 API를 이용할 수 있는 객체를 만들어 self.kiwoom에 저장했습니다. 이제 Kiwoom.py 파일에서 만든 함수를 RSIStrategy 클래스 안에서 호출할 수 있습니다. 예를 들어 삼성전자의 일봉을 얻어 오고 싶다면 다음과 같이 사용할 수 있습니다.

price_df = self.kiwoom.get_price_data("005930")

계속해서 살펴보면 클래스 생성자 함수(__init__)와 이름이 비슷한 init_strategy 함수를 생성자 안에서 호출하고 있습니다. 이 함수는 자동매매에 필요한 기능들을 초기화합니다. 객체가 생성될 때 호출되는 생성자 안에서 초기화를 수행해도 될 것 같지만 따로 함수를 만드는 이유는 객체가 생성된 이후에도 초기화가 필요할 수 있기 때문에 별도의 함수를 두었습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.