키움 API를 이용한 초단위 매매 전략과 조건검색식 정리 테스트 결과

    키움 API를 이용한 초단위 매매 전략과 조건 검색식 정리 테스트 결과

    지난 시간에 초단위 매매 전략에 대한 테스트 결과를  정리한다.

     

     

    키움 API를 이용한 초단위 매매 전략과 조건 검색식 정리

    키움 API를 사용하면서 초단위 퀀트 매매를 시작하려고 했지만 생각만큼 진도가 나가지 않는다. 결국엔 복불복이란 회오리속에서 빠져나오지 못하고 있는 기분인데 이것을 이겨내려고 1초봉 10

    play-in-stock.tistory.com

     

    1. 테스트 결과

    2. 문제점 및 개선

     

    1. 키움API를 이용한 초단위 매매 전략과 조건 검색식 정리 테스트 결과

    [초단위 퀀트 자동매매를 위한 전략] 의 핵심은 '첫 1초 봉을 잡을 수 있느냐 없느냐'였다. 첫 1초 봉을 잡기 위해서는 장 시작하기 전에 미리 구독 신청을 해놓아야 한다. 당연히 장 중에 구독신청이 되면 그 전의 데이터가 누락되기 때문에 의미가 없다.

     

    그럼 테스트 결과를 보자. 지난 시간에 세 개로 조건 검색식을 나눠두었다. 오늘 장 시작하기 전에 등록이 되는 걸 확인할 수 있었고 한 가지 알게 된 점은 조건 검색식의 예상체결 가는 단일가에 적용되는 듯 보인다.

     

    장 시작 전에도 발동되고 장 시작 후에도 실시간으로 종목을 불러오는 시점이 vi 시점인걸 보면 맞는 듯하다 그때만 예상체결가를 알 수 있을 테니

     

    그럼 지난번에 조건 검색식 3개로 나눠 놓은 부분이 제대로 구독 신청이 되었는지 확인해보자.

     

    스크린 번호를 세 개로 나눠서 1111 / 2222 / 3333으로 구분 지어 놓았는데 3333은 없다 10 ~ 15퍼센트에 해당되는 예상체결가 조건인데 장 시작 전에는 잡힌 종목이 없다. 장 시작 전에 실시간 정보 구독 신청이 되었냐는 위 로그의 시간대로 확인하는 수밖에 없다.

     

    키움 API에서 조건 검색 식이 검출된 시간을 별도로 알려주지 않기 때문에 구독을 하고 거래가 시작되면서 데이터가 생길 때 받을 수 있다. 따라서 9시 전에 구독신청을 해 놓으면 등록된 종목이 장이 시작하면서 데이터가 생겨야 그 시간을 받을 수 있고 그 전에는 위처럼 로그에 찍히는 내 컴퓨터의 시간으로 대체하는 수밖에 없다.

     

    그럼 구독 신청은 제대로 되었으니 첫 1초 봉이 제대로 그려지는지 확인해보도록 한다.

     

    키움 API를 활용한 초단위 매매를 위한 첫 1초봉 확인

    매매한 내역은 밑에서 확인하도록 하고 여기서는 구독한 종목들의 첫 1초 봉이 제대로 그려지는지부터 확인해 보도록하자. 제일 중요한 부분이다.

     

    등록이 된 시점은 내 컴퓨터 시간 기준으로 08:46분이며 첫 1초봉이 발생한 시점은 아래와 같다.

     

    데이터를 확인해보자

     

    -첫 1초 봉의 시간 : 09:00:15

    -시가 2025 / 고가 2030 / 저가 2025 / 종가 2030 / 체결강도 500

    -해당 첫 1초봉의 시가 대비 고가 0.25 %

    -거래량 477

     

    그럼 이제 애머릿지의 첫 1초 봉을 키움 HTS 차트에서 위 데이터와 맞는지 확인해보도록 하자

     

    두 데이터가 정확히 일치한다. 된다. ㅋ

     

    키움 API 초단위 테스트 매매 거래내역 확인

    그럼 이제는 매수한 종목을 확인해 보자 코딩으로 준 매수조건이 제대로 동작하는지 확인해 보는 것이다. 첫 1초 봉이 제대로 그려지는 것이 확인이 되었다. 많은 종목이 등록되었지만 3개 정도의 첫 1초봉 데이터만 확인했다. 세 개만 맞아도 다 맞을 것으로 예상한다. 왜? 사람이 아니고 피씨니까 ㅋ

     

    일단 매매내역은 익절 케이스와 익절하지 못한케이스 두 종목으로 본다.

     

    1. 키움 초단위 퀀트 매매 전략 익절케이스 매매내역 확인

    그림으로 하나씩 확인해보도록 하자.

     

    매수주문시간을 보면 09:00:19초가 확인된다. 초단위 매매 전략의 매수 조건은 다음과 같다. 

     

    1. 1초 거래량 5만 주 이상

    2. 1초 거래대금 5억 이상

    3. 1초 봉 기준 0봉의 시가와 종가가 -1 ~ 1퍼센트 내

     

    시간 09:00:18

    시가 24250

    고가 24250

    저가 24200

    종가 24250

    거래량 129,723

    거래대금 31억 이상

     

    거래량 5만 주 이상 / 거래대금 5억 이상 / 시가 종가가 모두 24250으로 시가 대비 등락률의 종가는 0% 모든 데이터가 매수 조건식과 부합한다. 그럼 로그에 찍힌 데이터로 확인해보자.

     

    첫 1초 봉이 정확히 키움 1초봉 차트에 그려진 데이터와 일치한다. 매수조건이 맞으니 매수한 로그도 확인이 된다. 코드를 틱 단위가 아닌 초봉을 확인한 후에 매수하기 때문에 첫 거래시간인 09:00:18의 데이터를 확인하고 바로 시장가 매수를 전달한다. 그래서 주문시간이 09:00:19초로 나온다.

     

    이 조건에 대해서 익절 조건은 3퍼센트 손절 조건은 -99퍼센트로 설정해 두었다. 테스트를 위함이고 익절 및 손절조건은 조절할 예정이다. 

     

    매도 시간이 09:02:16초인데 이 매수와 매도를 큰 초봉 차트로 보자.

     

    첫 화살표에 매수 2번째 화살표에 매도 수익률 3퍼센트가 되면 시장가 매도로 최종 수익률은 2.83퍼센트로 전략에 맞게 매매를 수행한 것을 알 수 있다. 초단위 매매로 바로 몇 초 후 매도가 된 것은 아니지만 매수 후 급등이 바로 있을 경우에는 바로 매도도 할 수 있다. 

     

    내가 확인한 데이터는 사고 나서 조건 만족하면 2초 내로 매매한 내역까지 확인했다.

     

    아무튼 이건 익절 케이스 3퍼센트를 맞춘 베스트 케이스이고 첫 1초 봉에 조건식을 만족했으나 수익률 3퍼센트에 도달하지 못하고 밑으로 하락한 안 좋은 케이스를 보도록 하자

     

    2. 키움 초단위 퀀트 매매 전략 익절 못한 케이스 매매내역 확인

    위에서 설명을 자세히 했으니 여기서는 데이터만 간단히 확인하도록 한다.

     

    매수 시간 확인

     

     

     

     

    매수는 첫 1초 봉의 조건이 맞으니 제대로 했다. 그렇지만 매도 익절 조건인 3퍼센트에 다다르지 못해 매도를 하지 못하고 계속 가지고 있는 케이스다 손절 조건을 -99퍼센트로 해놓았으니 당연히 손절을 하지 않는다.

     

    첫 봉이 제대로 그려지고 매수하는 것도 확인이 되었으니 이제 수익률과 손절률의 미세조정이 필요한 셈이다.

    어떤 종목은 매수 후 10퍼센트가 넘게 상승하기도 하고 어떤 종목은 얼마 오르지 않아 시세가 죽는 케이스도 많다. 따라서 가장 최솟값으로 익절 조건을 주는 것이 좋을 것 같다. 그렇다면 손절 조건도 최소 조건으로 잡아야 한다 익절은 적은데 손절이 높으면 여러 종목을 성공해도 한 두종목만 실패하면 도루묵이 되기 때문이다.

     

    아무튼 이 국일제지의 1분 봉 차트를 보고 어디서 매도가 되었어야 했는지 그 가격대를 보고 익절률을 낮춰보자.

     

    1분 봉상으로 가까운 시간 내 고가는 2865며 매수한 가격 2800 대비 2.32 퍼센트 정도 오른 뒤 하락했다. 수수료 포함하면 모의는 1.3퍼센트 정도고 실제 매매는 2퍼센트가량의 수익구간을 준다. 그렇다면 절충해서 약 1.5퍼센트를 수익조건으로 주고 매도 조건은 2퍼센트로 주기로 한다? 이게 맞는지는 아직 잘 모르겠다.

     

    그 이유로는 갭 상승하고 시세를 준 다음에도 분명 밑으로 고꾸라진 다음에 위로 올리는 놈들이 있기 때문이다 이래서 어렵다. 밑으로는 조금 더 여유를 줘야 하나 싶기도 하고 그래도 확실히 1퍼센트 이상의 수익률을 준다는 보장이 있다면 해볼 만한 것도 맞다.

     

    아무튼 현시점에서는 1.5퍼센트 익절률에 손절률은 -2.5로 주기로 한다. 모의는 사자마자 거의 -1퍼센트고 의도적으로 누를 경우도 있기 때문에 약 조금의 여유를 보태 -2.5로 합의하기로 스스로 결정한다.

     

    이게 반드시 시세가 몇 퍼센트 이상 터진다는 보장이 없기 때문에 익절 구간이 오면 반드시 매도를 해야 한다. 이 종목도 3퍼센트 매도 조건에 다다르지 못하니 지금은 하락해서 다음과 같다. 

     

     

    첫 번째 화살표에 사서 두 번째 화살표에 매도하지 못하고 세 번째 화살표까지 가지고 있는다 이건 문제가 있다.

     

    안 팔고 놔두면 이렇게 된다. 다른 종목들은 별개의 조건 검색 식이 거나 이 조건식의 개선되지 못하는 점으로 인한 것이다. 그럼 이제 문제점 및 개선해야 할 점에 대해 알아보도록 하자.

     

    키움 API를 활용한 초단위 매매 전략의 문제와 개선해야 할 점

    첫 번째 문제점 바로 위에서 보았듯이 세부적인 매도를 위한 수익/손절률 값을 설정하는 것이다. 이것은 위에서 합의를 보았고 더 데이터가 쌓여야 하기 때문에 기다려 보도록 한다. 

     

    두 번째 문제점 조건 검색식 중 1 ~ 4.9의 예상 주가등락률을 등록하는 과정에서 9시가 가까워지면서 종목수가 100개가 넘어가는 것이 확인된다. 키움 api에서 한 화면번호에서 종목수가 100개가 넘어가면 api를 사용하는데 문제가 될 수가 있다고 한다.

     

    이것을 개선하기 위해서 1 ~ 4.9를 2 ~ 3.5 / 3.6 ~ 3.9로 세분화하도록 한다. 또한 모든 종목에서 코스피 종목은 제외하기로 한다. 코스피 종목은 호가단위 때가 높으면 5억은 손쉽게 넘어가는 종목들이 많기 때문에 피하는 것이 나을 것 같다. 물론 아닌 종목들도 있는데 그렇게 해서 100 종목이 넘고 데이터가 많아지는데 확률이 낮을 것 같은 부분은 피하는 게 낫다고 생각한다.

     

    세 번째 문제점 이건 문제점 + 더 개선하기 위해서 다른 매수조건을 사용할 때 하는 것으로 일단 문제점은 저렇게 장 시작하기 전에 구독하는 것은 현재 상황에서 이 종목이 전일대비 이 가격에 시작할 것이라는 것을 알려주는 것으로 정확하지 않을 수 있다. 물론 맞는 것도 있겠지만 이렇게 종목을 검출하는 방법 외에 다른 방법으로 종목을 등록해서 데이터를 받을 수 있는 방법이 있는지 생각해 보아야 한다. 

     

    예를 들어 전날 시간 외 오른 종목이나 테마가 발생해서 오를 것으로 예상되는 종목들을 장 시작 전 수동으로 미리 등록해 놓는다든가 이런 것들 말이다. 이건 매수매도를 하는 것에 대한 문제점이라기 보단 나아갈 방향으로 보도록 하자.

     

    또 다른 하나는 현재 소스코드는 이게 첫 1초 봉인지 분간할 수가 없다. 그러니까 09:00:00초에 저 조건에 맞게 시작한 종목이 있다면 매수를 하겠지만 장 시작의 첫 1초 봉이 아닌 어느 정도 시간이 흐르고 주가가 오른 뒤에도 저 조건에 맞으면 바로 매수를 하도록 되어 있다는 것이다. 

     

    이 부분은 문제가 될 수도 기회가 될수도 있다. 문제가 되는 것은 어느 정도 오른 뒤에 위 조건에 맞아 매수를 하면 고점매수가 될 수가 있고 기회가 되는 것은 ---- 이런 상태로 계속 주가를 유지하다가 갑자기 위조건에 맞으며 급등해버리면 기회가 되는 것이다. 이것을 어떻게 개선해야 할지는 하나씩 생각해봐야겠다.

     

    즉, 첫 1초 봉의 조건이 아닌 이미 구독을 해 놓은 종목에서 갑자기 급등하는 케이스에 대해 다른 매수조건을 만든다는 것이고 어느 정도 오른 종목들은 매수하지 않도록 코드를 수정하면 될 일이다. 그렇다면 이 봉이 첫 1초 봉인지 알아야 하나? 

     

    아직은 잘 머리가 돌아가지 않는다 이 부분에 대해서는 이어지는 포스팅에서 다루도록 한다. 

     

    퀀트매매에 있는 모든 포스팅은 스스로 정리를 위함과 생각의 흐름대로 이어지니 때때로 무언가 급하게 흘러가거나 방향이 달라질 수도 말이 안 될 수도 있습니다.

     

    다음 개선해야 할 점에 대한 정리 포스팅 보기

    댓글

    Designed by JB FACTORY