<2. DB 구축 (키움 open api 주식 알고리즘 테스트 프로그래밍)>


: 이번 포스트에서는 우리가 구현한 주식 알고리즘을 테스트하기 위해 필요한 데이터들을 저장할 DB를 구축할 것이다. KODEX 코스닥 150 레버리지 일봉, 분봉 데이터를 이용해 알고리즘을 테스트한다. 약 100일치의 데이터를 통해 테스트할 것이므로 분봉의 경우 약 5만개의 데이터가 요구된다. 이를 프로그램 실행 때마다 네트워크로 불러오기에는 지연이 많이 된다. 따라서 db에 데이터를 저장한다. 그리고 매수와 매도에 대한 정보, 수익률 정보도 db에 기록한다. db에 기록해야 알고리즘을 테스트한 후에 검증이 편리하다. 


=> 우리가 생성할 db의 테이블은 다음과 같다.  


1. kosdaq_leve 테이블

: KODEX 코스닥 150 레버리지 분봉 데이터를 저장한다. 칼럼으로는 분봉 시간, 분봉 종가, 분봉 저가를 가진다. 



2. kosdaq_leve_day 테이블

: KODEX 코스닥 150 레버리지 일봉 데이터를 저장한다. 칼럼으로는 일봉 날짜, 일봉 시가, 일봉 종가를 가진다.



3. kosdaq_start 테이블

: KODEX 코스닥 150 레버리지 일봉 시가를 저장한다. 알고리즘을 구현하는 데 시가 데이터를 자주 사용해서 따로 저장한다.  




4. buy, sell 테이블

: buy 테이블은 매수 정보, sell 테이블은 매도 정보를 가진다. price는 매도/매수 가격이고 reason은 매수/매도한 이유이다. 수익율을 계산하기 위해서는 매수와 매도 정보를 가져야 한다. 또한 매수한 주식은 그 주식의 매도 정보와 관계를 맺어야 한다. 그래서 buy_id, sell_id 칼럼을 만들고 관계를 맺어준다. buy_id와 sell_id에 autoincrement 속성을 추가해 자동으로 값이 증가하고 sqlite_sequence라는 테이블이 생긴다. sqlite_sequence가 무엇인지 신경 쓰지 않아도 된다.




5. optimize_profit 테이블

: 알고리즘이 여러 변수에 의해 수익율이 계산된다. 변수에 여러 값을 대입하면서 최대 이익을 얻을 수 있는 최적화된 값을 찾아야 한다. 빨간색으로 마크된 부분이 해당 변수이다.




우리가 사용할 전체적인 DB 구조를 보았다. 다음 포스트에서는 파이썬 코드로 해당 테이블들을 실제로 만들 것이다. 

키움 open api를 이용한 주식 알고리즘 테스트 프로그래밍 >


: 이 포스트를 시작으로 여러 포스트를 통해 키움 open api를 이용해서 KODEX 코스닥 150 레버리지를 특정 알고리즘을 통해 약 100일동안 매매한 총 수익률을 계산하는 프로그램을 구현할 것이다.


이 포스트를 읽기 전에 기본적으로 알아야 할 사항이 있다.


1. 키움 open api를 파이썬을 이용해 구현한다.  약간의 파이썬 지식과 키움 open api 지식이 있어야 한다. 이는 "파이썬으로 배우는 알고리즘 트레이딩" 에서 모두 배울 수 있다. 프로그래밍을 잘 모르는 초보자도 쉽게 배울 수 있다. url은 아래와 같다.


"파이썬으로 배우는 알고리즘 트레이딩"


2. 우리는 KODEX 코스닥 150 레버리지의 많은 양의 분봉 데이터, 일봉 데이터 등을 이용한다. 분봉 데이터는 4만개가 넘는다. 매번 네트워크를 이용해 분봉 데이터를 4만개 이상 불러오면 네트워크 부하가 많이 걸리므로 DB를 사용할 것이다. DB로는 SQLite3를 사용하고 DB에 관련해서는 "파이썬으로 배우는 알고리즘 트레이딩"에 나오는 지식 수준만 알면 된다. 


3. 개발 환경 : python3 , 키움 open api+, sqlite3 


4. 참고로 구체적인 알고리즘(예로 종목의 시가 보다 높으면 매수)은 공개하지 않을 것이다. 이는 각자 개인에게 맞기고 여기서는 전체적인 프로그래밍 구현에 대해서 알아볼 예정이다. 하지만 전체적인 구현을 보면 대략적인 알고리즘이 어떻게 되는지는 유추할 수 있을 것이다. 이는 각자의 몫, 노력이다.


5. 이 포스트를 쓰고 있는 저는 자바를 주로 사용하는 대학생입니다. 파이썬은 거의 사용해 본적이 없습니다. 그래서 파이썬으로 실제 코딩하는 데 부족한 면이 있을 수 있습니다. 그에 대해서는 충고 해주시면 감사하겠습니다.

+ Recent posts