Skip to content
/ MyKiwoom Public
forked from jjrune/MyKiwoom

키움증권 시스템 트레이딩

License

Notifications You must be signed in to change notification settings

nhlsm/MyKiwoom

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

86 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MyKiwoom

파이썬으로 만든 키움증권 시스템 트레이딩 프로그램입니다.

멀티프로세스와 큐를 적극 활용하여 분산 연산이 가능하며

전략별 백테스터가 포함되어 있습니다.

UI

화면 캡처 2021-08-31 045712

코드

  1. backteser 폴더내에는 초단타, 단기 전략용 백테스터가 포함되어 있습니다.
  • backtester_1.py는 10시 이전 초단타 전략을 백테스트하고 변수값을 최적화하는 코드입니다.
  • backtester_2.py는 10시 이후 초단타 전략을 백테스트하고 변수값을 최적화하는 코드입니다.

화면 캡처 2021-09-02 112845

  • Total과 BackTester에 넘겨진 num 인자는 리스트이며 각 요소 또한 리스트입니다.
  • 그 값이 [0., 10., 1, 0.1] 일 때를 예를 들어 설명하면
  • 변수를 0부터 10까지 1단위로 1차 백테스트하고 최고수익인 변수를 골라내어
  • 골라낸 변수값의 전후를 0.1단위로 다시 2차 백테스트하여 최고수익인 변수를 찾아냅니다.
  • 하나의 변수를 가지고 이렇게 백테스트를 하고 난 후 최고수익인 변수를 정한 다음
  • 해당 변수값을 고정시키고 다음 변수를 백테스팅하는 방식입니다.
  • 리스트[2]와 리스트[3]이 같은 값일 경우 1차 백테스트만 진행됩니다.
  • 특정 변수의 수치를 임시로 고정할려면 [2.5, 2.5, 0, 0] 이렇게
  • 두개는 고정값 뒤에 두개는 0으로 설정하면 됩니다.
  • 백테스트한 모든 데이터는 DB에 저장되고
  • 수익급합계 그래프 또한 당일날짜로 파일명을 정해서 png파일로 저장됩니다.

20210830

  • 수십코어 이상의 컴퓨터를 보유하고 계신분은 workcount = int(last / 6) + 1 이부분의 숫자 6를
  • 코어수 만큼 늘리면 속도를 개선할 수 있습니다.
  • self.ccond는 조건검색식 진입 이후 경과한 시간(초) 계산용입니다.
  • self.indexn은 현재 인덱스의 값이 아닌 번호이며, 특정기간 특정칼럼의 평균값 계산용입니다.
  • self.indexb는 매수시점 인덱스의 번호이며, 매수이후 특정칼럼의 최고값 계산용입니다.
  • self.csell은 매수시 0, 매도조건을 만족하면 +1됩니다. 매도조건 지속만족 시 청산용입니다.
  • 변수의 순서에 따라 최적치가 달라질 수 있습니다.
  • backtester_1m.py 및 backtester_2m.py는 전략 변수값을 고정하여 백테스트할 수 있습니다.
  • backfinder.py는 backtester의 역개념 코드라고 생각하시면 됩니다.
  • 백테스터가 변수값들을 변경해가며 최적치를 찾는 작업이라면,
  • 백파인더는 미래의 특정시간 이내에 수익조건을 만족하는 현재시점의 변수값들을 찾는 작업입니다.
  • 작성된 코드는 저장된 틱데이터를 불러와서 현재가 대비 이후 300초 이내에
  • 최고가가 5%이상 상승한 시점의 데이터들이 어떠했는지 기록하는 코드입니다.
  • 지금은 초단위 코드이지만, 일봉으로 해서 3일이내 10%이상 상승한 시점의 데이터들도 검토할 수 있겠죠.
  1. collector 폴더내에는 틱데이터 수집코드가 포함되어 있습니다.
  • window.py 를 실행하면 초당 틱데이터를 수집할 수 있습니다.
  1. login 폴더는 버전처리와 자동로그인 설정 파일입니다.
  • versioupdater.bat는 버전 업그레이드용 파일입니다
  • autologin1.py는 user.txt 파일에서 설정한 첫번째 계정 자동로그인 설정이며
  • autologin2.py는 두번째 계정 자동로그인 설정입니다.
  • user.txt는 계정 설정용 파일입니다.
  • "고객아이디" 및 "공동인증서" 관련 오류창이 뜰 경우 "고객아이디 저장"를 체크 하신 후
  • 수동으로 로그인을 한번 한 후에 재실행하시면 오류가 해결됩니다.
  1. trader 폴더는 자동매매 코드입니다.
  • 화면해상도 3440 x 1440에 최적화되어 있습니다.
  • window.py는 pyqt5를 이용한 ui코드입니다.
  • worker.py는 키움증권 openapi ocx가 선언된 클래스이며 TR 조회 및 실시간 데이터 수신, 주문전송을 담당합니다.
  • updater_chart.py는 ui에 표시될 차트 연산용 클래스 파일입니다.
  • updater_hoga.py는 ui에 표시될 호가창 연산용 클래스 파일입니다.
  • strategy.py는 단타 전략 연산용 클래스 파일입니다.
  • chartitem.py는 차트에 표시될 세부 아이템용 클래스 파일입니다.

