Giter VIP home page Giter VIP logo

python-kis's Issues

[๋ฒ„๊ทธ]

๋ฒ„๊ทธ ์„ค๋ช…

error from callback <bound method KisRTClient._onclose of <Pykis._pykis.rtclient.rtclient.KisRTClient object at 0x7f1558ba72d0>>: KisRTClient._onclose() takes 2 positional arguments but 4 were given

realtime = True (default)์ผ๋•Œ ๊ฐ„ํ˜น ์œ„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์›์ธ์„ ์•Œ ์ˆ˜ ์žˆ์„๊นŒ์š”?
์ž‘์—… ์ง„ํ–‰์— ์˜ํ–ฅ์„ ๋ผ์นœ์ ์€ ์—†์ง€๋งŒ ์œ„ ์ด์Šˆ๋กœ ๋ฐœ์ƒ ํŒŒ์ƒ๋˜๋Š” ์ถ”๊ฐ€์ ์ธ ์ด์Šˆ์˜ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์„๊นŒ์š”?

์žฌ๊ตฌํ˜„

[๋ฌธ์žฅ์„ ์ง€์šฐ๊ณ , ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•œ ์ฝ”๋“œ๋‚˜ ์„ค๋ช…์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.]

์›์ธ

[์›์ธ์„ ๋ชจ๋ฅธ๋‹ค๋ฉด ๋นˆ์นธ์œผ๋กœ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.]

๊ฐœ๋ฐœ ํ™˜๊ฒฝ

ํŒŒ์ด์ฌ ๋ฒ„์ „: ?

์‚ฌ์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „

[๊ท€์ฐฎ์œผ์‹œ๋ฉด ์•ˆ ์จ๋„ ๋ผ์š”...]

์ด๋ฆ„ ๋ฒ„์ „
requests ?
SQLAlchemy ?
websocket-client ?
pycryptodome ?
colorlog ?

์ถ”๊ฐ€ ๋‚ด์šฉ

[์งˆ๋ฌธ] ์˜ˆ์•ฝ์ฃผ๋ฌธ ๊ธฐ๋Šฅ

์งˆ๋ฌธ ๋‚ด์šฉ

์•ˆ๋…•ํ•˜์„ธ์š”. ์žฅ์ด ์—ด๋ฆฌ๊ธฐ ์ „์— ์ฃผ๋ฌธ์„ ๋ฏธ๋ฆฌ ๋„ฃ์œผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์„๊นŒ์š”?

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
๊น€์ง„ํ˜„ ๋“œ๋ฆผ

[๋ฒ„๊ทธ] ํ•ด์™ธ์ฃผ์‹ ๋ชจ์˜ ํˆฌ์ž ๋งค๋„์‹œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„๊ทธ ์„ค๋ช…

ํ•ด์™ธ์ฃผ์‹ ๋งค์ˆ˜์‹œ์—๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋‚˜ ๋งค๋„์‹œ์—๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์žฌ๊ตฌํ˜„

๋‚˜์Šค๋‹ฅ ๋งค๋„์ฃผ๋ฌธ์„ ์‹คํ–‰ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
order1 = account.overseas_sell(
market="๋‚˜์Šค๋‹ฅ",
code="TSLA",
qty=3,
unpr=240
)
print(order1.message)

์›์ธ

๋ชจ์˜ ํˆฌ์ž์˜ TR_ID_CODE_MAP์— ์žˆ๋Š” TR_ID ๊ฐ€ ์ž˜๋ชป๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
overseas_order.py ์˜ 18ํ–‰ - 20ํ–‰์ž…๋‹ˆ๋‹ค.
+++++++++++++๋ฐœ์ทจ+++++++++++++
'NASD': ('VTTT1002U', 'VTTT1006U'), # ๋ฏธ๊ตญ
'NYSE': ('VTTT1002U', 'VTTT1006U'), # ๋ฏธ๊ตญ
'AMEX': ('VTTT1002U', 'VTTT1006U'), # ๋ฏธ๊ตญ
+++++++++++++++++++++++++++++

