주식자동매매 4강. GUI 프리징(freezing) 해결을 위한 프로그램 구조
본문 바로가기

주식 자동매매 강의/기초반(모든 코딩의 뿌리)

주식자동매매 4강. GUI 프리징(freezing) 해결을 위한 프로그램 구조

반응형

자동매매 프로그램 제작 시 가장 중요한 것은 프로그램이 멈추지 않고 잘 돌아가는(올바른 매수/매도) 것입니다. 즉 프리징(freezing)되지 않고 돌아갈 수 있는 1% 방법을 공개해 드립니다. 본 강의 코드는 8강에 있습니다.

 

[유튜브 강의, 링크]와 같이 보시면 많은 도움이 되실 겁니다.


아래 모든 내용을 다 이해하기 보다 아~ 이런 거구나 정도로 아셔도 강의 진행에는 지장이 없습니다.
(물론 이해하시면 진도가 엄청 빠르겠죠)
앞으로 강의에서는 코드 등도 다 공개해드리면서 기본 개념을 계속 설명드릴 테니 너무 부담 가지지 마십시오.

1. 프로그램 제작 구조

 


● 인터넷에 돌고 있는(강의하는) 99%의 프로그램 : 하나의 화면에서 모든 일을 처리합니다.
- 행하는 일 : 매수/매도/검색/이동 등등...
- 장점 : 프로그램 제작하기가 매우 쉽다.
- 단점 : 프로그램 처리 과정 중 하나라도 엉키면 모든 작업 중지, 여러 가지 일을 동시에 처리 불가하다.
(매수하면서 종목 검색 등의 일을 동시에 처리 못함. 엄청난 단점)

● ALBA 제작 프로그램 : 하나의 화면이 여러 개의 분할 화면을 컨트롤합니다.(아래 그림 참조)
- 장점 : 다양한 일을 동시에 처리 가능하다. GUI 프리징이 발생하지 않는다.
(매수/매도/종목검색 모든 행위를 동시해 할 수 있다. 엄청난 장점)
- 단점 : 프로그램 제작이 어렵다. 기본 지식이 없으면 불가능하다. 전공자가 아니면 접근이 힘들다.
- 단점 극복 방안 : ALBA 강의를 정주행 한다.

스레드 설명 보조 그림
스레드 설명 보조 그림

시중에 돌고 있는 모든 프로그램은 스레드에 대한 고려가 되어 있지 않습니다. 스레드란 쉽게 말해 여러 가지 일을 분산해서 하는 것입니다. 1인 다역 기업(유투버 혼자 영상편집 등을 다하는 행위), 1인 리더 및 다수의 팀원(유투버가 콘텐츠 아이디어를 내고 나머지 부가적인 일은 팀원이 하는 행위) 중 2번째 말씀드린 것이 스레드와 동일한 개념입니다. 1과 2의 방법이 모두 "공짜"라면 뭐가 더 효율적을 까요?

 


즉, 스레드를 적용하지 않은 프로그램은 현직에서는 쓸모가 전혀 없습니다. 지극히 느린 연산량과 재한 된 기능, 효율적이지 못한 프로그램인 것이죠. 이러한 스레드를 고려하지 않고 여러분들이 자동매매 프로그램을 만드셨다면 더 큰 문재는 단순히 효율 저하뿐만 아니라 자동매매 중 아무 이유 없이 갑자기 "무조건" 멈추게 되어 있습니다.

그러면 왜? 스레드 개념을 넣지 않은 것일까요?. 답은 3가지입니다.

첫째 : 스레드를 설명할 만큼 전공자가 아니라는 뜻입니다. 일반적인 개념으로는 절대 스레드 구현이 불가능합니다. 특히 키움 등의 Open API와 같이 고려된 스레드는 정말 많은 기본 개념이 필요합니다. 그런 분들이 프로그램 제작하면 반드시 한계에 부딪히고 블로그 등을 찾아보실 건데 절대 올바른 설명이 없습니다. 설명하기도 상당히 어렵기 때문이죠.

둘째 : 스레드를 알아도 설명하기가 어려울 뿐만 아니라 듣는 청취자도 이해하기 어렵습니다. 즉, 아무리 비효율적인 프로그램 만드는 법을 강의하더라도 일단 쉽게 이해하는 것이 우선이고 쉽게 이해해야 소비가 되기 때문이죠.