화면 캡처 2021-09-02 112945

  • 전략과 관련된 코드는 모두 비공개상태입니다.
  1. utility 폴더는 각종 설정 및 static 함수 파일입니다.
  • UI 색상 및 글꼴을 변경하실려면 setting.py를 변경하시면 됩니다.
  • sound.py는 알림소리용 클래스 파일입니다.
  • query.py는 데이터베이스 기록용 클래스 파일입니다.
  • telegrammsg.py는 텔레그램 메세지용 클래스 파일입니다.
  1. updater 폴더는 단기 전략용 업데이터가 포함되어 있습니다.
  2. 배치파일 동작 순서
  • 두번째 계정으로 버전업그레이드 실행
  • 두번째 계정으로 자동로그인 설정
  • 틱수집 프로그램 실행
  • 30초 후 첫번째 계정으로 자동로그인 설정
  • 자동매매프로그램 실행
  • 9시 1분까지 장운영시간 알림이 오지 않을 경우, 프로그램 및 컴퓨터 종료
  • 10시 이전 초단타 전략 변수 최적화용 백테스터 실행
  • 10시 이후 초단타 전략 변수 최적화용 백테스터 실행
  • 프로그램 종료

설정방법

  1. login/user.txt 파일에 계정 두개 설정

화면 캡처 2021-09-02 113057

  1. utility/setting.py 파일에 각종 경로 및 모니터 가로 해상도 설정

화면 캡처 2021-09-03 063854

  • 모니터 가로 해상도 설정은 해상도가 낮은 사용자를 위한 임시방편입니다.
  1. mykiwoom.bat 파일을 열어서 두번째줄 경로 수정

화면 캡처 2021-09-02 113149

  1. mykiwoom.bat 관리자권한으로 실행

화면_캡처_2021-08-12_133730

  • 설정이 올바르게 되었다면, 데이터베이스에 필요한 테이블이 만들어지고
  • OPENAPI 로그인 후 계정정보 및 지수차트 조회, VI발동해체등록, 장운영시간등록, 업종지수등록까지 완료한 후
  • 정상적으로 프로그램이 구동됩니다. 여기서부터 장운영시간 알림을 받아 프로그램이 단계별로 작동됩니다.
  • 장중에 프로그램을 구동하면 15시 20분까지 장운영시간 알림을 받지 못하므로
  • 시스템설정탭에 "장운영상태" 버튼을 클릭하면 수동으로 장운영상태로 변경됩니다.
  • 프로그램은 구동 후 10분 동안 장운영알림이 오지 않으면 프로그램 및 컴퓨터를 종료하도록 설정되어 있으니
  • 테스트용으로 구동 시 반드시 장운영상태로 만들어 종료되지 않도록 하십시오.
  1. 시스템설정탭에서 텔레그램 토큰 및 사용자 아이디를 설정합니다.