VTTT1006U -> VTTT1001U ์ด๊ฒŒ ๋งž์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  67ํ–‰์— ์žˆ๋Š” OVERSEAS_ORD_DVSN_MAP ์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ VTTT1001U๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ์•ˆ๋‚ฉ๋‹ˆ๋‹ค.
์˜ˆ) 'VTTT1001U': {'00', '์ง€์ •๊ฐ€'},

์ˆ˜์ • ๋ถ€ํƒํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ํ™˜๊ฒฝ

ํŒŒ์ด์ฌ ๋ฒ„์ „: 3.11

์‚ฌ์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „

[๊ท€์ฐฎ์œผ์‹œ๋ฉด ์•ˆ ์จ๋„ ๋ผ์š”...]

์ด๋ฆ„ ๋ฒ„์ „
requests ?
SQLAlchemy ?
websocket-client ?
pycryptodome ?
colorlog ?

์ถ”๊ฐ€ ๋‚ด์šฉ

[์งˆ๋ฌธ] thread _at_sync ์˜ ๋ฌดํ•œ ์ƒ์„ฑ ํ˜„์ƒ

์•ˆ๋…•ํ•˜์„ธ์š”. ๋ชจ์˜๊ณ„์ขŒ๋ฅผ ํฌํ•จํ•ด์„œ 5๊ฐœ ์ •๋„์˜ ๊ณ„์ •์„ ํ•˜๋‚˜์˜ process์—์„œ ๋Œ๋ ค๋ณด์•˜๋Š”๋ฐ,
๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ํ˜„์ƒ์ด ๋‚˜ํƒ€๋‚ฌ๊ณ , ์›์ธ์„ ํŒŒ์•…ํ•ด๋ณด๋‹ˆ thread๊ฐ€ ์ง€์†์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ์บ์‹ฑํ•œ ์ข…๋ชฉ ์ •๋ณด๋“ค์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ,

Q1. ํ˜น์‹œ ์ œ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์งง์€ ์‹œ๊ฐ„ ๋™์•ˆ ํŒŒ์•…ํ•˜๊ณ  ๋งŒ๋“  ์†”๋ฃจ์…˜์ด ๋งž์„์ง€ ์—ฌ์ญค๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

  1. 5๊ฐœ์˜ ๊ณ„์ • ์ค‘์—์„œ 1๊ฐœ๋ฅผ ๋งˆ์Šคํ„ฐ ๊ณ„์ •์œผ๋กœ ์ง€์ •ํ•˜๊ณ , auto_sync๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค. ๋‚˜๋จธ์ง€๋Š”auto_sync=False๋ฅผ ์ ์šฉํ•œ๋‹ค.
  2. ๋ชจ๋“  ๊ณ„์ •์€ market_database_path๋ฅผ ๋™์ผํ•˜๊ฒŒ ๊ฐ€์ ธ๊ฐ„๋‹ค.
    ์“ฐ๋ ˆ๋“œ ๋ฌดํ•œ๋Œ€

[์งˆ๋ฌธ] token expire ์„ค์ •

๋งŒ๋“ค์–ด์ฃผ์‹  ํŒจํ‚ค์ง€ ์ž˜์“ฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ œ๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฃผ๊ฐ€๋ฅผ ์ฒดํฌํ•˜๋Š”๋ฐ, ์ด๊ฒŒ PyKis๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ token์ด ๋งŒ๋“ค์–ด์ง€๊ณ  ์ด๊ฒƒ ๋•Œ๋ฌธ์— ์นด์นด์˜คํ†ก์ด ๊ทธ ๋•Œ๋งˆ๋‹ค ๋‚ ์•„์˜ค๋„ค์š”. ์ƒ์„ฑ์‹œ token expires_in์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ์š”? ์•„๋‹ˆ๋ฉด PyKis object๋ฅผ pickle/redis๋กœ ์บ์‹ฑํ•ด์„œ ์“ฐ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ• ๊นŒ์š”?

[์งˆ๋ฌธ] ์˜ˆ์•ฝ์ฃผ๋ฌธ ๊ธฐ๋Šฅ์ด ์žˆ์„๊นŒ์š”?