셋째 : 싱글턴의 이해. 이 부분은 대 주재로 넘어가 설명드리겠습니다.

일반적으로 위와 같은 이유로 스레드 개념이 들어간 프로그램을 강의하지 않는데 프로그래머 ALBA는 여러분들에게 "쓸모없는 프로그램" 만드는 법을 강의해 드릴 수 없습니다. 느리더라도 여러분들이 올바른 프로그램을 만들고 이해할 수 있도록 최대한 쉽게 풀어 강의하도록 하겠습니다.

아래 책은 제가 보고 공부한 서적으로 자동매매 구축시 상당히 도움이되는 기초 서적입니다.
특히 주식 거래 시스템구축은 기본이 탄탄하기 때문에 구매하셔서 공부하시는 것을 추천드립니다.


이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다

 

2. 싱글턴 : 절대 언어

키움 Open API는 하나의 계정에 1번의 로그인만 가능하게 재한 되어 있습니다. 다중 로그인이 된다면 상당히 많은 트래픽이 소모되어 네트워크 관리가 매우 어렵게 되겠죠? 그러면 이러한 문재점이 우리 스레드 기반 프로그램에게 주는 어려움이 무엇인지 알아보도록 하겠습니다.

싱글턴 설명 화면 싱글턴 설명 화면
싱글턴 설명 화면

첫째 : 위 오른쪽 그림을 보시면 Leader가 팀원들에게 명령을 내리는데 팀원 간의 소통은 되지 않은 상태입니다. 각 팀원이 무슨일을 어떻게 끝냈는지도 모르는 상태에서 다른 팀원이 동시에 일을 한다면, 상당히 큰 문재가 발생할 수 있습니다. 예로 a가 주문을 넣었는데 b도 똑같은 주문을 넣는 것이죠. 이건 반드시 해결되어야 합니다.

둘째 : Leader와 팀원간 의사소통(통신)을 하기 위해서는 Open API 로그인이 필요하고 키움에서는 1번만 로그인이 가능하게 했습니다. 팀원 모두 로그인이 되어 있다면 언제든지 Leader에게 임무를 할당받거나 보고 할 수 있습니다. 하지만 키움에서는 1번의 로그인만 가능하므로... Leader가 한 명의 팀원과 소통하고 있으면 다른 팀원들은 절대 임무를 하달받거나 보고를 할 수 없게 됩니다. 치명적인 단점이죠.

이것을 해결하는 마법의 방법이 바로 "싱글턴"입니다.
싱글턴이란 아래 그림과 같이 Leader와 팀원이 서로 실시간 소통할 수 있는 창구입니다. 즉, 창구에 모든 데이터가 저장되기 때문에 리더와 팀원 간의 소통이 실시간으로 되는 거이죠
이것을 쉽게 설명하는 것이 MMORPG 게임입니다. 우리 일반 유저들은 각각 서버에 로그인을 해서 게임을 플레이하죠? 그러면 메인 서버에서는 각 유저들이 로그인했는지 알아야 합니다. 이때 대입되는 개념이 싱글턴이고 각 유저의 정보가 싱글턴에 저장되어 메인 서버는 유저의 로그인 정보를 실시간 확인하여 특정 데이터를 처리합니다.

싱글턴 개념
싱글턴 개념

3. 스레드(Thread)와 싱글턴이 고려된 ALBA 프로그램

아래 그림을 보시면 Login_Machine.py에서 모든 명령을 내리고 그 명령을 Qthread1~12가 받아 임무를 수행합니다.
그림에도 나와 있지만 Qthread마다 각각의 임무가 아래와 같이 할당되어 있습니다.
- Qthread 1 : 계좌평가 잔고 내영 가져오기
- Qthread 2 : 등락률 상위종목 가져오기
- Qthread 3 : 기관/외국인 3일 연속 매수
..... 등등등

반응형

스레드가 고려된 ALBA 프로그램
스레드가 고려된 ALBA 프로그램


다음 강의부터는 진~짜 강의를 시작하려고 했으나.... GUI가 무엇인지 선행학습을 해야 할 것 같습니다. GUI가 무엇인지 알아보고 코딩해보도록 합니다. 코드는 공개해 드리니 천천히 따라오시면 되고 강의가 좋았다면 구독 부탁드립니다. 많은 힘이 됩니다. 감사합니다.

5강 바로가기: 5강에서는 GUI의 필요성에 대하여 말씀 드리겠습니다.

반응형

.link_tit