breadum / kiwoom Goto Github PK
View Code? Open in Web Editor NEW키움 증권 OpenAPI 파이썬 심플 라이브러리
License: MIT License
키움 증권 OpenAPI 파이썬 심플 라이브러리
License: MIT License
Historical data를 실행하면 입력한 시작날짜와 종료와 무관하게 3월 데이터만 csv로 추출합니다. 도저히 이해가 되지 않아 글을 올립니다. 제가 잘못하고 있는 것인가요?
도움부탁드립니다.^^
죄송합니다 tutorial trading은 선물옵션 주문예시였네요 (send_order_fo)
inputs parameter 수정하고 send_order로 수정해서 코딩중입니다.
감사합니다~
조건검색은 OnReceiveConditionVer, OnReceiveTrCondition,OnReceiveRealCondition 등의 slot들 처리함에 있어서
self.api.set_connect_hook('on_receive_tr_condition', param='condition_name')
self.api.connect('on_receive_tr_condition', slot=self.server.test_condition1)
self.api.set_connect_hook('on_receive_real_condition', param='condition_name')
self.api.connect('on_receive_real_condition', slot=self.server.test_condition1)
위같이 하면, self.server 내에서 조건식명이 같기 때문에(test_condition1) 함수명을 어떻게 처리하나요 (중복)?
안녕하세요. MyBot의 signal로 정의 되어 있는 send_order를 MyServer 의 slot 함수에서 호출 하는 방법이 있을까요?
예를 들면 on_receive_real_data 에서 send_order를 호출하려 합니다.
안녕하세요.
코드는 Tutorial 의 5번 "TR Data.py" 에서 나고, 보유종목이 많을 때, 다음 과 같은 에러가 나네요.
오류 내용입니다.
[GetPCIdentity] VER 3.2.0.0 build 2015.8.12
로그인 정상처리
Bot.deposit() 호출
화면번호: 0000, 요청이름: deposit, TR코드: opw00001
[100000] 모의투자 조회완료
Server.deposit(scr_no, rq_name, tr_code, record_name, prev_next) 호출
Server.deposit(scr_no, rq_name, tr_code, record_name, prev_next) 종료
Bot.deposit() 종료
Bot.balance(prev_next) 호출
화면번호: 0000, 요청이름: balance, TR코드: opw00018
[100000] 모의투자 조회가 계속됩니다. 계속조회시 다음키를 누르십시오.
Server.balance(scr_no, rq_name, tr_code, record_name, prev_next) 호출
Bot.balance(prev_next) 호출
Bot.balance(prev_next) 종료
화면번호: 0000, 요청이름: balance, TR코드: opw00018
[100000] 모의투자 조회가 계속됩니다. 계속조회시 다음키를 누르십시오.
Server.balance(scr_no, rq_name, tr_code, record_name, prev_next) 호출
Bot.balance(prev_next) 호출
Bot.balance(prev_next) 종료
화면번호: 0000, 요청이름: balance, TR코드: opw00018
[100000] 모의투자 조회가 계속됩니다. 계속조회시 다음키를 누르십시오.
Server.balance(scr_no, rq_name, tr_code, record_name, prev_next) 호출
Bot.balance(prev_next) 호출
Bot.balance(prev_next) 종료
화면번호: 0000, 요청이름: balance, TR코드: opw00018
[100000] 모의투자 조회가 계속됩니다. 계속조회시 다음키를 누르십시오.
Server.balance(scr_no, rq_name, tr_code, record_name, prev_next) 호출
Bot.balance(prev_next) 호출
Traceback (most recent call last):
File "c:\Users\Administrator\OneDrive - DZS\dev\ktrader-dev\kydwin\kiwoom\core\connector.py", line 386, in wrapper
slot(*args)
File "c:\Users\Administrator\OneDrive - DZS\dev\ktrader-dev\kydwin\5. TR Data.py", line 352, in balance
fn(prev_next) # call signal function again to receive remaining data
File "c:\Users\Administrator\OneDrive - DZS\dev\ktrader-dev\kydwin\5. TR Data.py", line 217, in balance
self.api.comm_rq_data('balance', tr_code, prev_next, '0000')
File "c:\Users\Administrator\OneDrive - DZS\dev\ktrader-dev\kydwin\kiwoom\config\error.py", line 73, in wrapper
print(f'\nAn error occurred from {fn.name}.\n * {msg(out)}')
File "c:\Users\Administrator\OneDrive - DZS\dev\ktrader-dev\kydwin\kiwoom\config\error.py", line 50, in msg
etype, msg = ERR[ecode]
KeyError: -211
실시간 목록 - 주식체결 신청하여 실시간 현재가를 받아올려고 하는데요 이게 맞는지 모르겠습니다. ㅠ
고견 부탁드립니다.
class Bot(Bot):
def init(self, server):
super().init(server)
self.api.set_connect_hook('on_receive_real_data', 'real_type')
self.api.connect('on_receive_real_data', signal=self.real_price, slot=self.server.real_price)
def real_price():
self.api.set_real_reg("2000", "005930;005380", "10", "0") #삼성전자;현대차 10:현재가
print('주가체결 구독')
class Server(Server):
def init(self):
super().init()
self.downloading = False
def real_price():
for code in code_list:
real_dict={code:{}}
current_price = self.api.get_comm_real_data(code, '10')
real_dict[code].update({'현재가':current_price})
if name == 'main':
app = QApplication(sys.argv)
bot = Bot(Server())
bot.login()
bot.account()
bot.balance()
bot.real_price()
share.py single내에 fn data가 있는지 없는지 확인 방법 ?
안녕하세요.
kiwoom 모듈을 설치 후 판다스 32bit 버전을 따로 설치하려고 할 때 판다스가 더이상 구버전의 wheel을 지원하지 않게 되어 설치가 불가한 것 같습니다. 그에 따라 kiwoom 모듈의 사용도 불가합니다.
이젠 더이상 kiwoom 모듈을 사용이 불가능한 건가요?
안녕하세요.
기존에는 _OnReceiveTrData_slot의 경우 code가 인자로 넘어오지 않기 때문에, 분봉울 가져올 때 rq_name의 인자로 조건식명-코드 (예: '조건식_417790')로 넘겨서 코드와 조건식을 mapping해서 사용했습니다. 그런데 제공해주신 Library에서 자동으로 hook되어 함수명으로 직접 연결되기 때문에, rq_name이 계속 코드에 따라 수시로 바뀌는 환경에서는 고정적인 함수를 만들 수 없게 됩니다만, 이 경우 hook하지 않고 원래대로 slot 동작으로 rq_name을 받아서 처리하는 방법 있을까요?
class MyServer(Server)에 코드와 조건식을 mapping하는 글로벌 변수를 잡아서 분봉 TR요청을 하고 TR로 들어오면 해당 글로벌 변수에 넣어 사용하면 될텐데, 이렇게 해도 조건식에 의해서 detection된 TR요청한 순서대로 들어온다는 보장이 되는지 잘 모르겠네요.
현재는
class MyBot(Bot):
def __init__(self, server = None):
super().__init__(server)
self.api.OnReceiveTrData.connect(self.server.on_receive_tr_data)
class MyServer(Server):
def __init__(self):
super().__init__()
...
def on_receive_tr_data(self, scr_no, rq_name, tr_code, record_name, prev_next):
condition, code = rq_name.split('_')
이런식으로 했는데, 동작은 하지만 아래 warning이 들어와요~
kiwoom.on_receive_tr_data(4080, 주식분봉차트조회요청_417790, opt10080, , 0) has been called.
But the event handler, 'on_receive_tr_data', is not connected to any slot.
Please try to connect event and slot by using kiwoom.connect() method
안녕하세요?
실서버에서 구동중에
주로 9시 ~ 9시 15분 사이에
api/ set_real_reg
api/ set_real_remove
(실시간 시세 조회 및 해제)
요청 시 빈번하게 전체 프로세스가 멈추는 현상이 있습니다.
( 3초마다 한번씩 API를 요청하여 빈도를 현저하게 낮추어도 동일하게 문제가 발생하고 있습니다.
장초반 10~20종목 정도 set_real_reg로 등록합니다 )
해당 현상 발생시 catch_error로 오류이벤트가 발생하지 않고
멀티스레딩 중인 스케쥴러(로깅) 또한 함께 멈추는 것으로 보입니다.
디버깅을 어떻게 해야할지
해당 원인이 키움 쪽에서 응답없음이라면,
어떤 식으로 대응해야할지 조언 부탁드립니다.
안녕하세요.
로그인 이후 on_event_connect 이벤트 핸들러에서 접속 이후 처리를 하려고 합니다. (계좌비번을 자동으로 넣는 RPA 코드 실행) 그런데 해당 함수가 로그인 이후에 호출이 안됩니다. (break point를 걸었으나 걸리지 않음) 혹시 이유를 알 수 있을까요?
def on_event_connect(self, err_code):
"""
# 개발가이드 > 로그인 버전처리
[OnEventConnect()이벤트]
OnEventConnect(
long nErrCode // 로그인 상태를 전달하는데 자세한 내용은 아래 상세내용 참고
)
로그인 처리 이벤트입니다. 성공이면 인자값 nErrCode가 0이며 에러는 다음과 같은 값이 전달됩니다.
nErrCode별 상세내용
-100 사용자 정보교환 실패
-101 서버접속 실패
-102 버전처리 실패
"""
pass
bot에서 ready_optsise(or SetRealReg 등록) 호출로 server slot이 '실시간 체결 데이터'(on_receive_real_data)를
실시간 수신 받게 되면 계속 unloop가 거의 실시간 반복 실행되는 상황인데 굳이 unloop 지정 해야 하는지 ?
=> 실시간 수신 받으면서 계속 unloop실행됨으로 다른 함수의 unloop 실행을 가로채는 것 아닌지 ? 어찌 풀어야 할지 ?
=> 도움 답변 감사합니다.
api.py SendOrderFO parameter 가 한개 부족
fn = "SendOrderFO(QString, QString, QString, Int, QString, Int, Int, QString, QString)"
=>> fn = "SendOrderFO(QString, QString, QString, QString, int, QString, QString, int, QString, QString)"
안녕하세요.
Server Class의 아래있는 methold를 vscode가 인식하지 못하는데, 인식하게 할 수 있는 방법이 있을까요?
(인식이라 함은 Ctrl+마우스 버튼 누를 때 hyperlink처럼 함수를 보여주거나 하는 것을 말합니다)
class MyServer(Server):
def __init__(self):
super().__init__()
def condition_ver(self, lRet, sMsg):
condition_list = self.api.get_condition_name_list()
이것을 Server.py에서,
class Server:
def __init__(self):
self.api = None --> 이곳을 self.api = Kiwoom() 으로 하면 해결이 되지만, 이렇게 하는 것이 맞는지요?
self.share = None
def init(self, api, share):
self.api = api
self.share = share
Kiwoom()
으로 객체 만들 때
Canceled future for execute_request message before replies were done
문구와 함께 에러가 발생합니다.
터미널에서 실행 테스트 했을 시에
QWidget: Must construct a QApplication before a QWidget
메시지를 출력하네요.
kiwoom 객체 생성 전에 QT app 먼저 실행해주니까 에러없이 실행됩니다~
app = QApplication(sys.argv)
api.py SendOrderFO 주문 요청과 이벤트 처리 connect 하려고 하는데 아래와 같이 하면 적절한지요 ?
rq_name 대신 gubun ??
self.api.set_connect_hook('on_receive_chejan_data', 'gubun')
self.api.connect('on_receive_chejan_data', signal=self.orderfo, slot=self.server.orderfo)
주문후 이벤트 처리하는 예제를 tutorials 에 추가해주시면 감사 감사 ~
안녕하세요 kiwoom wrapper 직접 개발하다가
잘 만들어진 프로젝트 발견해서 fork 하려고 합니다
근데 업종별 코드 (농업, 의약 등) 를 얻는 방법을 찾기가 힘든데
혹시 raw kiwoom api 에서 이걸 확인할 방법이 있을까요??
유증이나 액분같은 상황이 벌어지면
이전의 수정주가가 변경될텐데
수집 데이터는 그냥 최신값만 업데이트 되는 건가요??
아니면 수정주가 변경이 있으면 첨부터 다시 받아서 업데이트 되는 건지 궁금합니다.
키움 해외주식선물 Python Wrapper 모듈 계획은 있는지요 ?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.