์งˆ๋ฌธ ๋‚ด์šฉ

์•ˆ๋…•ํ•˜์„ธ์š”. ์žฅ์ด ์—ด๋ฆฌ๊ธฐ ์ „์— ์ฃผ๋ฌธ์„ ๋ฏธ๋ฆฌ ๋„ฃ์œผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์„๊นŒ์š”?

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
๊น€์ง„ํ˜„ ๋“œ๋ฆผ

[์งˆ๋ฌธ] ์ข…๋ชฉ ์ •๋ณด ์ž๋™ ๋™๊ธฐํ™” ์—ฌ๋ถ€(market_auto_sync)์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•œ๊ฒŒ ์žˆ์Šต๋‹ˆ๋‹ค.

์งˆ๋ฌธ ๋‚ด์šฉ

์•ˆ๋…•ํ•˜์„ธ์š”. ๊ฐœ๋ฐœ์ž๋‹˜
์ข…๋ชฉ ์ •๋ณด ์ž๋™ ๋™๊ธฐํ™” ์—ฌ๋ถ€(market_auto_sync)๋ฅผ False๋กœ ํ–ˆ์„๋•Œ ์‹คํ–‰์†๋„๊ฐ€ ๋น ๋ฅธ๊ฑฐ ๊ฐ™์•„ False๋กœ ์„ค์ • ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
ํ˜น์‹œ False๋กœ ํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†์„๊นŒ์š”?
๋งŒ์•ฝ False๋กœ ํ–ˆ์„๋•Œ ์–ด๋–ค๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ• ์ง€ ์กฐ์–ธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

[์งˆ๋ฌธ] ์ƒˆ๋กœ์šด ํด๋ž˜์Šค์—์„œ ์ž‘๋™

class TradeLive(object):
    def __init__(self):
        self.kis = PyKis(
            appkey=APPKEY,
            appsecret=APPSECRET,
            virtual_account=True,
        )

    def __enter__(self):
        return self

    def __exit__(self, type_unused, value_unused, traceback_unused):
        pass

    def run(self):
        self.kis.rtclient.event.cntg.add(self.on_cntg)
        self.kis.rtclient.event.oder.add(self.on_oder)
        stock = self.kis.stock('000660')
        stock.rt_add('์ฒด๊ฒฐ๊ฐ€')

    def on_cntg(self, cli: KisRTClient, res: KisRTPrice):
        print(f'์‹œ๊ฐ„: {res.stck_cntg_hour.strftime("%H:%M:%S")}', end=' ')

    def on_oder(self, cli: KisRTClient, res: KisRTConclude):
        print(f'{res.acnt_no} {res.acpt_yn_name} {res.cntg_isnm} {res.cntg_yn_name} {res.order_kind_name}', end=' ')

ํด๋ž˜์Šค์— ๋„ฃ์–ด์„œ ์‚ฌ์šฉํ•˜๋ฉด run_forever()๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๊ณ  ์ฃฝ๋Š”๋ฐ์š”. ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ๊ณ ์น ์ˆ˜ ์žˆ์„๊นŒ์š”?

[์งˆ๋ฌธ] kis.market.kospi.all() ๊ธฐ๋Šฅ ์ค‘ ๊ฑฐ๋ž˜ ๋ถˆ๊ฐ€ ์ข…๋ชฉ ์ œ๊ฑฐ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ์งˆ์˜๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”.

์ข‹์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ณต์œ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

kis.market.kospi.all()
kis.market.kosdaq.all()
์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ

์ด์ง€์Šค229ํ˜ธ Class A ์™€ ๊ฐ™์ด, ์‚ฌ์‹ค์ƒ ๊ฑฐ๋ž˜๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋“ค์ด ๋งŽ์ด ๋‚˜์™€์„œ ํ•ด๋‹น ์–ด๋–ป๊ฒŒ ์ œ๊ฑฐํ•ด์•ผํ• ์ง€ ๊ณ ๋ฏผ ์ค‘์— ์žˆ์Šต๋‹ˆ๋‹ค.

  1. return ๊ฐ์ฒด์— kospi_issu_yn๋Š” ์ฝ”์Šคํ”ผ์— ์ƒ์žฅ๋˜์—ˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด ๋งž์„๊นŒ์š”?
  2. kosdaq_issu_yu์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋”ฐ๋กœ ์—†๋Š”๋ฐ ํ˜น์‹œ ์ฝ”์Šค๋‹ฅ์— ๊ฑฐ๋ž˜ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ์š”?

