Kiwoom明火

koap的Python项目详细描述


KOAPY

PyPI VersionPyPI Python VersionsPyPI Status
Travis CI Build StatusReadTheDocs Documentation Build StatusCodecov CoverageRequires.io Requirements Status
PyPI LicenseFOSSA Status
Gitter Chat

Kiwoom Open Api Python

Features

KOAPY是为了让{a12}在Python中更容易使用而制作的现场包装和工具。

利用

培养中提供的OpenAPI所需的以下知识, 将焦点放在了只要有一定程度的基本Python知识就可以轻松使用上。

  • Keum提供的OpenAPI的OCNX库结构
  • OCNX在Python驱动PyQt5/PySide2^{tt1}$生成
  • 控制中,用于函数调用的^{tt2}$函数使用
  • 为了处理
  • 活动,适当的^{tt3}$/^{tt4}$设置及处理

KOAPY提供以下功能。

  • PyQt5/PySide2为基础的GUI环境,不需要每天都像一般的库一样带着使用。 可以用CLI形态除此之外在各种地方也很容易使用
  • 控制函数调用时,可以像明细中的形态一样,像Python函数一样调用。 之后KOAPY会灵活处理 每次按明细填写^{tt2}$的参数,或者对所有存在的函数不需要提前让Rapper函数受损。
  • 即使不熟悉
  • 活动处理及非同步程序设计,也可以通过比较容易的接口来利用相关功能。 从最简单的登录处理到TR/实时数据处理,以及订单处理等多种剧本的基本活动处理逻辑。
  • 股票基本信息申请到一峰/分封等行情数据确认,还有耶稣金/余额确认,一般常用的功能 提供预制的函数。函数调用结果中,桌面性信息提供^{tt6}$类型,之后分析和处理都很有用。
  • TR的输入/输出数据结构,实时数据FID目录,关于错误代码的说明文等, 在开发过程中所需的各种隐喻信息,可以在语言内的库中立即查询和应用。 每次打开{a23}或KOAStudio进行参考,以后不需要一一进行硬编码。
  • 通过
  • 本地网络gRPC可以组成服务器-客户端形态。 由此摆脱了“由于库兼容性,只能在32bit环境中工作”的制约,客户端可以使用Pyphon 64bit。 甚至可以将{a25}支持的所有语言写成客户端使用。
  • 除《li》外,还提供了信息/提醒功能、确认休场日、TR调用时限制调用次数等开发和利用所需的多种附加功能。 即使不一定要制作Python代码,也会提供包括各种各样的CLI,以便利用基本功能。 利用CLI确认各市场的代码目录,确认股票基本信息,确认和储存一封/分封数据,实时数据订阅等 您可以在没有代码的情况下使用多种功能。服务器也可以用CLI Comment轻松启动。

以下是运用KOAPY的示例脚本:

importloggingimportthreadingimportgrpcfromkoapyimportKiwoomOpenApiContextfromkoapyimportRealTypefrompprintimportPrettyPrinterfromgoogle.protobuf.json_formatimportMessageToDictfrompandasimportTimestampfromtrading_calendarsimportget_calendarpp=PrettyPrinter()krx_calendar=get_calendar('XKRX')# 주문 테스트 전에 실제로 주문이 가능한지 확인 용도defis_currently_in_session():is_in_session=Falsenow=Timestamp.now(tz=krx_calendar.tz)today_session=now.normalize()ifkrx_calendar.is_session(today_session):opening,closing=krx_calendar.open_and_close_for_session(today_session)is_in_session=opening<=now<=closingreturnis_in_sessionwithKiwoomOpenApiContext()ascontext:# 로그인 예시logging.info('Logging in...')context.EnsureConnected()logging.info('Logged in.')# 기본 함수 호출 예시logging.info('Getting stock codes and names...')codes=context.GetCodeListByMarketAsList('0')names=[context.GetMasterCodeName(code)forcodeincodes]# 위에서 가져온 정보로 삼성전자의 code 확인codes_by_name=dict(zip(names,codes))logging.info('Checking stock code of Samsung...')samsung_code=codes_by_name['삼성전자']code=samsung_codelogging.info('Code: %s',code)# TR 예시 (opt10081)logging.info('Getting daily stock data of Samsung...')data=context.GetDailyStockDataAsDataFrame(code)logging.info('Daily stock data:')print(data)# 조건검색 예시condition_name='대형 저평가 우량주'logging.info('Getting stock codes with condition: %s',condition_name)codes,info=context.GetCodeListByCondition(condition_name,with_info=True)print(codes)print(info)# 주문처리 예시first_account_no=context.GetFirstAvailableAccount()request_name='삼성전자 1주 시장가 신규 매수'# 사용자 구분명, 구분가능한 임의의 문자열screen_no='0001'# 화면번호account_no=first_account_no# 계좌번호 10자리, 여기서는 계좌번호 목록에서 첫번째로 발견한 계좌번호로 매수처리order_type=1# 주문유형, 1 : 신규매수code=samsung_code# 종목코드, 앞의 삼성전자 종목코드quantity=1# 주문수량, 1주 매수price=0# 주문가격, 시장가 매수는 가격설정 의미없음quote_type='03'# 거래구분, 03 : 시장가original_order_no=''# 원주문번호, 주문 정정/취소 등에서 사용# 현재는 기본적으로 주문수량이 모두 소진되기 전까지 이벤트를 듣도록 되어있음 (단순 호출 예시)ifis_currently_in_session():logging.info('Sending order to buy %s, quantity of 1 stock, at market price...',code)foreventincontext.OrderCall(request_name,screen_no,account_no,order_type,code,quantity,price,quote_type,original_order_no):pp.pprint(MessageToDict(event))else:logging.info('Cannot send an order while market is not open, skipping...')# 실시간 예시code_list=[code]fid_list=RealType.get_fids_by_realtype('주식시세')real_type='0'# 기존 화면에 추가가 아니라 신규 생성# 현재는 기본적으로 실시간 이벤트를 무한정 가져옴 (커넥션 컨트롤 가능한 예시)logging.info('Starting to get realtime stock data for code: %s',code)event_iterator=context.GetRealDataForCodesAsStream(code_list,fid_list,real_type,screen_no=None,infer_fids=True,readable_names=True,fast_parse=False)defstop_listening():logging.info('Stopping to listen events...')event_iterator.cancel()threading.Timer(10.0,stop_listening).start()# 10초 이후에 gRPC 커넥션 종료하도록 설정# 이벤트 불러와서 출력처리try:foreventinevent_iterator:pp.pprint(MessageToDict(event))exceptgrpc.RpcErrorase:print(e)logging.info('End of example')

