Open Trading API
Korea Investment & Securities Open API Github
Installation
npx open-trading-apiAsk AI about Open Trading API
Powered by Claude ยท Grounded in docs
I know everything about Open Trading API. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
[๋น์ฌ์์ ์ ๊ณตํ๋ ์ํ์ฝ๋์ ๋ํ ์ ์์ฌํญ]
- ์ํ ์ฝ๋๋ ํ๊ตญํฌ์์ฆ๊ถ Open API(KIS Developers)๋ฅผ ์ฐ๋ํ๋ ์์์ ๋๋ค. ๊ณ ๊ฐ๋์ ๊ฐ๋ฐ ๋ถ๋ด์ ์ค์ด๊ณ ์ ์ฐธ๊ณ ์ฉ์ผ๋ก ์ ๊ณต๋๊ณ ์์ต๋๋ค.
- ์ํ ์ฝ๋๋ ๋ณ๋์ ๊ณต์ง ์์ด ์ง์์ ์ผ๋ก ์ ๋ฐ์ดํธ๋ ์ ์์ต๋๋ค.
- ์ํ ์ฝ๋๋ฅผ ํ์ฉํ์ฌ ์ ์ํ ๊ณ ๊ฐ๋์ ํ๋ก๊ทธ๋จ์ผ๋ก ์ธํ ์ํด์ ๋ํด์๋ ๋น์ฌ์์ ์ฑ ์์ง์ง ์์ต๋๋ค.
KIS Open API ์ํ ์ฝ๋ ์ ์ฅ์ (LLM ์ง์)
1. ์ ์ ์๋ ๋ฐ ๋์
๐ฏ ์ ์ ์๋
์ด ์ ์ฅ์๋ ChatGPT, Claude ๋ฑ LLM(Large Language Model) ๊ธฐ๋ฐ ์๋ํ ํ๊ฒฝ๊ณผ Python ๊ฐ๋ฐ์ ๋ชจ๋๊ฐ ํ๊ตญํฌ์์ฆ๊ถ(Korea Investment & Securities) Open API๋ฅผ ์ฝ๊ฒ ์ดํดํ๊ณ ํ์ฉํ ์ ์๋๋ก ๊ตฌ์ฑ๋ ์ํ ์ฝ๋ ๋ชจ์์ ๋๋ค.
examples_llm/: LLM์ด ๋จ์ผ API ๊ธฐ๋ฅ์ ์ฝ๊ฒ ํ์ํ๊ณ ํธ์ถํ ์ ์๋๋ก ๊ตฌ์ฑ๋ ๊ธฐ๋ฅ ๋จ์ ์ํ ์ฝ๋examples_user/: ์ฌ์ฉ์๊ฐ ์ค์ ํฌ์ ๋ฐ ์๋๋งค๋งค ๊ตฌํ์ ํ์ฉํ ์ ์๋๋ก ์ํ๋ณ๋ก ํตํฉ๋ API ํธ์ถ ์์ ์ฝ๋strategy_builder/: ๋น์ฃผ์ผ UI๋ก ๋งค๋งค ์ ๋ต์ ์ค๊ณํ๊ณ , ์์ฑ๋ ์๊ทธ๋ ๋ฐํ์ผ๋ก ๋งค์/๋งค๋ ๊ฐ๋ฅbacktester/: ์ค๊ณํ ์ ๋ต์ ๊ณผ๊ฑฐ ๋ฐ์ดํฐ๋ก ๊ฒ์ฆํ๋ ๋ฐฑํ ์คํ ์์ง
AI์ ์ฌ๋์ด ๋ชจ๋ ํ์ฉํ๊ธฐ ์ฌ์ด ๊ตฌ์กฐ๋ฅผ ์งํฅํฉ๋๋ค.
ํ๊ตญํฌ์์ฆ๊ถ Open API ํฌํธ ๋ฐ๋ก๊ฐ๊ธฐ
๐ค ๋์ ์ฌ์ฉ์
- ํ๊ตญํฌ์์ฆ๊ถ Open API๋ฅผ ์ฒ์ ์ฌ์ฉํ๋ Python ๊ฐ๋ฐ์
- ๊ธฐ์กด Open API ์ฌ์ฉ์ ์ค ์ฝ๋ ๊ฐ์ ๋ฐ ๊ตฌ์กฐ ํ์ต์ด ํ์ํ ์ฌ์ฉ์
- LLM ๊ธฐ๋ฐ ์ฝ๋ ์์ด์ ํธ๋ฅผ ํ์ฉํด ์ข ๋ชฉ ๊ฒ์, ์์ธ ๋ถ์, ์๋๋งค๋งค ๋ฑ์ ๊ตฌํํ๊ณ ์ ํ๋ ์ฌ์ฉ์
2. ํด๋ ๊ตฌ์กฐ ๋ฐ ์ฃผ์ ํ์ผ ์ค๋ช
2.1. ํด๋ ๊ตฌ์กฐ
# ํ๋ก์ ํธ ๊ตฌ์กฐ
.
โโโ README.md # ํ๋ก์ ํธ ์ค๋ช
์
โโโ strategy_builder/ # ์ ๋ต ์ค๊ณ + ์๊ทธ๋ ์์ฑ ์์ง โ New
โโโ backtester/ # ๋ฐฑํ
์คํ
์์ง (QuantConnect Lean) โ New
โ
โโโ docs/
โ โโโ convention.md # ์ฝ๋ฉ ์ปจ๋ฒค์
๊ฐ์ด๋
โโโ examples_llm/ # LLM์ฉ ์ํ ์ฝ๋
โ โโโ kis_auth.py # ์ธ์ฆ ๊ณตํต ํจ์
โ โโโ auth # ์ธ์ฆ(ํ ํฐ ๋ฐ๊ธ)
โ โ โโโ auth_token # REST ์ ๊ทผํ ํฐ ๋ฐ๊ธ
โ โ โโโ auth_ws_token # ์น์์ผ ์ ์ํค ๋ฐ๊ธ
โ โโโ domestic_bond # ๊ตญ๋ด์ฑ๊ถ
โ โ โโโ inquire_price # API ๋จ์ผ ๊ธฐ๋ฅ๋ณ ํด๋
โ โ โโโ inquire_price.py # ํ์ค ํธ์ถ ํ์ผ (์: ์ฑ๊ถ ๊ฐ๊ฒฉ ์กฐํ)
โ โ โโโ chk_inquire_price.py # ํ
์คํธ ํ์ผ (์: ์ฑ๊ถ ๊ฐ๊ฒฉ ์กฐํ ๊ฒฐ๊ณผ ๊ฒ์ฆ)
โ โโโ domestic_futureoption # ๊ตญ๋ด์ ๋ฌผ์ต์
โ โโโ domestic_stock # ๊ตญ๋ด์ฃผ์
โ โโโ elw # ELW
โ โโโ etfetn # ETF/ETN
โ โโโ overseas_futureoption # ํด์ธ์ ๋ฌผ์ต์
โ โโโ overseas_stock # ํด์ธ์ฃผ์
โโโ examples_user/ # user์ฉ ์ค์ ์ฌ์ฉ ์์
โ โโโ kis_auth.py # ์ธ์ฆ ๊ณตํต ํจ์
โ โโโ auth # ์ธ์ฆ(ํ ํฐ ๋ฐ๊ธ)
โ โ โโโ auth_functions.py # ์ธ์ฆ ํจ์ ๋ชจ์
โ โ โโโ auth_examples.py # ์ธ์ฆ ์คํ ์์
โ โโโ domestic_bond # ๊ตญ๋ด์ฑ๊ถ
โ โ โโโ domestic_bond_functions.py # (REST) ํตํฉ ํจ์ ํ์ผ (๋ชจ๋ API ํจ์ ๋ชจ์)
โ โ โโโ domestic_bond_examples.py # (REST) ์คํ ์์ ํ์ผ (ํจ์ ์ฌ์ฉ๋ฒ)
โ โ โโโ domestic_bond_functions_ws.py # (Websocket) ํตํฉ ํจ์ ํ์ผ
โ โ โโโ domestic_bond_examples_ws.py # (Websocket) ์คํ ์์ ํ์ผ
โ โโโ domestic_futureoption # ๊ตญ๋ด์ ๋ฌผ์ต์
โ โโโ domestic_stock # ๊ตญ๋ด์ฃผ์
โ โโโ elw # ELW
โ โโโ etfetn # ETF/ETN
โ โโโ overseas_futureoption # ํด์ธ์ ๋ฌผ์ต์
โ โโโ overseas_stock # ํด์ธ์ฃผ์
โโโ legacy/ # ๊ตฌ ์ํ์ฝ๋ ๋ณด๊ด
โโโ stocks_info/ # ์ข
๋ชฉ์ ๋ณดํ์ผ ์ฐธ๊ณ ๋ฐ์ดํฐ
โโโ kis_devlp.yaml # API ์ค์ ํ์ผ (๊ฐ์ธ์ ๋ณด ์
๋ ฅ ํ์)
โโโ pyproject.toml # (uv)ํ๋ก์ ํธ ์์กด์ฑ ๊ด๋ฆฌ
โโโ uv.lock # (uv)์์กด์ฑ ๋ฝ ํ์ผ
2.2. ์ง์๋๋ ์ฃผ์ API ์นดํ ๊ณ ๋ฆฌ
- ์๋ ์นดํ ๊ณ ๋ฆฌ ๋ฐ ํด๋ ๊ตฌ์กฐ๋ examples_llm/, examples_user/ ํด๋ ๋ชจ๋ ๋์ผํ๊ฒ ์ ์ฉ๋ฉ๋๋ค.
| ์นดํ ๊ณ ๋ฆฌ | ์ค๋ช | ํด๋๋ช |
|---|---|---|
| ์ธ์ฆ | ์ ๊ทผํ ํฐ ๋ฐ๊ธ, ์น์์ผ ์ ์ํค ๋ฐ๊ธ | auth |
| ๊ตญ๋ด์ฃผ์ | ๊ตญ๋ด ์ฃผ์ ์์ธ, ์ฃผ๋ฌธ, ์๊ณ ๋ฑ | domestic_stock |
| ๊ตญ๋ด์ฑ๊ถ | ๊ตญ๋ด ์ฑ๊ถ ์์ธ, ์ฃผ๋ฌธ ๋ฑ | domestic_bond |
| ๊ตญ๋ด์ ๋ฌผ์ต์ | ๊ตญ๋ด ํ์์ํ ๊ด๋ จ | domestic_futureoption |
| ํด์ธ์ฃผ์ | ํด์ธ ์ฃผ์ ์์ธ, ์ฃผ๋ฌธ ๋ฑ | overseas_stock |
| ํด์ธ์ ๋ฌผ์ต์ | ํด์ธ ํ์์ํ ๊ด๋ จ | overseas_futureoption |
| ELW | ELW ์์ธ API | elw |
| ETF/ETN | ETF, ETN ์์ธ API | etfetn |
2.3. ์ฃผ์ ํ์ผ ์ค๋ช
examples_llm/ - llm์ฉ ๊ธฐ๋ฅ ๋จ์ ์ํ ์ฝ๋
API๋ณ ๊ฐ๋ณ ํด๋ ๊ตฌ์กฐ: ๋จ์ผ API ๊ธฐ๋ฅ์ ๋ ๋ฆฝ ํด๋๋ก ๋ถ๋ฆฌํ์ฌ, LLM์ด ๊ด๋ จ ์ฝ๋๋ฅผ ์ฝ๊ฒ ํ์ํ ์ ์๋๋ก ๊ตฌ์ฑ
- ํ์ค ํธ์ถ ํ์ผ:
[ํจ์๋ช ].pyโ ๋จ์ผ ๊ธฐ๋ฅ์ ํธ์ถํ๋ ์ต์ ๋จ์ ์ฝ๋ (์:inquire_price.py) - ํ
์คํธ ํ์ผ:
chk_[ํจ์๋ช ].pyโ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ฆํ๋ ํ ์คํธ ์คํ ์ฝ๋ (์:chk_inquire_price.py)
examples_user/ - ์ฌ์ฉ์์ฉ ํตํฉ ์์ ์ฝ๋
์นดํ ๊ณ ๋ฆฌ๋ณ ๊ฐ๋ณ ํด๋ ๊ตฌ์กฐ: ์นดํ ๊ณ ๋ฆฌ(์ํ)๋ณ๋ก ๋ชจ๋ ๊ธฐ๋ฅ์ ํตํฉํ์ฌ, ์ฌ์ฉ์๊ฐ ์ฝ๊ฒ ์ํ ์ฝ๋๋ฅผ ํ์ํ๊ณ ์คํํ ์ ์๋๋ก ๊ตฌ์ฑ
- ํตํฉ ํจ์ ํ์ผ:
[์นดํ ๊ณ ๋ฆฌ]_functions.py- ํด๋น ์นดํ ๊ณ ๋ฆฌ์ ๋ชจ๋ API ๊ธฐ๋ฅ์ด ํตํฉ๋ ํจ์ ๋ชจ์ - ์คํ ์์ ํ์ผ:
[์นดํ ๊ณ ๋ฆฌ]_examples.py- ์ค์ ์ฌ์ฉ ์์ ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์คํ ์ฝ๋ - ์น์์ผ ํตํฉ ํจ์ ํ์ผ ๋ฐ ์คํ ์์ ํ์ผ:
[์นดํ ๊ณ ๋ฆฌ]_functions_ws.py,[์นดํ ๊ณ ๋ฆฌ]_examples_ws.py
kis_auth.py - ์ธ์ฆ ๋ฐ ๊ณตํต ๊ธฐ๋ฅ
- ์ ๊ทผํ ํฐ ๋ฐ๊ธ ๋ฐ ๊ด๋ฆฌ
- API ํธ์ถ ๊ณตํต ํจ์
- ์ค์ ํฌ์/๋ชจ์ํฌ์ ํ๊ฒฝ ์ ํ ์ง์
- ์น์์ผ ์ฐ๊ฒฐ ์ค์ ๊ธฐ๋ฅ ์ ๊ณต
2.4. AI ํธ๋ ์ด๋ฉ ๋๊ตฌ
์ํ ์ฝ๋ ์ธ์, Open API๋ฅผ ํ์ฉํ ์ ๋ต ์ค๊ณ โ ๋ฐฑํ ์คํ โ ์ฃผ๋ฌธ ์คํ ํ์ดํ๋ผ์ธ์ ์ ๊ณตํฉ๋๋ค.
graph LR
SB[strategy_builder] -->|".kis.yaml"| BT[backtester]
BT -->|"๊ฒ์ฆ ์๋ฃ"| SB
SB -->|"BUY/SELL/HOLD"| KIS[KIS Open API]
| ๋๋ ํ ๋ฆฌ | ์ญํ | ์์ธ |
|---|---|---|
strategy_builder/ | ์ ๋ต ์ค๊ณ + ์๊ทธ๋ ์์ฑ | 80๊ฐ ๊ธฐ์ ์งํ, 10๊ฐ ํ๋ฆฌ์ ์ ๋ต, BUY/SELL/HOLD ์ ํธ (README) |
backtester/ | ๊ณผ๊ฑฐ ๊ฒ์ฆ + ํ๋ผ๋ฏธํฐ ์ต์ ํ | Docker ๊ธฐ๋ฐ QuantConnect Lean, HTML ๋ฆฌํฌํธ (README) |
MCP/ | AI ๋๊ตฌ ์ฐ๊ฒฐ | KIS Code Assistant + Trading MCP (README) |
10๊ฐ ํ๋ฆฌ์ ์ ๋ต
strategy_builder์ backtester ์์ชฝ์์ ๋์ผํ๊ฒ ์ง์ํฉ๋๋ค.
| # | ์ ๋ต๋ช | ์ ํ | ํ์ค ์ค๋ช |
|---|---|---|---|
| 01 | ๊ณจ๋ ํฌ๋ก์ค | ์ถ์ธ์ถ์ข | ๋จ๊ธฐ ์ด๋ํ๊ท ์ด ์ฅ๊ธฐ ์ด๋ํ๊ท ์ ์ํฅ ๋ํํ๋ฉด ๋งค์ |
| 02 | ๋ชจ๋ฉํ | ์ถ์ธ์ถ์ข | ์ต๊ทผ N์ผ ์์ต๋ฅ ์ด ๋์ ์ข ๋ชฉ์ ๋งค์ |
| 03 | 52์ฃผ ์ ๊ณ ๊ฐ | ๋ํ๋งค๋งค | ์ข ๊ฐ๊ฐ 52์ฃผ ์ต๊ณ ๊ฐ๋ฅผ ๊ฐฑ์ ํ๋ฉด ๋งค์ |
| 04 | ์ฐ์ ์์น/ํ๋ฝ | ์ถ์ธ์ถ์ข | N์ผ ์ฐ์ ์ข ๊ฐ ์์น ์ ๋งค์, N์ผ ์ฐ์ ํ๋ฝ ์ ๋งค๋ |
| 05 | ์ด๊ฒฉ๋ | ์ญ์ถ์ธ | ์ข ๊ฐ/์ด๋ํ๊ท ๋น์จ๋ก ๊ณผ์ด(๋งค๋)ยท์นจ์ฒด(๋งค์) ํ๋จ |
| 06 | ๋ํ ์คํจ | ์์ | ์ ๊ณ ์ ๋ํ ํ ๋ค์ ์๋๋ก ๋น ์ง๋ฉด ์์ |
| 07 | ๊ฐํ ์ข ๊ฐ | ๋ชจ๋ฉํ | ์ข ๊ฐ๊ฐ ๋น์ผ ๊ณ ๊ฐ ๊ทผ์ฒ์์ ๋ง๊ฐํ๋ฉด ๋งค์ |
| 08 | ๋ณ๋์ฑ ํ์ฅ | ๋ํ๋งค๋งค | ๋ณ๋์ฑ์ด ์ค์ด๋ ๋ค ๊ธ๋ฑํ๋ฉด ๋งค์ |
| 09 | ํ๊ท ํ๊ท | ์ญ์ถ์ธ | ๊ฐ๊ฒฉ์ด ํ๊ท ์์ ํฌ๊ฒ ๋ฒ์ด๋๋ฉด ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ๋งค๋งค |
| 10 | ์ถ์ธ ํํฐ | ์ถ์ธ์ถ์ข | ์ฅ๊ธฐ ์ด๋ํ๊ท ์์์ ์์น ์ค์ด๋ฉด ๋งค์ |
.kis.yaml โ ๊ณต์ ์ ๋ต ํฌ๋งท
strategy_builder์์ ์ค๊ณํ ์ ๋ต์ .kis.yaml๋ก ๋ด๋ณด๋ด๋ฉด, backtester์์ ๊ทธ๋๋ก Importํ์ฌ ๋ฐฑํ
์คํธ๋ฅผ ์ํํ ์ ์์ต๋๋ค.
ํฌ๋งท ์์ธ๋ strategy_builder/README.md ๋๋ backtester/README.md๋ฅผ ์ฐธ๊ณ ํ์ธ์.
3. ์ฌ์ ํ๊ฒฝ์ค์ ์๋ด
3.1. Python ํ๊ฒฝ ์๊ตฌ์ฌํญ
- Python 3.11 ์ด์ ํ์
- uv ํจํค์ง ๋งค๋์ ์ฌ์ฉ ๊ถ์ฅ (๋น ๋ฅด๊ณ ๊ฐํธํ ์์กด์ฑ ๊ด๋ฆฌ)
3.2. uv ์ค์น ๋ฐฉ๋ฒ
- ๊ฐํธ ์ค์ ์ ์ํด uv๋ฅผ ๊ถ์ฅํฉ๋๋ค
# Windows (PowerShell)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# ์ค์น ํ์ธ
uv --version
# uv 0.x.x ... -> ์ค์น ์๋ฃ
3.3. ํ๋ก์ ํธ ํด๋ก ๋ฐ ํ๊ฒฝ ์ค์
# ์ ์ฅ์ ํด๋ก
git clone https://github.com/koreainvestment/open-trading-api
cd open-trading-api
# uv๋ฅผ ์ฌ์ฉํ ์์กด์ฑ ์ค์น - ํ์ค๋ก ๋
uv sync
3.4. KIS Open API ์ ์ฒญ ๋ฐ ์ค์
๐ ์๋น์ค ์ ์ฒญ ์๋ด ๋ฐ๋ก๊ฐ๊ธฐ
- ํ๊ตญํฌ์์ฆ๊ถ ๊ณ์ข ๊ฐ์ค ๋ฐ ID ์ฐ๊ฒฐ
- ํ๊ตญํฌ์์ฆ๊ถ ํํ์ด์ง or ์ฑ์์ Open API ์๋น์ค ์ ์ฒญ
- ์ฑํค(App Key), ์ฑ์ํฌ๋ฆฟ(App Secret) ๋ฐ๊ธ
- ๋ชจ์ํฌ์ ๋ฐ ์ค์ ํฌ์ ์ฑํค ๊ฐ๊ฐ ์ค๋น
3.5. kis_devlp.yaml ์ค์
- ๋ณธ์ธ์ ๊ณ์ ์ค์ ์ ์ํด
kis_devlp.yamlํ์ผ์ ์์ ํฉ๋๋ค. - ๊ธฐ๋ณธ ๊ฒฝ๋ก๋
~/KIS/config/kis_devlp.yaml์ ๋๋ค. ํด๋๊ฐ ์์ผ๋ฉด ์์ฑํด ์ฃผ์ธ์. - ํ๋ก์ ํธ ๋ฃจํธ์
kis_devlp.yaml์~/KIS/config/๋ก ๋ณต์ฌํ ๋ค ์์ ํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. - ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด
kis_auth.py์config_root๊ฐ์ ์์ ํ๋ฉด ๋ฉ๋๋ค.
# ์ค์ ํด๋ ์์ฑ ๋ฐ ํ์ผ ๋ณต์ฌ
mkdir -p ~/KIS/config
cp kis_devlp.yaml ~/KIS/config/
~/KIS/config/kis_devlp.yamlํ์ผ ์ด๊ธฐ- ์ฑํค์ ์ฑ์ํฌ๋ฆฟ ์ ๋ณด ์ ๋ ฅ
- HTS ID ์ ๋ณด ์ ๋ ฅ
- ๊ณ์ข๋ฒํธ ์ ๋ณด ์ ๋ ฅ (์ 8์๋ฆฌ์ ๋ค 2์๋ฆฌ ๊ตฌ๋ถ)
- ์ ์ฅ ํ ๋ซ๊ธฐ
# ์ค์ ํฌ์
my_app: "์ฌ๊ธฐ์ ์ค์ ํฌ์ ์ฑํค ์
๋ ฅ"
my_sec: "์ฌ๊ธฐ์ ์ค์ ํฌ์ ์ฑ์ํฌ๋ฆฟ ์
๋ ฅ"
# ๋ชจ์ํฌ์
paper_app: "์ฌ๊ธฐ์ ๋ชจ์ํฌ์ ์ฑํค ์
๋ ฅ"
paper_sec: "์ฌ๊ธฐ์ ๋ชจ์ํฌ์ ์ฑ์ํฌ๋ฆฟ ์
๋ ฅ"
# HTS ID(KIS Developers ๊ณ ๊ฐ ID) - ์ฒด๊ฒฐํต๋ณด, ๋์ ์กฐ๊ฑด ๋ชฉ๋ก ํ์ธ ๋ฑ์ ์ฌ์ฉ๋ฉ๋๋ค.
my_htsid: "์ฌ์ฉ์ HTS ID"
# ๊ณ์ข๋ฒํธ ์ 8์๋ฆฌ
my_acct_stock: "์ฆ๊ถ๊ณ์ข 8์๋ฆฌ"
my_acct_future: "์ ๋ฌผ์ต์
๊ณ์ข 8์๋ฆฌ"
my_paper_stock: "๋ชจ์ํฌ์ ์ฆ๊ถ๊ณ์ข 8์๋ฆฌ"
my_paper_future: "๋ชจ์ํฌ์ ์ ๋ฌผ์ต์
๊ณ์ข 8์๋ฆฌ"
# ๊ณ์ข๋ฒํธ ๋ค 2์๋ฆฌ
my_prod: "01" # ์ข
ํฉ๊ณ์ข
# my_prod: "03" # ๊ตญ๋ด์ ๋ฌผ์ต์
๊ณ์ข
# my_prod: "08" # ํด์ธ์ ๋ฌผ์ต์
๊ณ์ข
# my_prod: "22" # ๊ฐ์ธ์ฐ๊ธ ๊ณ์ข
# my_prod: "29" # ํด์ง์ฐ๊ธ ๊ณ์ข
# User-Agent(๊ธฐ๋ณธ๊ฐ ์ฌ์ฉ ๊ถ์ฅ, ๋ณ๊ฒฝ ๋ถํ์)
my_agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
3.6. ์คํํ์ผ ๋ด ์ธ์ฆ ์ค์ ๊ฒํ
- ์คํํ๋ ค๋ ํ์ผ์์ ์ธ์ฆ ๊ด๋ จ ์ค์ ์ ๊ฒํ ํน์ ๋ณ๊ฒฝํด์ค๋๋ค. ๊ตญ๋ด์ฃผ์ ๊ธฐ๋ฅ ์ ์ฒด๋ฅผ ์ด์ฉํ์๋ ค๋ฉด,
domestic_stock/domestic_stock_examples.pyํ์ผ์ ํ์ธํด์ฃผ์ธ์. ka.auth() ํจ์์ svr, product ๋งค๊ฐ๋ณ์๋ฅผ ์๋์ ๊ฐ์ด ์์ ํ๋ฉด ์ค์ ํ๊ฒฝ(prod)์์ ์ํ๊ณ์ข(-01)๋ก ๋งค๋งค ํ ์คํธ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
import kis_auth as ka
# ์ค์ ํฌ์ ์ธ์ฆ
ka.auth(svr="prod", product="01") # ๋ชจ์ํฌ์: svr="vps"
3.7. ์ ๋ต ๋น๋ / ๋ฐฑํ ์คํฐ ํ๊ฒฝ ์ค์ (์ ํ)
์ ๋ต ์ค๊ณ ๋ฐ ๋ฐฑํ ์คํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ์ถ๊ฐ ์ค์ ์ด ํ์ํฉ๋๋ค.
| ํญ๋ชฉ | ์ค์น | ์ฉ๋ |
|---|---|---|
| Node.js 18+ | nodejs.org | strategy_builder, backtester ํ๋ก ํธ์๋ |
| Docker Desktop | docker.com | backtester (Lean ์์ง) |
4. ์ํ ์ฝ๋ ์คํ
4.1. ์ํ ์ฝ๋ ์คํ
- examples_user ๊ธฐ์ค
# ๊ตญ๋ด์ฃผ์ ์ํ ์ฝ๋ ์คํ (examples_user/domestic_stock/)
uv run python domestic_stock_examples.py # REST ๋ฐฉ์
uv run python domestic_stock_examples_ws.py # Websocket ๋ฐฉ์
domestic_stock_examples.py์๋ ์ฌ๋ฌ ํจ์๊ฐ ํฌํจ๋์ด ์์ผ๋ฏ๋ก, ์ฌ์ฉํ๋ ค๋ ํจ์๋ง ๋จ๊ธฐ๊ณ ๋๋จธ์ง๋ ์ฃผ์ ์ฒ๋ฆฌํ ํ, ์ ๋ ฅ๊ฐ์ ์์ ํ์ฌ ํธ์ถํด ์ฃผ์ธ์.
- examples_llm ๊ธฐ์ค
# ๊ตญ๋ด์ฃผ์ > ์ฃผ์ํ์ฌ๊ฐ ์์ธ ์ํ ์ฝ๋ ์คํ (examples_llm/domestic_stock/inquire_price/)
uv run python chk_inquire_price.py
examples_llm ์ ๊ฐ ๊ธฐ๋ฅ๋ณ๋ก ๊ฐ๋ณ ์คํ ํ์ผ(chk_*.py)์ด ๋ถ๋ฆฌ๋์ด ์์ด, ํน์ ๊ธฐ๋ฅ๋ง ํ ์คํธํ๊ณ ์ ํ ๋ ์ ์ฉํฉ๋๋ค.
4.2. ์์ ์ฝ๋ ์ํ (examples_user)
# REST API ํธ์ถ ์์ - domestic_stock_examples.py
import sys
import logging
import pandas as pd
sys.path.extend(['..', '.'])
import kis_auth as ka
from domestic_stock_functions import *
# ๋ก๊น
์ค์
logging.basicConfig(level=logging.INFO, format='%(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
# ์ธ์ฆ
ka.auth()
trenv = ka.getTREnv()
# ์ผ์ฑ์ ์ ํ์ฌ๊ฐ ์์ธ ์กฐํ
result = inquire_price(env_dv="real", fid_cond_mrkt_div_code="J", fid_input_iscd="005930")
print(result)
# ์น์์ผ ํธ์ถ ์์ - domestic_stock_examples_ws.py
import sys
import logging
import pandas as pd
sys.path.extend(['..', '.'])
import kis_auth as ka
from domestic_stock_functions_ws import *
# ๋ก๊น
์ค์
logging.basicConfig(level=logging.INFO, format='%(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
# ์ธ์ฆ
ka.auth()
ka.auth_ws()
trenv = ka.getTREnv()
# ์น์์ผ ์ ์ธ
kws = ka.KISWebSocket(api_url="/tryitout")
# ์ผ์ฑ์ ์, skํ์ด๋์ค ์ค์๊ฐ ํธ๊ฐ ๊ตฌ๋
kws.subscribe(request=asking_price_krx, data=["005930", "000660"])
4.3. ์ ๋ต ๋น๋ / ๋ฐฑํ ์คํฐ ์คํ
# Strategy Builder (์ ๋ต ์ค๊ณ + ์๊ทธ๋)
cd strategy_builder
./start.sh
# Backtester (๋ฐฑํ
์คํ
)
cd backtester
./start.sh
์์ธ ์คํ ๋ฐฉ๋ฒ์ ๊ฐ ๋๋ ํ ๋ฆฌ์ README๋ฅผ ์ฐธ๊ณ ํ์ธ์:
5. ๋ฌธ์ ํด๊ฒฐ ๊ฐ์ด๋
ํ ํฐ ์ค๋ฅ ์
import kis_auth as ka
# ํ ํฐ ์ฌ๋ฐ๊ธ - 1๋ถ๋น 1ํ ๋ฐ๊ธ๋ฉ๋๋ค.
ka.auth(svr="prod") # ๋๋ "vps"
์ค์ ํ์ผ ์ค๋ฅ ์
kis_devlp.yamlํ์ผ์ ์ฑํค, ์ฑ์ํฌ๋ฆฟ์ด ์ฌ๋ฐ๋ฅธ์ง ํ์ธ- ๊ณ์ข๋ฒํธ ํ์์ด ๋ง๋์ง ํ์ธ (์ 8์๋ฆฌ + ๋ค 2์๋ฆฌ)
- ์ค์๊ฐ ์์ธ(WebSocket) ์ด์ฉ ์ค โNo close frame receivedโ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ,
kis_devlp.yaml์ ์ ๋ ฅํ์ HTS ID๊ฐ ์ ํํ์ง ํ์ธ
์์กด์ฑ ์ค๋ฅ ์
# ์์กด์ฑ ์ฌ์ค์น
uv sync --reinstall
Docker ์ค๋ฅ (backtester)
docker info # Docker Desktop ์คํ ์ํ ํ์ธ
docker images | grep lean # Lean ์ด๋ฏธ์ง ํ์ธ (์ฒซ ์คํ ์ ์๋ ๋ค์ด๋ก๋)
์ด๋น ๊ฑฐ๋๊ฑด์ ์ด๊ณผ (EGW00201)
๋ชจ์ํฌ์ ๊ณ์ข๋ REST API ํธ์ถ ์ ํ์ด ๋ฎ์ต๋๋ค. ๋จ์ผ ์กฐํ์๋ ๋ฌธ์ ์์ผ๋, ํ๋ผ๋ฏธํฐ ์ต์ ํ์ฒ๋ผ ์ฐ์ ํธ์ถ์ด ๋ง์ผ๋ฉด ์ค์ ํฌ์ ๊ณ์ข๋ฅผ ๊ถ์ฅํฉ๋๋ค.
๐ง ๋ฌธ์์ฌํญ
- ๐ฌ ํ๊ตญํฌ์์ฆ๊ถ Open API ์ฑ๋ด์ ์ธ์ ๋ ๊ถ๊ธํ ์ ์ ๋ฌผ์ด๋ณด์ธ์.
