장 마감 전이나 특정 사건이 있을 경우 계좌를 비우고 싶은 경우가 많이 생기게 됩니다. 특히, 물가지수 등을 발표할 때 시장 변동성이 크기 때문에 정해진 시간에 계좌에 있는 모든 종목을 매도할 수 있는 알고리즘이 필요합니다.
알고리즘 구성을 크게 아래와 같습니다.
1. 시간 관련 그래픽 GUI 만들기
2. 시간관련 그래픽 GUI에 특정 시간 값 저장 및 불러오기
(1) 특정 값 입력 및 불러오기
(2) 특정 값 데이터 베이스 만들기
3. 코딩하기
(1) 시간 스레드 구성하기
(2) 시간 스레드 안에 특정 조건에서 계좌에 있는 모든 종목 매도 코딩하기
위의 코딩과정은 초급반 및 중급반에 이미 한번 다뤘습니다. 중급반에서는 링크: 12강부터 한번 보셔도 될 것 같습니다.
자 그럼 GUI관련 부터 한번 설명드리겠습니다. 이미 한번 다뤘던 부분을 반복하기 때문에 알고 계신 분들은 리마인드 하신다고 생각하면 될 것 같으며, 처음 보시는 분들은 기초반 또는 중급반을 수강하시기 바랍니다(무료입니다).
1. 시간 관련 그래픽 GUI 만들기
아래 그림과 같이 QT Designer에서 Time Edit 생성 후 원하는 위치에 도킹시킵니다. 이때, object_name은 본인이 원하시는 것으로 하면 되는데 저 같은 경우에는 stop_time이라 정의하였습니다. 혹시 QT Designer에 대해 잘 모르실 경우 블로그에서 검색해 보시면 잘 나와 있습니다.
2. 시간 관련 그래픽 GUI에 특정 시간 값 저장 및 불러오기
위의 Time Edit에 우리는 원하는 값을 넣거나 가져와야겠죠? 어떻게 하는지 간단히 알아보겠습니다. 심화 코딩은 다음 3강에서 알아보도록 하시죠.
(1) 특정 값 입력 및 불러오기
아래 코드를 보시면 2가지가 보입니다. setDisplyFormat과 setTime입니다. 2 가지가 있어야 원하는 값을 입력할 수 있습니다. setDisplyFormat의 경우 시/분/초를 나타내기 위한 것으로 아래와 같이 동일하게 입력하십시오.
그리고 stop_time에 원하는 값을 넣기 위해 setTime을 사용하며, 값을 넣을 때 반드시 QTime 함수를 사용하고 아래와 같은 예제로 집어넣습니다.
self.stop_time.setDisplayFormat('hh:mm:ss')
self.stop_time.setTime(QTime(16, 30, 00))
또한 QTime을 사용하기 위해서는 아래와 같이 QtTest 부모 클래스에서 모든 함수를 가져와야 하며, 아래 코드는 코딩하는 페이지 제일 위에 해주세요. 이 부분은 기초반에서 많이 설명드렸습니다.
from PyQt5.QtTest import * # Timer 관련 함수 가졍괴
Time Edit에 특정 값을 setDisplyFormat과 setTime을 이용해 입력했으니 우리가 코딩하는 곳에서 저 값을 불러와야겠죠? 아래의 코딩과 같이 time(). toString("HHmmss") 함수를 사용합니다.
a = self.parent.stop_time.time().toString("HHmmss") # 멈추고 싶을 때
self.stop_meme = int(a)
설명드리면, 우선 위의 코드는 스레드에 들어가기 때문에 스레드에서 부모 클래스에서 만든 GUI에 접속하기 위해서는 parent 함수를 사용하죠? parent함수 다음 stop_time의 Time Edit에 접속 후 그 값을 불러오기 위해 time(). toString("HHmmss") 함수를 사용합니다. 이때 시분초로 값을 들고 오죠. 만약 입력값이 14:30:00초라면 불러오게 되면 string(문자) 값으로 143000이 됩니다. 우리는 나중에 시간 값 a를 어디서든 사용할 수 있게 self.stop_meme에 넣게 됩니다. 이때 중요한 점은 int 즉 정수로 넣습니다. 차 후에 시간을 계속 확인할 텐데 이 값이 정수이므로 서로 비교하기 위해 int로 바꾸게 됩니다.
3. 결론 및 정리
- QT Designer를 이용해 GUI를 만들었습니다.
- GUI는 Time Edit를 이용해 만듭니다.
- Time Edit에 값을 입력하기 위해서는 setDisplyFormat과 setTime 함수를 이용합니다.
- Time Edit에 값을 불러오기 위해서는 time(). toString("HHmmss")
어찌 되었든 이번 강의에서는 간단하게 개념만 이해하시고 다음 강의에서 코딩을 시작해보시죠. 그렇다고 그냥 넘어가시면 안 됩니다. 감사합니다.
'주식 자동매매 강의 > 중급반(시황 및 차트 구현)' 카테고리의 다른 글
[주식자동매매 프로그램 특강 2편] 정해진 시간에 계좌에 있는 모든 종목 매도하기(코딩편) (20) | 2022.11.19 |
---|---|
키움조건식 주식자동매매 프로그램 최종 정리 (7) | 2022.09.07 |
[키움 조건검색식 주식자동매매(22)] 미체결 잔고 취소 후 재매수/매도(완강) (7) | 2022.09.06 |
[키움 조건검색식 주식자동매매(21)] 기존 계좌에 있는 종목 분할 매수/매도 하기 (6) | 2022.09.04 |
[키움 조건검색식 주식자동매매(20)] 금일 매수한 종목에 대하여 분할 손절하기 (14) | 2022.09.03 |