1๋ฒˆ๊ณผ 2๋ฒˆ์„ ํ™•์ธํ•˜์—ฌ "kospi_issu_yn and kospi_issu_yn" ์ธ ์ข…๋ชฉ๋งŒ ์„ ๋ณ„ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

  1. ์œ„์˜ ๋ฐฉ๋ฒ•๋ก ์ด ๊ฐœ๋ฐœ ์˜๋„์— ๋งž๋Š”์ง€ ์งˆ๋ฌธ๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

[์งˆ๋ฌธ] ํ•œํˆฌ์—์„œ ์ ‘๊ทผํ† ํฐ ๋ฐœ๊ธ‰ ๋ณ€๊ฒฝ์œผ๋กœ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์งˆ๋ฌธ ๋‚ด์šฉ

ํ•œํˆฌ์—์„œ 10์›”27์ผ 17์‹œ ์ดํ›„๋กœ ์ ‘๊ทผ ํ† ํฐ ๋ฐœ๊ธ‰๋ณ€๊ฒฝ์œผ๋กœ 1๋ถ„๋‹น 1ํšŒ์”ฉ๋งŒ ํ˜ธ์ถœ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ณ€๊ฒฝ๋˜์–ด
API๋‚ด์—์„œ ๋งค๋ฒˆ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 1๋ถ„๋‚ด์— ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ์š”?

[๊ธฐ๋Šฅ]ํ•ด์™ธ ์ฃผ์‹ ์กฐํšŒ ๋ฐ ๊ฑฐ๋ž˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์š”์ฒญ

๊ธฐ๋Šฅ ์„ค๋ช…

์•ˆ๋…•ํ•˜์„ธ์š”, python-kis ๊ฐœ๋ฐœ์ž๋‹˜,

๋จผ์ €, ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. python-kis๊ฐ€ ํฐ ๋„์›€์ด ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฐœ์„ ํ•˜์—ฌ, ํ•ด์™ธ ์ฃผ์‹ ์กฐํšŒ ๋ฐ ๊ฑฐ๋ž˜ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€ ๋˜์—ˆ์œผ๋ฉด ํ•˜๋Š” ๋งˆ์Œ์—์„œ ๊ธ€์„ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

[๋ฒ„๊ทธ] ํ•ด์™ธ์ฃผ์‹ ์ทจ์†Œ ํ•จ์ˆ˜์— ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฒ„๊ทธ ์„ค๋ช…

ํ•ด์™ธ์ฃผ์‹ ์ทจ์†Œํ•จ์ˆ˜ ์‹คํ–‰์‹œ์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์žฌ๊ตฌํ˜„

์†Œ์Šค overseas_order_revise.py ์˜ 82ํ–‰์ž…๋‹ˆ๋‹ค.
๊ตญ๋‚ด์ฃผ์‹ ์ตœ์†Œํ• ๋•Œ ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฉ”ํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋„ค์š”.
----์—๋Ÿฌ ๋ถ€๋ถ„-----
'KRX_FWDG_ORD_ORGNO': order.krx_fwdg_ord_orgno,

ํ™•์ธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

[์งˆ๋ฌธ] ํ•ด์™ธ์ฃผ์‹ ์ง€์›์— ๋Œ€ํ•ด์„œ

์งˆ๋ฌธ ๋‚ด์šฉ

