[파이썬] 크레온 내 조건식에 포착된 종목 가져오기

이번 포스팅은 파이썬으로 대신증권 크레온의 8537(종목검색)화면에 설정한 [내 전략 목록]과 내 조건식에 포착된 종목을 가져오는 방법입니다. 제가 주식 자동 매수 매도 프로그램을 처음 만들 때는 실시간 주가 정보를 가져와 RSI, MACD 등 보조지표를 직접 계산했었는데, 크레온 API는 15초에 60건밖에 요청할 수 없어서 분석에 지연이 발생했습니다. 하지만 이 방법을 사용하면 증권사의 서버에서 분석된 종목만 가져오면 되기 때문에 시간을 단축할 수 있습니다.



장점

  1. 시간 절약 – 코스피, 코스닥의 3,000개 기업을 모두 분석해 결과를 받는 데 1초도 걸리지 않습니다. 모든 종목을 직접 분석하는 방법은 API 제한 때문에 10분 이상 걸려 단타나 스캘핑을 하거나 급등주를 포착하는 데 불리합니다.
  2. 다양한 조건 설정 – 복잡한 조건(지표, 지수, 이슈 등)들을 쉽게 설정할 수 있고 커스텀도 가능합니다. 이동평균선, RSI, MACD, 스토스캐틱 등 보조지표 계산 공식을 직접 코딩할 필요도 없고, 무엇보다 혹시 있을 실수로 잘못된 데이터를 얻을 위험이 없습니다.
  3. 백 테스트 – 만든 조건식을 과거 데이터에 적용해 간단한 백 테스트가 가능합니다. 하지만 매도 조건 설정이 불가능하고, 결과를 API로 얻을 수 없어 HTS에서 확인해야 하는 단점이 있어서 백 테스트는 직접 만들어 사용하는 것이 좋을 것 같습니다.




예제 코드

import win32com.client
CP_STRATEGY_LIST = win32com.client.Dispatch("CpSysDib.CssStgList") # 내 전략 리스트
CP_STRATEGY_PLAY = win32com.client.Dispatch("CpSysDib.CssStgFind") # 내 전략 포착 종목
def request_strategy_list():
    try:     
        '''요청 조건 설정'''
        CP_STRATEGY_LIST.SetInputValue(0, 1)    # '0':예제전략, '1':나의전략  
        CP_STRATEGY_LIST.BlockRequest()         # 요청
        '''응답 헤더'''
        request_header = CP_STRATEGY_LIST.GetHeaderValue(0)     # '0':전략 목록 수, '1':요청구분 
        '''응답 결과'''
        # 0 - 전략명, 1 - 전략ID, 2 - 전략 등록일시, 3 - 작성자 필명, 4 - 평균 종목 수
        # 5 - 평균 승률,  6 - 평균 수익, 7 - 전략 URL 주소
        for i in range(request_header):
            print(CP_STRATEGY_LIST.GetDataValue(0,i), CP_STRATEGY_LIST.GetDataValue(1,i))
            
    except Exception as ex:
        print('에러발생 : request_strategy_list() ' + str(ex))
def request_strategy_play():
    try:     
        '''요청 조건 설정'''
        CP_STRATEGY_PLAY.SetInputValue(0, 'KBniFO9zR7apVO6gK6XyVg')  
        CP_STRATEGY_PLAY.BlockRequest()
        '''응답 헤더'''
        # 0 - 검색된 결과 종목 수, 1 - 총 검색 종목 수, 2 - 검색 실행 시간
        request_header = CP_STRATEGY_PLAY.GetHeaderValue(0)
        '''응답 결과'''
        # 0 - 종목코드
        for i in range(request_header):
            print(CP_STRATEGY_PLAY.GetDataValue(0,i))
            
    except Exception as ex:
        print('에러발생 : request_strategy_play() ' + str(ex))
request_strategy_list()
request_strategy_play()

9:10 – 아래 [내 조건식 목록 요청하기] 참조.
13 – 아래 [내 조건식 목록 응답 헤더] 참조.
18:19 – 아래 [내 조건식 목록 응답 값] 참조.
27:28 – 아래 [내 조건식 목록 요청하기] 참조.
32 – 아래 [내 조건식 목록 응답 헤더] 참조.
36:37 – 아래 [내 조건식 목록 응답 값] 참조.




[내 조건식 목록] 요청하기

CP_STRATEGY_LIST.SetInputValue(0, 1)  
CP_STRATEGY_LIST.BlockRequest()        
typevalue 설명응답 자료형
0‘0’:예제전략, ‘1’:나의전략  요청 구분char

[나의 전략]은 크레온 HTS의 8537(종목검색)화면에서 사용자가 직접 만든 전략 정보를 가져오기 때문에 미리 조건식을 저장해 두어야 합니다.




[내 조건식 목록] 응답 헤더

request_header = CP_STRATEGY_LIST.GetHeaderValue(0)  
type설명응답 자료형
0전략 목록 수long
1요청구분char




[내 조건식 목록] 응답 값

for i in range(request_header):
    print(CP_STRATEGY_LIST.GetDataValue(0,i), CP_STRATEGY_LIST.GetDataValue(1,i))
type설명응답 자료형
0전략명string
1전략IDstring
2전략 등록일시string
3작성자 필명string
4평균 종목 수long
5평균 승률double
6평균 수익double
7전략 URL 주소string

[평균 종목 수], [평균 승률], [평균 수익]은 작성한 직후에는 값이 없지만, 시간이 지나 데이터가 쌓이면 나타납니다.




[조건식에 포착된 종목] 요청하기

CP_STRATEGY_PLAY.SetInputValue(0, 'KBniFO9zR7apVO6gK6XyVg')  
CP_STRATEGY_PLAY.BlockRequest()
type설명응답 자료형
0 전략IDstring

[내 조건식 목록 응답 값]에서 얻은 전략 ID를 값으로 입력해야 합니다.




[조건식에 포착된 종목] 응답 헤더

request_header = CP_STRATEGY_PLAY.GetHeaderValue(0)
type설명응답 자료형
0검색된 결과 종목 수long
1총 검색 종목 수long
2검색 실행 시간string




[조건식에 포착된 종목] 응답 값

for i in range(request_header):
    print(CP_STRATEGY_PLAY.GetDataValue(0,i))
type설명응답 자료형
0종목 코드string




참고글

[크레온 문서]
[종목검색 전략명, 전략ID 리스트] CpSysDib.CssStgList – 크레온
[종목검색 검색 종목 리스트] CpSysDib.CssStgFind – 크레온




관련글

guest
0 Comments
Inline Feedbacks
모든 댓글 보기