키움 API를 이용한 초단위 매매전략은 통할 수 있는 가능성을 보았다. 이번시간에는 이 문제점 및 개선해야 할 점을 하나씩 짚어보기로 하자.
키움 api의 초단위 전략 테스트 결과와 문제점 도출 정리
키움 API를 이용한 초단위 매매 전략과 조건검색식 문제점 개선
1. 수익률과 손절율을 개선한다.
테스트 시에는 3 퍼센트 수익률 -99 퍼센트 손절률로 설정한 것을 수익을 1.5 손절은 -3.0으로 세팅해서 테스트를 진행한 뒤 데이터를 쌓아 지켜보기로 하자.
위 그림처럼 1.5 / -3.00 입력시 자동으로 수익 손절라인에 도달하면 시장가 매도를 진행한다.
2. 키움 api의 화면번호 할당 건
키움 api는 하나의 화면번호당 100개의 종목을 등록할 수 있다. 1~5 퍼 안에서 추출되는 종목들이 많으니 1~ 2.5와 2.6~ 4.9 로 나누고 코스닥 종목만 받도록 세팅한다.
1번 문제점의 그림처럼 두개로 나누고 코스닥 종목만 받도록 설정한다. 5 ~ 15퍼센트의 종목들은 코스피 종목도 포함한다.
3. 조건검색식의 한계
어떤 종목이 해당 조건을 만족할 지 미리 등록해 놓아야 하는데 조건검색식은 한계가 있다. 이것은 To do list에 넣고 나중에 별도로 진행하기로 한다. 오늘 장이 끝나나 뒤 시간외까지의 거래를 보고 어느정도 오른 정도의 종목을 미리 저장하고 프로그램이 실행될 때 등록될 수 있도록 하면 될 것 같다. 급한 문제는 아니며 추가 테스트가 필요하고 중요도가 떨어지기 때문에 나중에 진행하도록 한다.
4. 첫 1초봉의 조건을 봐야하는데 이게 첫 1초봉인지 알 수가 없다.
첫 1초봉인지 알게 할 수는 있다. 하지만 근본문제는 첫 1초봉이 아니기 때문에 문제되는 것은 아니다. 일단 문제점은 등록이 된 종목들이 장중에 급등할 때 기회가 문제가 될수도 있는데 문제가 되는 부분은 어느정도 상승한 후에 매수를 하면 문제가 되는 것이다.
그렇다면 어느정도 상승한 기준을 넣어주면 해결이 된다. 하지만 이것은 별도의 조건으로 두어야 한다. 따라서 이 조건만을 위한 것은 조건검색식에 검색시간을 추가하여 주면 이 문제는 해결이 된다.
첫 1초봉만 보고 매매를 하는 것인데 주가등락률이 전일대비 1 ~ 9.9 퍼센트안에 시작하는 종목들은 대부분 09:00:00 ~ 09:00:59안에 거래가 되나 10퍼 이상이 넘어가는 종목들은 vi로 인해 09:01:00 ~ 09:02:59 에 첫 1초봉이 생기게 된다. 따라서 1 ~ 9.9 퍼센트 안의 종목들은 검색시간을 09:00으로 두고 그 외의 두 조건검색식은 09:02:00 으로 설정한다.
이게 문제가 될수도 있다. 검색되는 시간이 09:00이기 때문에 장 전에 도출되는 것이 아닌 장 시작 후 도출될 수도 있을 가능성이 있기 때문이다? 모르겠다 키움에서 어떤 식으로 줄지 일단 저 시간을 넣지 않았을 때는 08:45분에 종목이 검색되는 것이 확인되었는데 이렇게 하면 확인이 안될수도 있을 듯 하다.
장후에도 시간외 단일가가 있기 때문에 조건검색식에서 종목이 나오는 듯 한데. 바로 봐보자.
이것은 사실 장중에 vi가 걸렸을 때 종목이 검출되기 때문에 문제가 되는 것인데 음..
일단 테스트한 결과로는 장후 시간외 거래시간에도 예상체결등락률에 따라 종목이 검출된다. 그런데 검색시간으로 제한을 두니 검색이 되지 않는다.
결론적으로 내가 저렇게 검색시간을 조건검색식에 준다면 조건검색식의 검색시간은 09:00 부터가 시작시간이니 그 전에는 미리 등록을 해둘수 없다 단, 대부분 09:00:00에 시작하는 종목은 없으니 09:00부터 09:00으로 해 두어도 1 ~ 15퍼센트 시가에 시작할 예상 종목들을 장 시작전에 받을 수 있을 것으로 예상된다.
그런데 근본적으로 문제가 이것인가? 아닌 것 같다. 다시한번 생각해보자
Case1. 첫 1초봉이 조건식대로 나온다 > 매수되니 문제 없음
Case2. 첫 1초봉이 조건식대로 나오지 않는다.
Case2 에서는 다음과 같이 나눌 수 있다. 장 시작전 여러종목을 등록 해 두었는데 1초봉이 만족하면 case1이니 문제될게 없고 그 외의 종목들이 case2로 구분되는데 case2에서는 다음과 같은 것들이 있다.
Case 2 - 1. 등록되지 않은 종목들 중 장중에 vi가 걸리면 신규로 등록이 되어서 vi가 끝나고 난 뒤 첫 시작 1초봉에 걸리면 매수될 가능성이 있다. 오늘도 나온 문제점이고 이것은 vi로 걸리는 거라 상승할지 하락할지 구분짓기가 어렵다.
오늘을 예로 들면,
공구우먼이 09:37분 내 피씨 시간으로 검색 및 실시간 등록이 되었고 09:39:52초 봉이 초단위 매매전략 조건검색식과 맞아 매수에 들어갔다. 시간을 보면 vi가 맞을 것이다.
일봉상으로 보면 09:39분 인것이 확인되고 이 전봉은 09:37분이다 피씨상으로 검출된 시간과 일치한다. 초봉으로 보자.
위 캡쳐한 시간과 가격대 및 거래량이 일치한다 거래대금도 11억으로 5억 이상이 되니 매수한 것을 확인할 수 있다. vi걸리기 전의 봉은 버그가 있는 것도 확인된다. vi걸리고 난 뒤에도 오를지에 대한 확신이 없기 때문에 vi이후에 걸리는 종목들은 검출되지 않게 한다.
그러기 위해서라도 검색시간을 맥스 09:02까지만 검출되게 한다. 09:03분 이후에 거래될 종목들은 아마 09:02분에 모두 검출될 것으로 예상한다.
즉, 1 ~ 9.9까지는 09:00 to 09:00 / 그 이상은 09:00 to 09:02로 검색시간을 한정짓는다. 그렇게 하면 장 시작 후 vi걸리는 종목은 피할 수 있다. 이게 맞는지는 잘 모르겠다. 일단 내일 돌려봐야지 알 수 있다.
Case 2-2. 조건검색식에 걸리지 않았는데 상승 혹은 갑자기 급등하는 종목들 정리
vi케이스는 검색시간으로 거를 수 있고 만약 검색시간으로 인해 종목이 검색되지 않는다면 소스코드상으로 문제점을 해결해야한다.
case 2-2에서는 조건검색은 되었지만 첫 1초봉에 조건을 만족하지 않고 실시간으로 등록되어 데이터를 받는 그 외의 종목들로 볼 수 있다.
이 종목들을 어떻게 다룰 것인가는 이제 선택하면된다. 선택하기 전 이 종목들은 다음과 같이 구분할 수 있다.
- 계속 거래량 없이 횡보하다 끝난다.
- 거래량 없이 상승하다 위에서 거래량이 터지면서 1초 조건식을 만족해서 매수한다 > 이건 문제가 될 수 있다.
- 거래량 없이 옆으로 횡보하다 갑자기 급등이 나오는데 급등이 나오는 시점이 저 조건식과 일치해서 밑에서 잡는다. > 이건 기회가 될 수 있다.
저 세가지 경우의 수에 대해서 이제 내가 선택을 하면된다.
1. 매수한 종목이 아니면 실시간 등록을 해제 하고 데이터를 받지 않는다.
이 경우는 리스크도 기회도 없다. 제일 깔끔하긴하다.
2. 조건식을 주어서 밑에서 급등하는 종목들을 매수하도록 하고 어느정도 오른 종목들에 대해서는 매수하지 않도록 코드를 수정한다.
이 경우는 다른 조건식 하나를 더 만들 수 있다. 하지만 이 조건식외에도 별도의 조건식들 -- / 이것도 준비중인 게 있으니 겹치지 않게 하는 것이 오히려 더 나을 것 같다.
그래 결정했다. 선택은 1번으로 조건검색식으로 검출된 종목 중 매수되지 않은 종목들은 실시간 정보를 끊고 데이터를 더이상 받지 않는다. 받아서 하는 것도 좋긴 하지만 다른 케이스와 충돌날 수가 있기 때문에 가급적 깔끔하게 진행하는 것이 좋을 듯 하다.
내가 api에 대해서 잘 모르기 때문에 만약 어떤 종목에 대해서 매수 조건에 부합하지 않아 실시간 구독을 취소했는데 문제가 발생된다면 다른 방법으로 매수하지 않는 조건을 넣어주어야겠다. 다른 조건으로 매수하지 않도록 하는 것은 1초봉에 촛점을 두고 현재 거래되는 시간을 보고 09:03분 이상으로 시작할 경우 매수하지 않는 조건을 넣으면 될 듯하다.
그냥 깔끔하게 데이터를 끊어주었을 때 문제가 없는 것이 가장 좋은데 결과는 내일 테스트 후에나 알 수 있다.
마지막 4번의 첫 1초봉 case 1,2 에 대해서 정상적으로 정리가 된다면 더 이상 문제가 될 부분은 없어보인다. 거래의 신뢰도를 쌓고 손절률과 수익률 조절만 잘 한다면 이 조건식은 이것으로 마무리가 될 수 있을 듯 하다.
블로그 글 쓴 시간을 보면 하루 이틀내에 완성되는 듯 하지만 몇달을 고생해서 만든 케이스다. 이것도 해보고 저것도 해보고 안되면 다시 조건식을 지우고 문의하고 다시 적용해서 테스트하고 ..
이제는 정말로 잘 되었으면 한다.
아무튼 그럼 내가 오늘 해야할 일은 검색시간과 현재 거래시간을 보고 비교해서 1분이상이 되었는데 매수가 되지 않은 종목은 데이터를 끊는 것을 코드로 작성하는 일이다.
자 그럼 이제 코드를 수정하러 가보자.