본문 바로가기

python/khopenapi11

캐치 슬리피지 2021년 9월 1일의 캐지 계좌 거래내역이다. 밑에서 3번째 내역을 보면 포착가격은 14550원인데 체결은 15050원에 된 것을 알 수 있다. 엠투엔의 초봉이다. 9시 0분 32초의 캔들의 저가가 14550원임을 알 수 있다. 그러나 종가는 15050원이다. 즉, 1초도 안 되는 시간에 주가가 14550원을 찍었다가 15050원으로 올라온 것이다. 그리고 나는 현재가+10호가에 매수 주문을 넣었으니 500원 비싸게 사서 슬리피지가 발생하게 된다. 이런 슬리피지를 작게 하려면 정확한 지정가 주문이 필요하다. 단, 정확한 지정가 주문을 하게 되면 매수나 매도 주문이 미체결될 수 있다. 매수 주문이 미체결되면 손해도 이익도 없으니 상관없지만(사실 전기세가 손해다), 매도 주문이 미체결되면 막대한 손실을 입.. 2021. 9. 9.
상폐 종목 구분 상폐되면 종목코드랑 종목명 등 모든 데이터가 사라진다고 생각해서 GetMasterCodeName 함수를 호출해서 이름이 없으면 상폐로 분류했다. 근데 상폐됐는데 이름만 남아있는 경우도 있다. 그래서 이런 종목을 거르기 위한 다른 알고리즘을 찾았다. GetMasterLastPrice 함수가 가장 성능이 확실한 것 같다. GetMasterLastPrice 함수를 호출했을 때 0원이 나오거나, 혹은 빈 문자열이 나온다면 그것은 상장폐지된 종목이다. GetMasterLastPrice에 제낙스의 코드를 넣으면 0원이 나오고(정확히는 0이 연속된 문자열이 나온다.), 다른 의미없는 문자(apple, banana 등..)를 종목코드 매개변수에 넣으면 빈 문자열이 나온다. 2021. 8. 11.
유통주식수 데이터가 존재하는 종목 찾기 나는 이 세상에 존재하는 모든 종목코드 중에 키움증권에 유통주식수 데이터가 존재하는 종목코드만 알아내야 하는 상황에 처했다. 키움증권 조건검색을 이용해서 유통주식수의 범위를 0 이상 999999999 이하로 잡아놓으면, 유통주식수 데이터가 존재하지 않는 종목은 자연스럽게 걸러질 것이라는 가설을 세웠다. 근데 그러던 도중 버그를 발견했다. 종가가 81500원이다. 라는 조건을 추가해서 삼성전자만 검색결과에 표시되게 했다. 유통주식수가 0주이상 999999999주 이하이다. 라는 조건을 추가했더니 삼성전자가 사라져버렸다. 삼성전자는 유통주식수가 999999999주보다 많아서 검색이 안 된다고 생각할 수도 있겠지만 키움증권이 제공하는 OpenAPI+를 사용하면 삼성전자의 유통주식수는 4,453,888주라는 사.. 2021. 8. 7.
양봉 음봉 확률 2109개의 종목의 2020년 12월 1일부터 2021년 6월 4일까지의 일봉 차트 데이터를 근거로 계산했다. 이 종목들 중에 거래정지 종목, 상장폐지 종목, 신규상장 종목이 섞여있을 수도 있다. 종가가 시가보다 큰 것은 양봉, 양봉이 아닌 것은 음봉이라고 정의할 때, 다음 날 양봉이 뜰 확률을 계산하면 양봉음봉 / 연속으로 나온 횟수 음봉 양봉 1 42.52% 43.94% 2 44.59% 42.19% 3 45.85% 40.84% 4 47.01% 40.19% 5 47.71% 42.07% 6 48.64% 45.0% 7 48.24% 41.85% 8 46.77% 42.95% 9 44.16% 50% 10 37.66% 51.72% ... ... ... 연속으로 나온 횟수를 10 이하의 자연수로 정의할 때, 6번 .. 2021. 7. 3.
키움증권 1시부터 7시 30분까지 일정 2021. 4. 30.
chejandata 처리시 주의할 점 KOA StudioSA ver 2.20에 나오는 가이드이다. 여기서 FID 911은 체결량, 915는 단위체결량이다. 둘의 차이가 무엇일까? 예를 들어 내가 100주를 매수 주문을 했고, 순서대로 30주, 34주, 36주가 체결되었다고 해 보자. 그럼 911과 915의 값은 각각 다음과 같다. 911 (체결량) 915 (단위체결량) 30주 체결 30 30 34주 체결 64 34 36주 체결 100 36 매수되자마자 매도하는 코드를 짜고 싶을 때, 매도 주문수량을 911을 통해 받아온다면 첫 번째 매수 체결에서는 30주를 매도하겠지만 두 번째 매수 체결부터는 잔고에 34주 밖에 없는데 64주를 매도하려고 할 것이고, 그렇게 되면 매도 주문이 이루어지지 않을 것이다. 따라서 그럴 때는 911이 아닌 915를.. 2021. 4. 27.
khopenapi try except문 주의할 점 내가 실행하고 싶은 모든 코드를 main 함수에 담고 그 함수를 실행시키는 코드를 try문에 담았음에도 except문은 실행되지 않는다. 왜 그런지 잘 모르겠지만 추측해보자면... _event_OnReceiveRealData는 내가 실행시킨 것이 아닌, Kiwoom API에서 이벤트를 일으켰기 때문인 것 같다. 즉 내가 실행한 함수나 내가 생성한 객체에서 발생한 예외가 아니면 try문은 내 알바 아니야 하면서 지나간다는 것이다. 해결 방법은 아마 이벤트를 connect해 놓은 함수에다 똑같은 try except문을 박아넣으면 되긴 할 텐데 그걸 모든 함수에다 일일히 박아넣을 생각하니까 귀찮기도 하고 지저분해 보일 것 같기도 하다. 사실 에러를 발생시키지 않도록 코드를 짜는 것이 최선이긴 하다... 그게 .. 2021. 4. 18.
화면번호 최대길이 스크린번호의 최대길이는 10자리 입니다. C:\OpenAPI\khopenapi.ocx 를 메모장으로 열고, 628번째 줄 45열을 보면 위의 문구가 적혀있다. 화면번호를 default로 하면 잘 되던 게 defaultscrno로 하면 안 되는 이유가 저거였구나. ocx 파일은 갑자기 왜 뜯어보냐고? 궁금해서... 2021. 3. 20.
키움 조건검색 최대 개수 제한 HTS에서는 조건검색결과가 기본적으로 최대 682개 밖에 표시가 안 된다. API를 통해서 조건검색을 하면 모든 결과가 나온다. 칼럼을 줄이면 최대 개수가 커진다. 2020. 12. 14.
키움api 멈출 때 키움api는 요청에 0.2초의 간격을 두는 것이 매우 중요하다. 만약 time.sleep(0.2)를 붙이지 않은 채로 코드를 실행하면 네다섯번 요청하다가 프로그램이 멈춰버린다. 반드시 time.sleep(0.2)를 붙이는 습관을 가지자. 오늘도 디버깅하다가 프로그램이 멈춰버리는 원인을 알 수 없어 엄청 답답하고 속상했다 30분 넘게 붙잡고 있는데 정말 허무하게도 time.sleep(0.2)를 SendCondition 함수 밑에 써넣으니까 해결됐다. 버그를 겪고서 깨달은 사실.. 해결책은 생각보다 엄청 가까이 있을지도 모른다. 2020. 12. 4.