화면_캡처_2021-08-26_195057

  • 설정탭의 ON/OFF 버튼을 제외한 버튼은 한번 실행 또는 클릭하면 바탕이 어둡게 변합니다.
  • ON/OFF 버튼은 상태에 따라 버튼명이 변합니다.
  1. 윈도우 cmd 창을 닫아 모든 프로그램을 종료합니다.
  2. 키움증권 HTS를 실행하여 조건검색식 0번 1번 두개를 만듭니다.
  • 0번은 시가총액10조원이하, 관리종목 제외, 거래대금상위 100종목
  • 1번은 시가총액10조원이하, 관리종목 제외
  1. mykiwoom.bat 재실행합니다.
  • 구동 완료 후 텔레그램으로 "자동매매 시스템을 시작하였습니다."라는
  • 메세지가 수신되면 텔레그램 정보가 올바르게 설정된 겁니다.
  1. 로그 및 설정 위젯 우측 하단에 버튼이 세개있습니다.

화면 캡처 2021-09-02 113320

  • 차트탭변경 버튼은 지수차트 및 종목차트의 탭 상태를 변경합니다.
  • 차트유형변경 버튼은 두종목차트 >> 한종목차트 >> 복기차트 순으로 변경됩니다.
  • 창크기변경 버튼은 UI의 크기를 최소모드, 최대모드로 변경합니다.
  1. 각종목록의 첫번째 칼럼 클릭시 차트1 및 호가창1이 표시되고 두번째 칼럼 클릭시 차트2 및 호가창2가 표시됩니다.

화면_캡처_2021-07-04_144808

  • 한종목 집중모드에서는 차트 호가창 이외에 뉴스, 공시, 재무재표, 체결강도 추이까지 표시됩니다.

화면 캡처 2021-09-04 032533

  • 복기차트 모드시 데이터베이스에 저장된 체결목록을 불러와서 차트에 매수 및 매도가격를 표시합니다.

화면_캡처_2021-07-04_144925

  1. 거래목록탭에서 달력의 날짜를 클릭하면 해당 날짜의 거래목록을 불러옵니다.

화면 캡처 2021-09-02 113352

  1. 수익현황 탭에서는 기간별 집계를 구분하였습니다.

화면 캡처 2021-09-02 113422

  1. 테스트모드 ON으로 변경하면 로그인 후 아무런 명령이 실행되지 않고
  • 시스템설정에 버튼들을 누르면 각각의 명령이 하나씩 실행됩니다.
  • 모의투자 ON 상태는 실서버에 접속해서 테스트 하지만, 실제 매매가 이뤄지지 않고 매도수를 기록합니다.
  • 모의투자 OFF 상태에서만 실제 매매 주문이 전송됩니다.
  1. 차트는 마우스 좌클릭으로 드래그하면 선택한 영역이 줌인됩니다.

화면 캡처 2021-09-02 113501

  • 줌아웃은 마우스 우클릭하시면 됩니다.
  • 차트 캔들 영역 좌측 하단은 십자선 기준가격 및 전일대비 십자선 등락율이 표시됩니다.
  1. 호가창

화면_캡처_2021-07-04_144709

  • 호가창 우측 상단의 금액을 선택하여 매수주문 영역에 마우스를 클릭하면 매수주문이 전송됩니다.
  • 호가창 좌측 상단의 퍼센트를 선택하여 매도주문 영역에 마우스를 클릭하면 매도주문이 전송됩니다.
  • 시장가 매도수와 매도수 취소 버튼은 버튼의 설명 그대로 명령이 실행됩니다.
  • 미체결 수량이 남아 있으면 매도주문, 매수주문 영역에 남은 수량이 표시됩니다.
  • 키움증권 8282 호가주문창과 거의 동일하지만, 중복 및 복수 주문은 되지 않으니 착오없으시길 바랍니다.
  1. 텔레그램 사용자 버튼은 아래와 같이 4개로 설정되어 있습니다.

P20210812_160357000_127FD7AC-B059-4E5C-BAEA-8401B325A423

About

키움증권 시스템 트레이딩

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%