์•ˆ๋…•ํ•˜์„ธ์š”.
์ข‹์€ ๋ผ์ด๋ธŒ๋ผ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐœ๋ฐœํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
ํ˜„์žฌ ๊ตญ๋‚ด ์ฃผ์‹๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ๊ฑฐ ๊ฐ™์€๋ฐ ํ•ด์™ธ์ฃผ์‹์€ ์–ธ์ œ์ฏค ์ง€์›๊ฐ€๋Šฅํ•˜์‹ค๊นŒ์š”?
๋‹ต๋ณ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

[์งˆ๋ฌธ] ๊ตญ๋‚ด์ฃผ์‹์—…์ข…๊ธฐ๊ฐ„๋ณ„์‹œ์„ธ๋ฅผ ์ฃผ์„์ฒ˜๋ฆฌํ•˜์‹  ์ด์œ  ์งˆ์˜๋“œ๋ฆฝ๋‹ˆ๋‹ค

์•ˆ๋…•ํ•˜์„ธ์š”. ์ข‹์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

ํŠœํ† ๋ฆฌ์–ผ๋Œ€๋กœ ์ง„ํ–‰ํ•˜๋˜ ์ค‘, KOSPI ์ผ๋ด‰์กฐํšŒ๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•˜๋‹ˆ, scope/sector/api/period_sector_price๋ฅผ ์ „๋ถ€ ์ฃผ์„์ฒ˜๋ฆฌ ํ•œ ๊ฒƒ์„ ํ™•์ธํ•˜์˜€์Šต๋‹ˆ๋‹ค.
ํ•ด๋‹น ์ฃผ์„์„ ์ง€์›Œ์„œ ๋‹ค์‹œ importํ•ด๋„, ํ•ด๋‹น ํ•จ์ˆ˜๋“ค์„ ์—ฌ์ „ํžˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋”๋ผ๊ณ ์š”.

ํ˜น์‹œ ์—…์ข…๊ธฐ๊ฐ„๋ณ„์‹œ์„ธ๋ฅผ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋“ค์„ ํ™œ์šฉํ•ด์„œ, ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๊ฑฐ์ง€, ์•„๋‹ˆ๋ฉด ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์ฃผ์„์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ œํ•˜์—ฌ ๋‹ค์‹œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ์š”?

[๋ฒ„๊ทธ] ์‹ค์‹œ๊ฐ„ ๊ด€๋ จ ํ•จ์ˆ˜๋“ค ๋™์ž‘ ๋ถˆ๊ฐ€

๋ฒ„๊ทธ ์„ค๋ช…

์‹ค์‹œ๊ฐ„ ๊ด€๋ จ ํ•จ์ˆ˜๊ฐ€ ๋™์ž‘์„ ์•ˆํ•ฉ๋‹ˆ๋‹ค.
์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ

