< 주식 변동성 돌파 전략 백테스팅 프로그램 >





지난 포스트에서 "주가 일봉 데이터 저장 프로그램" 코드 설명과 프로그램 파일을 게시했다.  


1. "프로그램 개발 개요"

2. "프로그램 DB 설계 및 구현"

3. "키움 OPEN API 구현"

4. "프로그램 기능 구현"

5. "프로그램 GUI 구현"

6. "주가 일봉 데이터 저장 프로그램 코드 및 파일"


이번에는 "변동성 돌파 전략"을 내가 원하는 종목에 특정 값을 넣어서 백테스트한 후 차트로 표시해주는 프로그램을 개발해봤다. 이전 포스트에서 설명한 "주가 일봉 데이터 저장 프로그램" 보다 코드가 길고 시간도 별로 없어서 코드 설명은 생략한다. 대신 코드는 프로그램과 함께 이 포스트 맨 아래 첨부파일로 게시했다. 


"변동성 돌파 전략" 에 대해 모른다면 아래 링크된 블로그에서 보길 바란다.


stock79.tistory.com/77





< 프로그램 개요 >


"주식 변동성 돌파 전략 프로그램"은 특정 주식을 일정 기간동안 변동성 돌파 전략에 의거해 매수/매도 후 누적 수익률을 차트로 보여주는 백테스팅 프로그램이다. 사용자는 백테스팅하기 원하는 주식과 기간을 설정할 수 있다. 위 프로그램의 변동성 돌파 전략 알고리즘은 아래와 같다.


매수 : ( 전일 고가 - 전일 저가 ) * Scope + 시초가 <= 현재가   [ Scope : 0.2 ~ 1.4 (0.1 간격) ]

* ( 전일 고가 - 전일 저가 )가 0 이상이어야 함.

매도 :  다음 날 시초가


위 알고리즘에 의해 종목을 백테스팅한다. Scope는 사용자가 설정할 수 있으며 여러 값을 동시에 설정해 Scope 값에 따른 백테스팅 결과를 차트로 비교할 수 있다. 별도로 슬리피지(수수료 및 기타)를 사용자가 임의로 설정할 수 있다. 차트를 클릭하면 해당 시점의 날짜와 그 때까지의 수익률을 볼 수 있다. 





< 프로그램 설명 >


1. "주식 변동성 돌파 전략 프로그램"은 키움 OPEN API와 MySQL DB가 설치되있어야 한다. DB 존재 이유는 매번 방대한 데이터를 네트워크를 받아 계산하면 시간이 오래 걸리기 때문에 DB를 이용했다. DB를 이용하면 매번 계산할 필요 없이 빠르게 백테스팅 결과 값을 불러올 수 있다. MySQL을 이용하기 때문에 MySQL 비밀번호를 무조건 먼저 입력해야 한다. 



2. 백테스팅할 종목 코드를 입력하고 "분석 가능 여부"를 누른다. 시간이 지나면 아래 사진과 같이 종목 코드에 해당하는 종목명과 백테스팅할 수 있는 기간이 나온다. 이 기간은 상장일부터 프로그램 실행 하루 전날로 설정된다. 




3. 백테스팅 한다. 백테스팅 방법은 두 가지가 있다.


3-1. 백테스팅할 기간과 위에서 제시한 Scope, Slippage 값을 설정한 후 백테스팅 버튼을 누른다. 누르면 아래와 같이 차트가 나온다. 참고로 "buy and hold"는 사용자가 입력한 시작일에 주식을 매수에서 계속 가지고 있을 경우이다. 



3-2. "3-1" 상태에서 "범위"를 체크 후 활성화된 "Scope 입력 UI"와 "간격 UI"를 설정하면 여러 Scope 값에 대한 백테스팅 결과를 동시에 볼 수 있다.  예로 Scope를 0.4 ~ 1.5 로 설정하고 간격을 0.4로 설정하면 Scope 시작 값 0.4 부터 1.5까지 0.4 간격으로 백테스팅한다. 즉, Scope 값을 0.4, 0.8, 1.2로 설정해 백테스팅한다. 참고로 차트를 누르면 해당 시점의 일과 수익률이 출력된다.





< 코드 및 설치 파일 >


위 파일은 프로그램 파이썬 코드입니다. 파일을 설치하려면 이 문장을 눌러주세요 키움 OPEN API와 MySQL이 설치되어 있어야 합니다.



필자는 현업 프로그래머가 아닌 평범한 컴퓨터 공학과 대학생입니다. 따라서 개발 코드에 비효율적인 부분이 많을 수 있습니다. 수정해야할 부분이 있다면 댓글 달아주시면 감사하겠습니다.  




< 주가 일봉 데이터 저장 프로그램 >



"주가 일봉 데이터 저장 프로그램"은 종목의 일봉 데이터('시가', '고가', '저가', '종가', '거래량) 를 DB 또는 엑셀에 저장한다. 물론 일봉 데이터 기간은 종목의 상장 이후로 한다. 종목 뿐만 아니라 코스피 지수, 코스닥 지수 데이터, KODEX 코스닥 150 레버리지 같은 ETF도 추가로 저장할 수 있다. DB를 사용하지 않고 엑셀로도 데이터 저장이 가능해 DB에 대해 몰라도 된다. 


  




우리는 아래 포스트들을 거쳐서 주가 일봉 데이터 저장 프로그램을 개발해봤다.


1. "프로그램 개발 개요"

2. "프로그램 DB 설계 및 구현"

3. "키움 OPEN API 구현"

4. "프로그램 기능 구현"

5. "프로그램 GUI 구현"


지금까지 배운 소스파일들과 실행파일은 아래 첨부파일에 참조했다. 


Kiwoom.py


MainFunctions.py


MainWindow.py


StockDB.py


stock_regist.ui



!!! 실행파일 ( 기본적으로 pc에 키움 API가 설치되 있어야 한다. DB를 사용한다면 MySQL도 설치되 있어야 한다. 압축을 푼 다음 "MainWindow.exe" 파일을 실행하면 된다.)





참고로 많은 예외 처리를 하지 않았기 때문에 프로그램을 비정상적으로 컨트롤 하면 종료가 될 것이다. 범용적인 프로그램이 아니기에 예외 처리 하지 않았다. 


필자는 현업 프로그래머가 아닌 평범한 컴퓨터 공학과 대학생입니다. 따라서 개발 코드에 비효율적인 부분이 많을 수 있습니다. 수정해야할 부분이 있다면 댓글 달아주시면 감사하겠습니다.  


+ Recent posts