elbakramer/koapy

0.4버젼 backtrader 샘플 에러 로그

Closed this issue · 7 comments

안녕하세요.

bactrader 샘플을 실행하는데 아래와 같에 에러가 발생하네요.
혹시 원인을 알 수 있을까요?

(base) C:\quant\kiwoom>C:/ProgramData/Anaconda3/python.exe c:/quant/kiwoom/test_2.py
2021-07-13 11:17:35,198 [INFO] NumExpr defaulting to 4 threads. - utils.py:141
Traceback (most recent call last):
File "c:/quant/kiwoom/test_2.py", line 14, in
File "C:\Users\my\AppData\Roaming\Python\Python38\site-packages\shiboken2\files.dir\shibokensupport_feature_.py", line 142, inrt_feature_.py", line 142, in _import
return original_import(name, *args, **kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\koapy\backtrader\KiwoomOpenApiPlusEventStreamer.py", line 275, in py", line 275, in
class KiwoomOpenApiPlusEventStreamer(Observer, Logging): the metaclasses of all its bases
TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of
the metaclasses of all its bases

돌려보신 샘플의 코드를 같이 공유주시면 좀 더 정확하게 확인이 가능할거 같습니다.

일단 붙여넣어주신 에러코드를 봤을때 메타클래스 충돌이 일어나는것처럼 보이네요.
기존의 Observer 클래스가 아마 내부구현을 사용했을건데 이후 그게 rx 의 구현을 쓰도록 바뀐게 원인 같구요.

KiwoomOpenApiPlusEventStreamer.py 코드의 KiwoomOpenApiPlusEventStreamer 클래스를 아래 비슷하게 수정해보면 될거 같아요.

...

class MetaKiwoomOpenApiPlusEventStreamer(type(Logging), type(Observer)):
    pass


class KiwoomOpenApiPlusEventStreamer(
    Observer, Logging, metaclass=MetaKiwoomOpenApiPlusEventStreamer
):

...

아니면 그냥 base 클래스에서 Observer 를 빼버려도 동작하는데는 크게 차이가 없을거 같기도 합니다.
저게 그냥 on_next(), on_error(), on_completed() 를 가지고 있다/구현해야 한다 를 나타내려고 저렇게 한거라서요.

위의 두가지 방식 모두 잠깐 테스트해봤는데 일단 에러는 더이상 발생하지 않는거 같습니다.
실제로 데이터까지 제대로 연동되는지까지는 확인을 못해봤네요.

아래 클래스 정의에서 말씀하신대로 Observer만 삭제하고 나니 실행이 되네요.

class KiwoomOpenApiPlusEventStreamer(Observer, Logging):

내일 live로 broker가 작동하는지 까지 체크해 보도록 하겠습니다.

감사합니다.

위의 두가지 방식 모두 잠깐 테스트해봤는데 일단 에러는 더이상 발생하지 않는거 같습니다.
실제로 데이터까지 제대로 연동되는지까지는 확인을 못해봤네요.

Observer 삭제하고 실행하니, OnReceiveRealDat() 에서 디버그 로깅을 뿌린 이후 진행이 안되네요.
live로 Backtrader가 실행되는 이전 버젼이 있을런지요

어느 버전이 실행될런지는 잘 모르겠습니다.

사실 REAME 의 튜토리얼 코드에 있는 내용을 벗어나는 기능들은 매번 테스트를 하거나 하진 않아서요.
핵심기능 외에는 정상적인 동작을 보장하는게 힘든 상황입니다.

아마도 #28 의 케이스처럼 당시에 0.1.15 버전을 사용하셨을때는 같이 잘 사용하셨지 않나 싶은데요.
혹시 해당 버전으로 테스트 해보시는건 어떤가요?

디버그 로깅을 뿌린 이후 진행이 안되는 이슈가 #14 와 동일한 현상이 아닐까 생각해서, 관련해서는 이쪽에서 진행하고자 합니다.
이외에 메타클래스 관련 이슈는 해소된 것으로 보여서 이슈 닫습니다.