Traceback (most recent call last):
  File "C:\Users\junpa\Workspace\PycharmProjects\wSplit\test\logs\live.py", line 37, in <module>
    app.run()
  File "C:\Users\junpa\Workspace\PycharmProjects\wSplit\test\logs\live.py", line 23, in run
    stock.rt_add("์ฒด๊ฒฐ๊ฐ€", timeout=100)
  File "C:\Users\junpa\Workspace\PycharmProjects\wSplit\venv\Lib\site-packages\pykis\scope\stock\stock.py", line 72, in rt_add
    return self.rtclient.add(id, self.code, timeout=timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\junpa\Workspace\PycharmProjects\wSplit\venv\Lib\site-packages\pykis\rtclient\rtclient.py", line 352, in add
    return self.register(_rtcd(id, self.key.virtual_account), tr_key, timeout=timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\junpa\Workspace\PycharmProjects\wSplit\venv\Lib\site-packages\pykis\rtclient\rtclient.py", line 327, in register
    return self._send_request(tr_id, tr_key, True, timeout=timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\junpa\Workspace\PycharmProjects\wSplit\venv\Lib\site-packages\pykis\rtclient\rtclient.py", line 324, in _send_request
    return self._wait_response(id, timeout)  # type: ignore
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\junpa\Workspace\PycharmProjects\wSplit\venv\Lib\site-packages\pykis\rtclient\rtclient.py", line 291, in _wait_response
    (future,) = as_completed([future], timeout=timeout)
    ^^^^^^^^^
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.1776.0_x64__qbz5n2kfra8p0\Lib\concurrent\futures\_base.py", line 239, in as_completed
    raise TimeoutError(
TimeoutError: 1 (of 1) futures unfinished

์žฌํ˜„ ์ฝ”๋“œ

from pykis import *
from utils.settings import Settings


class TradeLive(object):
    def __init__(self):
        self.kis = PyKis(
            appkey=Settings().MOCK_KIS['appkey'],
            appsecret=Settings().MOCK_KIS['appsecret'],
            virtual_account=True,
        )

    def __enter__(self):
        return self

    def __exit__(self, type_unused, value_unused, traceback_unused):
        pass

    def run(self):
        self.kis.rtclient.event.cntg.add(self.on_cntg)
        self.kis.rtclient.event.oder.add(self.on_oder)
        stock = self.kis.stock("000660")
        stock.rt_add("์ฒด๊ฒฐ๊ฐ€", timeout=100)

    def on_cntg(self, cli: KisRTClient, res: KisRTPrice):
        print(f'์‹œ๊ฐ„: {res.stck_cntg_hour.strftime("%H:%M:%S")}', end=" ")

    def on_oder(self, cli: KisRTClient, res: KisRTConclude):
        print(
            f"{res.acnt_no} {res.acpt_yn_name} {res.cntg_isnm} {res.cntg_yn_name} {res.order_kind_name}",
            end=" ",
        )

app = TradeLive()
app.run()
input()

์›์ธ

๊ฐœ๋ฐœ ํ™˜๊ฒฝ

ํŒŒ์ด์ฌ 3.11
์šฐ๋ถ„ํˆฌ 22.04

์ถ”๊ฐ€ ๋‚ด์šฉ

[๊ธฐ๋Šฅ] ์กฐ๊ฑด๊ฒ€์ƒ‰

๊ธฐ๋Šฅ ์„ค๋ช…

์•ˆ๋…•ํ•˜์„ธ์š”. ์กฐ๊ฑด๊ฒ€์ƒ‰ API๊ฐ€ ์ถ”๊ฐ€ ๋˜์—ˆ๋˜๋ฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๊ฐ€๋Šฅํ• ๊นŒ์š”?

[๋ฒ„๊ทธ]def daily_order ์˜ BUY_CELL_DVSN_TYPE ๋ฌธ์ œ

๋ฒ„๊ทธ ์„ค๋ช…

dvsn = BUY_CELL_DVSN[dvsn] # type: ignore
BUY_CELL_DVSN_TYPE ๋Š” "0", "1", "2" ๋กœ ์ •์˜๋˜๋Š”๋ฐ
์˜ฌ๋ฐ”๋ฅธ ์ž…๋ ฅ์€ "00", "01", "02" ์ด๋ผ์„œ ์‹ค์ œ ์‘๋‹ต์„ ๋ชป๋ฐ›๋Š”๊ฑธ๋กœ ํŒ๋‹จ๋จ
(๋‹ค๋งŒ ๋ชจ์˜๊ณ„์ขŒ์—์„œ๋Š” ์–ด๋–ค ์‚ฌ์œ ์—์„œ์ธ์ง€ ์ œ๋Œ€๋กœ ์ถœ๋ ฅ ๋จ)

์ถ”๊ฐ€ ๋‚ด์šฉ

์‹ค์ œ ๊ณ„์ขŒ์—์„œ๋Š”
class KisStockDailyOrder(KisDynamic):
infm_tmd: time
์˜ ์‘๋‹ต์„ ๋ฐ›์ง€ ์•Š์Œ

๋”ฐ๋ผ์„œ,
class KisDynamic:
elif type == time:
return datetime.strptime(value, '%H%M%S').time()

์ฝ”๋“œ์—์„œ datetime.strptime ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ๋นˆ ๋ฌธ์ž์—ด์ด ๋“ค์–ด์˜ค๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•  ํ•„์š”๊ฐ€ ์žˆ์Œ

[๋ฒ„๊ทธ] balance_all() ํ•จ์ˆ˜์— ๋ฌดํ•œ๋ฃจํ”„ ํ˜„์ƒ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„๊ทธ ์„ค๋ช…

์ผ๋ถ€ ๊ณ„์ขŒ์—์„œ balance_all() ํ•จ์ˆ˜์— ๋ฌดํ•œ๋ฃจํ”„ ํ˜„์ƒ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

  • WARN API rate limit exceeded. waiting... ๊ฐ€ ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค.

์žฌ๊ตฌํ˜„

์ฃผ์‹์ž”๊ณ ์กฐํšŒ API ํ˜ธ์ถœ ํ›„ 50 ๊ฐœ ์ด์ƒ์˜ ์ข…๋ชฉ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—
์—ฐ์† ์กฐํšŒ๊ฐ€ ์ด๋ฃจ์–ด์ง€๋Š”๋ฐ, ์—ฐ์† ์กฐํšŒ ๊ณผ์ •์—์„œ Loop์— ๋น ์ง€๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ํ…Œ์ŠคํŠธ ๊ณ„์ขŒ๋Š” ์ •ํ™•ํžˆ 50์ข…๋ชฉ๋งŒ ๋ณด์œ ํ•œ ๊ณ„์ขŒ์ž…๋‹ˆ๋‹ค.

์›์ธ

while loop์— ๋น ์ ธ์„œ ๋‚˜์˜ค์งˆ ๋ชปํ•จ

๊ฐœ๋ฐœ ํ™˜๊ฒฝ

ํŒŒ์ด์ฌ ๋ฒ„์ „: 3.10

์ถ”๊ฐ€ ๋‚ด์šฉ

ํ˜น์‹œ ์ฝ”์Šคํ”ผ / ์ฝ”์Šค๋‹ฅ์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ• ๊นŒ์š”?

ํ˜น์‹œ ์ฝ”์Šคํ”ผ / ์ฝ”์Šค๋‹ฅ์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ• ๊นŒ์š”?

์ผ๋‹จ ์ฐพ์ง€ ๋ชปํ•˜์—ฌ ์ง์ ‘ API๋ฅผ ๊ฐœ๋ฐœํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ, API ์‘๋‹ต์ด ์ด์ƒํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋”๋ผ๊ณ ์š”

์กด์žฌํ•˜๋Š”์ง€ ์งˆ์˜๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค :)

[๋ฒ„๊ทธ]์‹ค์‹œ๊ฐ„ ํ•ด์ œ์š”์ฒญ์ด ์ •์ƒ์ ์œผ๋กœ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


name: ๋ฒ„๊ทธ ์ œ๋ณด
about: ์˜๋„ ๋˜์ง€ ์•Š์€ ๋ฒ„๊ทธ๋ฅผ ์ œ๋ณดํ•ฉ๋‹ˆ๋‹ค.
title: "์‹ค์‹œ๊ฐ„ ํ•ด์ œ์š”์ฒญ์ด ์ •์ƒ์ ์œผ๋กœ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."
labels: ๋ฒ„๊ทธ
assignees: ''


๋ฒ„๊ทธ ์„ค๋ช…

์‹ค์‹œ๊ฐ„ ํ•ด์ œ์š”์ฒญ์ด ์ •์ƒ์ ์œผ๋กœ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์žฌ๊ตฌํ˜„

def _send_request(
self,
tr_id: str,
tr_key: str,
tr_type: bool,
timeout: int = 10,
verbose: bool = True,
) -> KisRTSysResponse | None:
id = self._mkid(tr_id, tr_key)

    if (id in self.subscribed):
        return None

id in self.subscribed ์— ์˜ํ•ด ๊ตฌ๋…์ค‘์ธ์ง€ ํ™•์ธํ•˜๋Š”๋ฐ, ๊ตฌ๋…์ค‘์ธ ์ข…๋ชฉ์„ ํ•ด์ œํ•˜๊ณ ์ž ํ•˜๋”๋ผ๋„ None์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ฆ‰ ๊ตฌ๋… ํ•ด์ œ๋ฅผ ์š”์ฒญํ•˜๊ธฐ๋„ ์ „์— None์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์›์ธ

if (id in self.subscribed) &(tr_type ==True):
return None
๋“ฑ์œผ๋กœ ์ˆ˜์ •ํ•˜๋ฉด ํ•ด๊ฒฐ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ํ™˜๊ฒฝ

ํŒŒ์ด์ฌ ๋ฒ„์ „: 3.11

์‚ฌ์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „

[๊ท€์ฐฎ์œผ์‹œ๋ฉด ์•ˆ ์จ๋„ ๋ผ์š”...]

์ด๋ฆ„ ๋ฒ„์ „
requests ?
SQLAlchemy ?
websocket-client ?
pycryptodome ?
colorlog ?

์ถ”๊ฐ€ ๋‚ด์šฉ

[๊ธฐ๋Šฅ]๊ตญ๋‚ด์„ ๋ฌผ ์ถ”๊ฐ€ ์š”์ฒญ

๊ธฐ๋Šฅ ์„ค๋ช…

์•„์ง ๊ณ„์† ๋ด์•ผ๊ฒ ์ง€๋งŒ ์ œ๊ฐ€ ์ฒ˜์Œ๋ถ€ํ„ฐ ์งœ๋Š”๊ฑฐ๋ณด๋‹ค ๋„ˆ๋ฌด๋‚˜ ์ฒด๊ณ„์ ์œผ๋กœ ํ•ด๋†“์œผ์…”์„œ ๊ฐํƒ„์ด๋„ค์š”
์˜ต์…˜์€ ์•„๋‹ˆ๋”๋ผ๋„ ๊ตญ๋‚ด์„ ๋ฌผ๊นŒ์ง€๋งŒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

ํ”„๋กœํ† ํƒ€์ž…

[๋ฌธ์žฅ์„ ์ง€์šฐ๊ณ , ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์‘์šฉ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.]

[์งˆ๋ฌธ] ์ž๋™ ์ข…๋ชฉ ํŒŒ์‹ฑ ๊ธฐ๋Šฅ ์ œ๊ฑฐ ๋ฐฉ๋ฒ•

์งˆ๋ฌธ ๋‚ด์šฉ

[๋ฌธ์žฅ์„ ์ง€์šฐ๊ณ , ์งˆ๋ฌธ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.]
์ž๋™ ์ข…๋ชฉ ํŒŒ์‹ฑ ๊ธฐ๋Šฅ Deactivate ๋ฐฉ๋ฒ• ์งˆ์˜๋“œ๋ฆฝ๋‹ˆ๋‹ค.
๋งŒ์•ฝ ์–ด๋ ต๋‹ค๋ฉด ํ•ด๋‹น ํŒŒ์‹ฑ๋œ ์ •๋ณด๋“ค์ด ์–ด๋””์„œ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์„๊นŒ์š”?

[์งˆ๋ฌธ] ์ธ๋ฒ„์Šค์— period_price๋ฅผ ์ ์šฉ ์‹œ ๋ฐœ์ƒํ•˜๋Š” " ValueError: ์ฃผ์‹์ด ์•„๋‹™๋‹ˆ๋‹ค. " ๋ฌธ์ œ

์งˆ๋ฌธ ๋‚ด์šฉ

์ธ๋ฒ„์Šค pykis.scope.stock.stock.KisStockScope object at 0x00000262A1C46BC0> ์ข…๋ชฉ์ฝ”๋“œ 114800 ๊ฐ์ฒด์—
stock.period_price๋ฅผ ์ ์šฉ ์‹œ ๋ฐœ์ƒํ•˜๋Š” " ValueError: ์ฃผ์‹์ด ์•„๋‹™๋‹ˆ๋‹ค. " ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํ˜น์‹œ ์ฃผ์‹๊ณผ ๊ฐ™์ด ๊ธฐ๊ฐ„๋ด‰์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ์š”?

ETF ์— ์ ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ์„œ ์œ„์™€ ๊ฐ™์€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ๋„ฃ์œผ์‹  ๊ฒƒ์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.