以外,关于使用方法的各种例子可以在{a27}文件夹中确认。

Installation

该库可通过{a28}设置:

$ pip install koapy

如果您想使用除了基本功能以外的额外功能,您必须像下面一样设置额外的依赖性。

例如backtrader相关功能构成的^{tt7}$模块子的功能, 执行以下命令:

$ pip install koapy[backtrader]
关于

详细的安装方法,请参考{a31}。

Usage

设置后,请参考详细使用方法Usage

现在是阿尔法阶段,所以没有充分测试很多功能是否真的没有问题。 如果您想要用于实战训练,请自行经过充分的测试后再使用。 开发者对库使用造成的损失不负任何责任。

也在阿尔法阶段进行开发,库的结构可能会持续急剧变化,请参考。

Licensing

KOAPY以多重许可证方式发放, 用户可以根据自己的意图和使用方式在以下许可证选项中选择一个使用。

关于

许可证选择,推荐的指导方针如下。

  • MIT License
      适合普通用户。 如果您喜欢《li》短而单纯的许可证,请选择该许可证。
  • Apache License 2.0
      虽然与《li》MIT许可证没有太大的区别,但是关于专利有明确的许可条款。 如果担心“li”以后侵犯专利权的诉讼,可以代替MIT许可证选择。
  • GNU General Public License v3.0 or later
      根据
    • FSF/GPL追求的Copyleft的价值,是可选择的选项之一。
    • 除了
    • 以外,利用{a29}相关功能的情况下,KOAPY必须通过{str 1}$必须以GPLv3+发行。
    • 具体包括以下情况的话,相当于GPLv3+分发条件。 安装
    • pip install koapy[backtrader]命令设置
    • 使用
    • 时使用^{tt7}$模块子的功能
  • 这是backtrader以GPLv3+发行, 因为根据该许可证的要求,使用该软件的软件也需要通过GPLv3+发布。
  • 添加
  • PySide2代替PyQt5使用的情况也相似的理由,KOAPY必须以{str 1}$必须以GPLv 3发布。
  • 具体需要以下内容PySide2或者PyQt5
  • ^{tt10}$
  • ^{tt11}$
  • 仅供参考,当前PySide2^{tt2}$函数中发现了错误,临时将下端使用PyQt5。 安装
  • 时需要安装^{tt 13}$命令要做。
  • 当前函数的参数超过8个时PySide2无法正常调用函数。也许我还没有找到方法。
  • 具体^{tt14}$函数对应PySide2使用时无法正常订购。
  • 关于

    各许可证的许可及要求事项,简单整理的内容可以在{a57}中参考。

    但请参考上述内容并不是法律上的建议。

    Credits

    This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

    History

    0.1.12 (2020-10-11)

    • Latest release.

    0.1.2 (2020-09-19)

    • First release on PyPI.

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


    热门话题
    java本机方法的源代码可用吗?   java如何使父方法抛出异常?   java Android以编程方式设置不同屏幕大小/密度的布局   java如何使用一个变量来管理所有客户端请求   java输入一个txt文件,每行有一组数字   json java从jsonobject获取jsonarray错误   java将一个(WAV)写入一个文件只会说一个单词(最后一个单词)   java Telnet忽略原始字节   proguard java。运行桌面应用程序时出现lang.VerifyError   java用左键移动JLabel?   java如何在jText区域验证选项卡?   文件服务器客户端Javasocket编程中的字符串搜索   java省略了JSTL中的最后一个逗号<c:out>   java如何找到if或else代码已执行的次数?   java JavaScript WebSocket send()方法未执行   浮点数声明上的java标识符预期错误   java这是指二进制搜索算法吗?   编译mod at:reobfJar java时的minecraft问题。util。拉链ZipException:重复条目   java检测特定的震动运动(如图所示:D)