개발 이야기/주식 자동 매매 프로그램

키움 증권 API를 이용하여 주식 자동 매매 프로그램 개발하기 - 그랜빌의 매수 신호를 이용하여 포트폴리오 구성하는 방법 [Python]

제이온 (Jayon) 2021. 1. 27.

 

 

안녕하세요? 코딩중독입니다.

 

저번 시간에는 코스닥의 전체 종목의 일봉 데이터를 받아오는 방법에 대해서 알아 보았습니다. 오늘은 받아온 일봉 데이터 중에서 그랜빌의 매수 신호 제4법칙을 이용하여 매수하기에 유망한 종목으로 포트폴리오를 구성해 보겠습니다.

 

 

그랜빌의 매수 신호 제4법칙이란?

조셉 그랜빌이 고안한 8원칙 중에 제4원칙에 해당하는 조건으로, 가격이 급락하다가 다시 회귀하는 시점을 나타냅니다.

 

 

출처 : https://marginfan.com/lecture_chart/4129

 

 

빨간색 직선으로 표시한 부분은 장기 이동 평균선을 나타냅니다. 특정 종목의 차트가 어떠한 시점부터 이동 평균선의 아래에 위치하다가 다시 이동 평균선까지의 가격을 되찾는 시점을 주목하는 것입니다. 그리고 만약 오늘 그 종목의 가격이 이동 평균선에 걸쳐있다면 다음날 매수하도록 설계합니다. (걸쳐있다는 것은 특정 종목의 저가는 이동 평균선보다 아래에 있고, 고가는 위에 있는 것을 말합니다.)

 

저는 장기 이동 평균선의 기준을 120일로 잡을 것이고, 이동 평균선의 아래에 있는 기간을 20일로 잡을 것입니다. 즉, 21일 전 주식의 저가가 이동 평균선보다 높거나 같아야 하고, 오늘 주식의 저가는 이동 평균선보다 낮고 고가는 이동 평균선보다 높아야하는 것입니다. 물론, 20일 동안은 주식의 고가가 계속 이동 평균선 아래에 위치해야합니다. 추가로 더 정밀한 계산을 위해서 21일전 주식의 이동 평균선은 오늘 주식의 이동 평균선보다 아래에 있어야합니다.

 

말로는 굉장히 어려워보이는데 소스코드로 보는 것이 오히려 더 쉬울 것입니다 ㅎㅎ

 

 

전체 소스코드

 

 

 

그랜빌의 매수 신호 제4법칙 조건 설정하기

오늘은 저번 포스팅에서 작성하였던 tr_data의 else 부분에 내용을 추가만 합니다.

 

 

 

 

소스코드의 과정을 보면 총 6단계입니다. 

 

 

(1) 오늘의 120일 이동 평균선을 구한다.

 

(2) 오늘의 주가가 120일 이동 평균선의 걸치는지 확인한다.

 

(3) 과거 20일동안의 주가가 이동 평균선보다 아래에 있는지 확인한다.

 

(4) 21일 이후로 주식의 저가가 이동 평균선보다 위에 있는지 확인한다. (위에서는 딱 21일을 콕 집어서 말했지만, 사실은 21일 이후면 상관 없다.)

 

(5) 오늘의 고가가 '(4)'의 저가보다 높은지 확인하고, 오늘의 120일 이동 평균선이 '(4)'의 120일 이동 평균선보다 높은지 확인한다.

 

(6) '(5)'의 조건을 만족하는 종목을 파일에 저장한다.

 

 

이때, (6)번 과정에서 GetMasterCodeName() 함수를 사용하는데, 종목 코드를 종목 이름으로 바꿔주는 함수입니다. 그리고 파일에는 종목코드, 종목 이름, 주가에 대한 내용이 들어갑니다.

 

찬찬히 소스코드를 읽어보시면 이해가 될 것입니다.

 

 

정리

지금까지 그랜빌의 매수 신호 제4법칙을 이용하여 유망한 종목을 골라내는 방법을 알아보았습니다. 그런데, 이 부분은 방대항 일봉 데이터가 있어야 분석이 가능합니다. 그래서 저번 포스팅에서 말한 것과 마찬가지로 지금 이 상태에서 이 코드를 테스트하려고 하면 10시간이 넘습니다. 그리고 키움 증권 측에서 자정이 되면 연결을 한 번 끊는 것도 확인하였습니다.

 

따라서, 지금 이 상태에서는 DB를 구축하는 것이 현명하다고 생각합니다. 다음 시간부터는 파이썬 내장 DB인 sqlite3을 이용하여 일봉 데이터를 저장하고, 업데이트를 하는 방법에 대해서 설명하겠습니다.

 

 

출처

프로그램 동산(장용준)님이 집필하신 '손가락 하나 까딱하지 않는 주식 거래 시스템 구축' 교재를 참고하여 작성하였습니다.

 

그 외에 프로그램 동산님은 깃허브, 카페, 유튜브를 운영 중이십니다. 굉장히 도움이 되는 내용이 많으니 참고하셔도 좋을 것 같습니다.

 

(깃허브) github.com/programgarden

(유튜브) www.youtube.com/channel/UCq7fsrxP6oi6vnYgPkw92jg

(네이버 카페) cafe.naver.com/programgarden

댓글

추천 글