본문 바로가기
공돌/trading system

알고리즘 트레이딩 (2) : Cybos plus 연습_1

by 책돌공돌 2021. 5. 1.

알고리즘 트레이딩(1)편을 통해서 필요한 것들은 모두 설치했습니다.

이번에는 그럼 대신증권에서 공개하고있는 cybos api 예제들을 실행해보며서 어떻게 사용하는지 이해해보겠습니다.

 

우선 cybos plus를 관리자 모드로 실행합니다.

관리자 권한으로 실행후 cybos plus로 접속!

또한, 별도 IDE 안쓰고, jupyter notebook을 사용해서 진행하겠습니다.

아나콘다를 설치한 덕에 jupyter notebook도 설치가 되어있어서, 홈키에서 jupyter notebook 검색하시고, 그중에서 저번에 만든 32bit용 가상환경을 선택해서 이 역시도 관리자 모드로 실행합니다.

실행되고나면, 코드를 저장할 폴더를 별도로 만드시고 폴더 안에서 new를 눌러 python3로 새 파일을 만들어보겠습니다.

저희는 뭐 사용만 하면되는 거니까, 예제를 통해서 이해해보고, 필요한 기능들만 가져다 쓰는 방식으로 해보겠습니다.

money2.daishin.com/e5/mboard/ptype_basic/plusPDS/DW_Basic_Read.aspx?boardseq=299&seq=39&page=3&searchString=&prd=&lang=7&p=8831&v=8638&m=9508

 

사이보스플러스자료실 - 대신증권

첨부파일을 PDF뷰어로 확인 하실수 있으며, PDF뷰어 미설치 고객께서는 우측 다운로드를 통해 설치 후 이용 가능 합니다. PDF뷰어 다운로드

money2.daishin.com

대신증권 홈페이지에서 1번째 예제, 종목정보 구하는 예제를 보겠습니다.

샘플코드를 그대로 복사하셔서 한번 실행시켜봅니다.

잘돌아가는걸 확인하셨으면, 각 오브젝트들이 어떤 일을하는지 보겠습니다.

아래 사이트를 참고하였습니다.

cybosplus.github.io/

 

CybosPlus Help for Python (비공식)

 

cybosplus.github.io

# 연결 여부 체크
objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
bConnect = objCpCybos.IsConnect
if (bConnect == 0):
    print("PLUS가 정상적으로 연결되지 않음. ")
    exit()

첫번째 블럭은 연결 여부 체크 라고 되있습니다.

help document에서 찾아보니, 첫번째 줄 objCpCybos로 해당 "CpUtil.CpCybos"오브젝트를 생성하고, 그 아래줄에서 

해당 클래스의 "IsConnect" method를 사용하네요.

연결이 잘되어있으면 1, 안되어있으면 0을 반환합니다.

 

두번째 블럭

# 종목코드 리스트 구하기
objCpCodeMgr = win32com.client.Dispatch("CpUtil.CpCodeMgr")
codeList = objCpCodeMgr.GetStockListByMarket(1) #거래소
codeList2 = objCpCodeMgr.GetStockListByMarket(2) #코스닥

CpCodeMgr 오브젝트를 선언합니다.

아래 method는 무슨 일을 하는지 document를 검색해보겠습니다 

입력값으로 받은 market 코드에 따라, 해당 시장에 상장된 종목들을 반환하는것 같습니다.(print 해보면, 종목코드로 반환함을 알 수 있습니다.)

print("거래소 종목코드", len(codeList))
for i, code in enumerate(codeList):
    secondCode = objCpCodeMgr.GetStockSectionKind(code)
    name = objCpCodeMgr.CodeToName(code)
    stdPrice = objCpCodeMgr.GetStockStdPrice(code)
    print(i, code, secondCode, stdPrice, name)

각 코드를 받아서 다른 정보들과 함께 print하는 것 같습니다.

다시 document 검색해보면....

음..입력 코드에 따른 구분?을 반환하네요, etf인지 옵션이니, 주식인지 등등 반환하는것 같습니다.

추후 etf는 제외한다던지 혹은 etf에다만 한다던지 이런 필터를 걸 때 쓸 수 있겠습니다.

 

종목코드에서 이름을 가져오는 함수입니다. (간단하네요)

 

이함수는 기준가를 가져오는 함수인데, 다른 함수들도 보시면 전일 시가,고가,저가 등 추후에 필요할 것같은 함수들이 많습니다.

 

코스닥에 관한 블럭은 내용이 같으니 패스하게습니다.

 

이렇게해서 실행시켜보면

코스피와 코스닥 종목들이 모두 출력되고, 총 종목 수가 출력되는 것을 확인할 수 있습니다.

 

크게 어렵지 않게 코드 돌려보고, 각 오브젝트들과 그내부 함수들이 어떤 역할을 하는지 확인해보았습니다.

위의 코드를 분석해보면서, 필요한 기능이 있으면 그 기능을 수행하는 함수가 있는지 찾아서 사용하며 쉽게 구현 할 수 있겠네요.

다음 글부터는 좀 더 빠르고 간략하게 코드들 보면서 api를 익혀보겠습니다.

댓글