kiwoom-cli 2.0.0__tar.gz → 2.1.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/PKG-INFO +95 -51
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/README.md +94 -49
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/__init__.py +1 -1
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/auth.py +1 -1
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/order.py +20 -20
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/us/exchange.py +3 -4
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/us/order_ops.py +5 -5
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/config.py +69 -28
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/formatters.py +13 -1
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/main.py +90 -75
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/streaming.py +8 -8
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli.egg-info/PKG-INFO +95 -51
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli.egg-info/SOURCES.txt +3 -2
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli.egg-info/requires.txt +0 -1
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/pyproject.toml +0 -1
- kiwoom_cli-2.1.1/tests/test_auth_cli.py +112 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_cli.py +25 -0
- kiwoom_cli-2.1.1/tests/test_credentials.py +144 -0
- kiwoom_cli-2.1.1/tests/test_json_purity.py +82 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_migration.py +22 -21
- kiwoom_cli-2.0.0/kiwoom_cli/secure_store.py +0 -133
- kiwoom_cli-2.0.0/tests/test_secure_store.py +0 -137
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/LICENSE +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/api_spec.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/client.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/__init__.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/_constants.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/account.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/dashboard.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/market.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/stock.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/stream.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/us/__init__.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/us/_constants.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/us/account_ops.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/us/detect.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/us/stock_ops.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/commands/watch.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli/output.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli.egg-info/dependency_links.txt +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli.egg-info/entry_points.txt +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/kiwoom_cli.egg-info/top_level.txt +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/setup.cfg +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_account.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_auth.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_client.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_formatters.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_formatters_property.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_market.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_order.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_stock.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_us.py +0 -0
- {kiwoom_cli-2.0.0 → kiwoom_cli-2.1.1}/tests/test_us_account.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kiwoom-cli
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.1.1
|
|
4
4
|
Summary: User-friendly CLI for the Kiwoom Securities REST API (키움증권)
|
|
5
5
|
License: LicenseRef-kiwoom-cli-Source-Available-1.0
|
|
6
6
|
Project-URL: Homepage, https://github.com/gejyn14/kiwoom-cli
|
|
@@ -26,7 +26,6 @@ Requires-Dist: tomli>=2.0; python_version < "3.11"
|
|
|
26
26
|
Requires-Dist: tomli-w>=1.0
|
|
27
27
|
Requires-Dist: keyring>=25.0
|
|
28
28
|
Requires-Dist: websockets>=12.0
|
|
29
|
-
Requires-Dist: cryptography>=42.0
|
|
30
29
|
Provides-Extra: dev
|
|
31
30
|
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
32
31
|
Requires-Dist: pytest-httpx>=0.30; extra == "dev"
|
|
@@ -38,30 +37,59 @@ Dynamic: license-file
|
|
|
38
37
|
|
|
39
38
|
# kiwoom-cli
|
|
40
39
|
|
|
41
|
-
|
|
40
|
+
**키움증권 REST API 전체를 터미널에서.** 시세 조회부터 주문, 실시간 스트리밍, 미국주식까지 — 명령어 하나로.
|
|
42
41
|
|
|
43
|
-
-
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
## 설치
|
|
42
|
+
[](https://pypi.org/project/kiwoom-cli/)
|
|
43
|
+
[](https://pypi.org/project/kiwoom-cli/)
|
|
44
|
+
[](https://github.com/gejyn14/kiwoom-cli/actions/workflows/ci.yml)
|
|
45
|
+
[](https://pypi.org/project/kiwoom-cli/)
|
|
46
|
+
[](LICENSE)
|
|
50
47
|
|
|
51
48
|
```bash
|
|
52
49
|
pip install kiwoom-cli
|
|
53
50
|
```
|
|
54
51
|
|
|
52
|
+
```bash
|
|
53
|
+
$ kiwoom stock price 005930 # 삼성전자 현재가
|
|
54
|
+
$ kiwoom order buy NVDA 10 --price 213.04 # 미국주식도 그대로
|
|
55
|
+
$ kiwoom -f json account balance | jq # AI 에이전트·스크립트 친화
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## 왜 kiwoom-cli인가
|
|
59
|
+
|
|
60
|
+
- **236개 API 전체 지원** — REST 217개 + WebSocket 실시간 19종. 시세·차트·계좌·주문·순위·업종·테마·ETF·ELW·금현물·미국주식까지 키움 REST API를 빠짐없이 커버합니다.
|
|
61
|
+
- **프롬프트 제로** — 인증정보는 OS 키체인에 저장되고, 어떤 명령도 비밀번호를 묻지 않습니다. `gh`/`aws`/`docker`와 같은 모델. 크론잡, CI, AI 에이전트가 그대로 돌립니다.
|
|
62
|
+
- **AI 에이전트 퍼스트** — 구조화된 JSON 출력(`-f json`), 일관된 exit code(0/1/2/3), 주문 확인 게이트(`--confirm`). Claude Code, 자동매매 스크립트에 바로 연결됩니다.
|
|
63
|
+
- **미국주식 자동 라우팅** — `005930`은 국내로, `NVDA`는 미국으로. 거래소(NASDAQ/NYSE/AMEX)도 자동 판별. 국내+미국 통합 잔고를 원화 총계로 보여줍니다.
|
|
64
|
+
- **사람에게도 친절** — Rich 테이블, 상승=빨강/하락=파랑 색상, 실시간 TUI 대시보드, shell 자동완성.
|
|
65
|
+
- **246개 테스트 + CI** — Python 3.10–3.13 매트릭스, CodeQL 정적 분석.
|
|
66
|
+
|
|
67
|
+
> 📖 **전체 문서는 [Wiki](https://github.com/gejyn14/kiwoom-cli/wiki)에서** — 설치 가이드, 명령어 레퍼런스, 미국주식·AI 에이전트·멀티 프로필 가이드, 릴리스 노트.
|
|
68
|
+
|
|
69
|
+
## 최근 업데이트
|
|
70
|
+
|
|
71
|
+
### v2.1 — 비밀번호 프롬프트 완전 제거 (2026-07)
|
|
72
|
+
|
|
73
|
+
앱 자체 암호화 계층을 걷어내고 모든 인증정보를 OS 키체인에 직접 저장합니다. `config setup`, `auth login` 어디서도 더 이상 비밀번호를 묻지 않습니다. 기존 사용자는 업그레이드 후 `kiwoom config setup` 한 번만 다시 실행하면 됩니다.
|
|
74
|
+
|
|
75
|
+
### v2.0 — 미국주식 지원 (2026-07)
|
|
76
|
+
|
|
77
|
+
미국주식 29개 엔드포인트를 기존 명령 체계에 그대로 통합했습니다. 티커만 입력하면 시장을 자동 판별하므로 미국 주문도 국내 주문과 똑같이 짧습니다. 소수점 가격, stop/stop-limit/vwap/twap 주문유형, 환전(`account exchange`), 국내+미국 통합 계좌 뷰를 지원합니다.
|
|
78
|
+
|
|
79
|
+
전체 변경 내역: [CHANGELOG](CHANGELOG.md) · [Wiki 릴리스 노트](https://github.com/gejyn14/kiwoom-cli/wiki/Release-Notes)
|
|
80
|
+
|
|
55
81
|
## 시작하기
|
|
56
82
|
|
|
83
|
+
[키움증권 REST API](https://openapi.kiwoom.com)에서 appkey/secretkey를 발급받은 뒤:
|
|
84
|
+
|
|
57
85
|
```bash
|
|
58
|
-
# 1. 초기 설정 (appkey, secretkey
|
|
86
|
+
# 1. 초기 설정 (appkey, secretkey → OS 키체인)
|
|
59
87
|
kiwoom config setup
|
|
60
88
|
|
|
61
|
-
# 2. 토큰 발급
|
|
89
|
+
# 2. 토큰 발급
|
|
62
90
|
kiwoom auth login
|
|
63
91
|
|
|
64
|
-
# 3.
|
|
92
|
+
# 3. 끝. 이후 모든 명령은 프롬프트 없이 동작
|
|
65
93
|
kiwoom stock info 005930
|
|
66
94
|
```
|
|
67
95
|
|
|
@@ -87,7 +115,7 @@ export KIWOOM_DOMAIN="prod" # prod 또는 mock
|
|
|
87
115
|
export KIWOOM_ACCOUNT="1234567" # 선택
|
|
88
116
|
```
|
|
89
117
|
|
|
90
|
-
appkey/secretkey는 보안을 위해 환경변수를 지원하지 않습니다. 반드시 `kiwoom config setup`으로
|
|
118
|
+
appkey/secretkey는 보안을 위해 환경변수를 지원하지 않습니다. 반드시 `kiwoom config setup`으로 OS 키체인에 저장하세요.
|
|
91
119
|
|
|
92
120
|
### 멀티 프로필
|
|
93
121
|
|
|
@@ -112,17 +140,38 @@ kiwoom -p isa account balance
|
|
|
112
140
|
kiwoom -p isa auth login
|
|
113
141
|
```
|
|
114
142
|
|
|
143
|
+
## AI 에이전트와 함께 쓰기
|
|
144
|
+
|
|
145
|
+
kiwoom-cli는 AI 에이전트가 도구로 쓰는 것을 처음부터 염두에 두고 설계됐습니다.
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
# 구조화된 JSON — 파싱이 필요 없는 출력
|
|
149
|
+
kiwoom -f json stock info 005930
|
|
150
|
+
kiwoom -f json market rank volume | jq '.[].stk_nm'
|
|
151
|
+
|
|
152
|
+
# 일관된 exit code — 0=성공, 1=입력오류, 2=API오류, 3=인증필요
|
|
153
|
+
kiwoom stock price 005930 || echo "재시도 또는 재인증"
|
|
154
|
+
|
|
155
|
+
# 주문은 기본 확인 게이트, 자동화 시에만 --confirm으로 명시적 스킵
|
|
156
|
+
kiwoom order buy 005930 10 --type market --confirm
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
- 어떤 명령도 비밀번호·생체인증을 요구하지 않으므로 에이전트 세션이 중간에 멈추지 않습니다.
|
|
160
|
+
- 페이지네이션(연속조회)은 자동 처리 — 에이전트가 커서를 관리할 필요가 없습니다.
|
|
161
|
+
- 자세한 패턴은 [Wiki: AI 에이전트 가이드](https://github.com/gejyn14/kiwoom-cli/wiki/AI-Agents) 참고.
|
|
162
|
+
|
|
115
163
|
## 명령어 구조
|
|
116
164
|
|
|
117
165
|
```
|
|
118
|
-
kiwoom [--format table|json|csv] [--no-color]
|
|
119
|
-
├── config 설정 (setup / show / domain)
|
|
166
|
+
kiwoom [--format table|json|csv] [--no-color] [-p 프로필]
|
|
167
|
+
├── config 설정 (setup / show / domain / profiles)
|
|
120
168
|
├── auth 인증 (login / logout / status)
|
|
121
169
|
├── stock 종목 조회 (info / orderbook / chart / compare ...)
|
|
122
170
|
├── account 계좌 조회 (balance / deposit / returns / pnl ...)
|
|
123
171
|
├── order 주문 (buy / sell / modify / cancel / credit / gold)
|
|
124
172
|
├── market 시장 정보 (rank / sector / theme / etf / elw / gold)
|
|
125
173
|
├── stream 실시간 스트리밍 (quote / orderbook / order / vi ...)
|
|
174
|
+
├── watch 실시간 종목 모니터링 (TUI)
|
|
126
175
|
├── dashboard 대시보드 (계좌 + 거래량 상위 한눈에)
|
|
127
176
|
└── api Raw API 호출
|
|
128
177
|
```
|
|
@@ -146,6 +195,7 @@ kiwoom stock sync # 전 시장 종목 리스트 다운로
|
|
|
146
195
|
kiwoom stock search 삼성 # 캐시에서 종목 검색
|
|
147
196
|
kiwoom stock search 삼성 --market kospi # 코스피만 필터
|
|
148
197
|
kiwoom stock watchlist "005930|000660" # 관심종목
|
|
198
|
+
kiwoom stock compare 005930 000660 # 종목 비교 (최대 여러 종목)
|
|
149
199
|
```
|
|
150
200
|
|
|
151
201
|
### 차트
|
|
@@ -198,6 +248,7 @@ kiwoom stock credit trend 005930 --date 20260301 --type loan
|
|
|
198
248
|
| `search` | 종목 검색 (캐시 기반, 시장/유형 필터) |
|
|
199
249
|
| `watchlist` | 관심종목 |
|
|
200
250
|
| `brokers` | 회원사 리스트 |
|
|
251
|
+
| `compare` | 복수 종목 비교 |
|
|
201
252
|
| `chart *` | 틱/분봉/일봉/주봉/월봉/년봉, 투자자별 차트 |
|
|
202
253
|
| `investor *` | 기관매매, 투자자별매매, 프로그램매매 등 10개 |
|
|
203
254
|
| `analysis *` | 거래상세, 거래량갱신, 매물대, PER, VI, 증권사 등 10개 |
|
|
@@ -212,7 +263,7 @@ kiwoom stock credit trend 005930 --date 20260301 --type loan
|
|
|
212
263
|
|
|
213
264
|
```bash
|
|
214
265
|
kiwoom account list # 계좌번호
|
|
215
|
-
kiwoom account balance # 잔고 + 보유종목 + 손익
|
|
266
|
+
kiwoom account balance # 잔고 + 보유종목 + 손익 (국내+미국 통합)
|
|
216
267
|
kiwoom account deposit # 예수금
|
|
217
268
|
kiwoom account asset # 추정자산
|
|
218
269
|
kiwoom account today # 당일현황
|
|
@@ -254,6 +305,9 @@ kiwoom account orderable amount 005930 --side buy --price 70000
|
|
|
254
305
|
| `orderable` | `amount` | 주문가능 금액 |
|
|
255
306
|
| `orderable` | `margin-qty` | 증거금율별 수량 |
|
|
256
307
|
| `orderable` | `credit-qty` | 신용보증금율별 수량 |
|
|
308
|
+
| `exchange` | `rate` | 환율 조회 |
|
|
309
|
+
| `exchange` | `estimate` | 환전 예상금액 |
|
|
310
|
+
| `exchange` | `apply` | 환전 신청 |
|
|
257
311
|
| `history` | `transactions` | 위탁종합 거래내역 |
|
|
258
312
|
| `history` | `journal` | 당일 매매일지 |
|
|
259
313
|
|
|
@@ -282,11 +336,13 @@ kiwoom account exchange apply 1000000 --confirm # 원화 → 달러 환전
|
|
|
282
336
|
- 정정은 가격만 가능(전량), 취소는 전량 취소만 지원됩니다 (키움 API 제약).
|
|
283
337
|
- 계좌 조회 명령(`balance/deposit/pnl/orders/history`)은 기본 통합 표시이며 `--market kr|us`로 필터링합니다.
|
|
284
338
|
|
|
339
|
+
자세한 가이드: [Wiki: 미국주식](https://github.com/gejyn14/kiwoom-cli/wiki/US-Stocks)
|
|
340
|
+
|
|
285
341
|
---
|
|
286
342
|
|
|
287
343
|
## order - 주문
|
|
288
344
|
|
|
289
|
-
|
|
345
|
+
주문은 실행 전 미리보기 + 대화형 확인이 기본입니다. 자동화 시에만 `--confirm`으로 스킵하세요.
|
|
290
346
|
|
|
291
347
|
```bash
|
|
292
348
|
# 주식
|
|
@@ -401,27 +457,13 @@ kiwoom stream types # 타입 코드 목록
|
|
|
401
457
|
|
|
402
458
|
---
|
|
403
459
|
|
|
404
|
-
## Raw API
|
|
405
|
-
|
|
406
|
-
```bash
|
|
407
|
-
kiwoom api ka10001 '{"stk_cd":"005930"}' # 테이블 출력
|
|
408
|
-
kiwoom api ka10001 '{"stk_cd":"005930"}' --raw # JSON 원본
|
|
409
|
-
```
|
|
410
|
-
|
|
411
|
-
---
|
|
412
|
-
|
|
413
|
-
## dashboard - 대시보드
|
|
460
|
+
## dashboard / Raw API
|
|
414
461
|
|
|
415
462
|
```bash
|
|
416
463
|
kiwoom dashboard # 계좌 요약 + 거래량 상위 한눈에
|
|
417
|
-
```
|
|
418
464
|
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
```bash
|
|
422
|
-
kiwoom stock compare 005930 000660 # 삼성전자 vs SK하이닉스
|
|
423
|
-
kiwoom stock compare 005930 000660 035420 # 3종목 비교
|
|
424
|
-
kiwoom -f json stock compare 005930 000660 # JSON 출력
|
|
465
|
+
kiwoom api ka10001 '{"stk_cd":"005930"}' # Raw API — 테이블 출력
|
|
466
|
+
kiwoom api ka10001 '{"stk_cd":"005930"}' --raw # JSON 원본
|
|
425
467
|
```
|
|
426
468
|
|
|
427
469
|
---
|
|
@@ -467,12 +509,29 @@ eval (env _KIWOOM_COMPLETE=fish_source kiwoom)
|
|
|
467
509
|
| 2 | API/네트워크 오류 |
|
|
468
510
|
| 3 | 인증 필요 (토큰 만료) |
|
|
469
511
|
|
|
512
|
+
## 보안
|
|
513
|
+
|
|
514
|
+
모든 인증정보(appkey, secretkey, 토큰)는 **OS 키체인**(macOS Keychain / Windows Credential Manager / Linux Secret Service)에 저장됩니다. 파일로 존재하지 않으며, 키체인이 디스크 저장 시 암호화를 담당합니다. `gh`, `aws`, `docker` CLI와 동일한 모델입니다.
|
|
515
|
+
|
|
516
|
+
| 항목 | 저장 방식 | 프롬프트 |
|
|
517
|
+
| ------------------ | ------------------ | :------: |
|
|
518
|
+
| appkey / secretkey | OS 키체인 | X |
|
|
519
|
+
| 토큰 | OS 키체인 | X |
|
|
520
|
+
| config.toml | 도메인, 계좌번호만 | X |
|
|
521
|
+
|
|
522
|
+
- 모든 명령어는 비밀번호/생체인증 프롬프트 없이 동작 (AI 에이전트·자동화 친화적)
|
|
523
|
+
- 앱 자체 암호화 계층은 의도적으로 두지 않음 — 추가 계층은 명령마다 잠금 해제 프롬프트를 요구하게 되어 CLI 사용성을 해침
|
|
524
|
+
- v2.0 이하에서 업그레이드한 경우: 암호화 저장소 형식이 제거되어 `kiwoom config setup`을 한 번 다시 실행해야 합니다
|
|
525
|
+
- 주문은 기본적으로 미리보기 + 대화형 확인을 거칩니다 (`--confirm`으로 스킵)
|
|
526
|
+
|
|
527
|
+
자세한 내용: [Wiki: 보안 모델](https://github.com/gejyn14/kiwoom-cli/wiki/Security) · [SECURITY.md](SECURITY.md)
|
|
528
|
+
|
|
470
529
|
## 참고
|
|
471
530
|
|
|
472
531
|
| 항목 | 값 |
|
|
473
532
|
| ---------------- | ---------------------------------------- |
|
|
474
533
|
| 설정 파일 | `~/.kiwoom/config.toml` (도메인, 계좌만) |
|
|
475
|
-
| appkey/secretkey | OS 키체인
|
|
534
|
+
| appkey/secretkey | OS 키체인 |
|
|
476
535
|
| 토큰 | OS 키체인 |
|
|
477
536
|
| 캐시 디렉터리 | `~/.kiwoom/cache/` |
|
|
478
537
|
| 운영 도메인 | `https://api.kiwoom.com` |
|
|
@@ -485,21 +544,6 @@ eval (env _KIWOOM_COMPLETE=fish_source kiwoom)
|
|
|
485
544
|
- 종목코드 6자리: `005930` (삼성전자)
|
|
486
545
|
- 금현물: `M04020000` (1kg), `M04020100` (미니 100g)
|
|
487
546
|
|
|
488
|
-
## 보안
|
|
489
|
-
|
|
490
|
-
인증정보(appkey, secretkey)는 **OS 키체인에 암호화되어 저장**됩니다. 파일로 존재하지 않으며, 비밀번호 없이는 복호화할 수 없습니다.
|
|
491
|
-
|
|
492
|
-
| 항목 | 저장 방식 | 비밀번호 필요 |
|
|
493
|
-
| ------------------ | ------------------ | :---------------------------------: |
|
|
494
|
-
| appkey / secretkey | 암호화 + OS 키체인 | O (`config setup`, `auth login` 시) |
|
|
495
|
-
| 토큰 | OS 키체인 (평문) | X (만료되는 값) |
|
|
496
|
-
| config.toml | 도메인, 계좌번호만 | X |
|
|
497
|
-
|
|
498
|
-
- `config setup` 시 설정한 비밀번호로 appkey/secretkey를 암호화
|
|
499
|
-
- `auth login/logout` 시 비밀번호 확인 후 키체인 접근
|
|
500
|
-
- 토큰 발급 후 일반 명령어는 비밀번호 없이 사용
|
|
501
|
-
- `keyring.get_password()`로 직접 접근해도 암호화된 값만 반환
|
|
502
|
-
|
|
503
547
|
## License
|
|
504
548
|
|
|
505
549
|
kiwoom-cli **Source-Available License, Version 1.0** — see [LICENSE](LICENSE).
|
|
@@ -1,29 +1,58 @@
|
|
|
1
1
|
# kiwoom-cli
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**키움증권 REST API 전체를 터미널에서.** 시세 조회부터 주문, 실시간 스트리밍, 미국주식까지 — 명령어 하나로.
|
|
4
4
|
|
|
5
|
-
-
|
|
6
|
-
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
## 설치
|
|
5
|
+
[](https://pypi.org/project/kiwoom-cli/)
|
|
6
|
+
[](https://pypi.org/project/kiwoom-cli/)
|
|
7
|
+
[](https://github.com/gejyn14/kiwoom-cli/actions/workflows/ci.yml)
|
|
8
|
+
[](https://pypi.org/project/kiwoom-cli/)
|
|
9
|
+
[](LICENSE)
|
|
12
10
|
|
|
13
11
|
```bash
|
|
14
12
|
pip install kiwoom-cli
|
|
15
13
|
```
|
|
16
14
|
|
|
15
|
+
```bash
|
|
16
|
+
$ kiwoom stock price 005930 # 삼성전자 현재가
|
|
17
|
+
$ kiwoom order buy NVDA 10 --price 213.04 # 미국주식도 그대로
|
|
18
|
+
$ kiwoom -f json account balance | jq # AI 에이전트·스크립트 친화
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 왜 kiwoom-cli인가
|
|
22
|
+
|
|
23
|
+
- **236개 API 전체 지원** — REST 217개 + WebSocket 실시간 19종. 시세·차트·계좌·주문·순위·업종·테마·ETF·ELW·금현물·미국주식까지 키움 REST API를 빠짐없이 커버합니다.
|
|
24
|
+
- **프롬프트 제로** — 인증정보는 OS 키체인에 저장되고, 어떤 명령도 비밀번호를 묻지 않습니다. `gh`/`aws`/`docker`와 같은 모델. 크론잡, CI, AI 에이전트가 그대로 돌립니다.
|
|
25
|
+
- **AI 에이전트 퍼스트** — 구조화된 JSON 출력(`-f json`), 일관된 exit code(0/1/2/3), 주문 확인 게이트(`--confirm`). Claude Code, 자동매매 스크립트에 바로 연결됩니다.
|
|
26
|
+
- **미국주식 자동 라우팅** — `005930`은 국내로, `NVDA`는 미국으로. 거래소(NASDAQ/NYSE/AMEX)도 자동 판별. 국내+미국 통합 잔고를 원화 총계로 보여줍니다.
|
|
27
|
+
- **사람에게도 친절** — Rich 테이블, 상승=빨강/하락=파랑 색상, 실시간 TUI 대시보드, shell 자동완성.
|
|
28
|
+
- **246개 테스트 + CI** — Python 3.10–3.13 매트릭스, CodeQL 정적 분석.
|
|
29
|
+
|
|
30
|
+
> 📖 **전체 문서는 [Wiki](https://github.com/gejyn14/kiwoom-cli/wiki)에서** — 설치 가이드, 명령어 레퍼런스, 미국주식·AI 에이전트·멀티 프로필 가이드, 릴리스 노트.
|
|
31
|
+
|
|
32
|
+
## 최근 업데이트
|
|
33
|
+
|
|
34
|
+
### v2.1 — 비밀번호 프롬프트 완전 제거 (2026-07)
|
|
35
|
+
|
|
36
|
+
앱 자체 암호화 계층을 걷어내고 모든 인증정보를 OS 키체인에 직접 저장합니다. `config setup`, `auth login` 어디서도 더 이상 비밀번호를 묻지 않습니다. 기존 사용자는 업그레이드 후 `kiwoom config setup` 한 번만 다시 실행하면 됩니다.
|
|
37
|
+
|
|
38
|
+
### v2.0 — 미국주식 지원 (2026-07)
|
|
39
|
+
|
|
40
|
+
미국주식 29개 엔드포인트를 기존 명령 체계에 그대로 통합했습니다. 티커만 입력하면 시장을 자동 판별하므로 미국 주문도 국내 주문과 똑같이 짧습니다. 소수점 가격, stop/stop-limit/vwap/twap 주문유형, 환전(`account exchange`), 국내+미국 통합 계좌 뷰를 지원합니다.
|
|
41
|
+
|
|
42
|
+
전체 변경 내역: [CHANGELOG](CHANGELOG.md) · [Wiki 릴리스 노트](https://github.com/gejyn14/kiwoom-cli/wiki/Release-Notes)
|
|
43
|
+
|
|
17
44
|
## 시작하기
|
|
18
45
|
|
|
46
|
+
[키움증권 REST API](https://openapi.kiwoom.com)에서 appkey/secretkey를 발급받은 뒤:
|
|
47
|
+
|
|
19
48
|
```bash
|
|
20
|
-
# 1. 초기 설정 (appkey, secretkey
|
|
49
|
+
# 1. 초기 설정 (appkey, secretkey → OS 키체인)
|
|
21
50
|
kiwoom config setup
|
|
22
51
|
|
|
23
|
-
# 2. 토큰 발급
|
|
52
|
+
# 2. 토큰 발급
|
|
24
53
|
kiwoom auth login
|
|
25
54
|
|
|
26
|
-
# 3.
|
|
55
|
+
# 3. 끝. 이후 모든 명령은 프롬프트 없이 동작
|
|
27
56
|
kiwoom stock info 005930
|
|
28
57
|
```
|
|
29
58
|
|
|
@@ -49,7 +78,7 @@ export KIWOOM_DOMAIN="prod" # prod 또는 mock
|
|
|
49
78
|
export KIWOOM_ACCOUNT="1234567" # 선택
|
|
50
79
|
```
|
|
51
80
|
|
|
52
|
-
appkey/secretkey는 보안을 위해 환경변수를 지원하지 않습니다. 반드시 `kiwoom config setup`으로
|
|
81
|
+
appkey/secretkey는 보안을 위해 환경변수를 지원하지 않습니다. 반드시 `kiwoom config setup`으로 OS 키체인에 저장하세요.
|
|
53
82
|
|
|
54
83
|
### 멀티 프로필
|
|
55
84
|
|
|
@@ -74,17 +103,38 @@ kiwoom -p isa account balance
|
|
|
74
103
|
kiwoom -p isa auth login
|
|
75
104
|
```
|
|
76
105
|
|
|
106
|
+
## AI 에이전트와 함께 쓰기
|
|
107
|
+
|
|
108
|
+
kiwoom-cli는 AI 에이전트가 도구로 쓰는 것을 처음부터 염두에 두고 설계됐습니다.
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
# 구조화된 JSON — 파싱이 필요 없는 출력
|
|
112
|
+
kiwoom -f json stock info 005930
|
|
113
|
+
kiwoom -f json market rank volume | jq '.[].stk_nm'
|
|
114
|
+
|
|
115
|
+
# 일관된 exit code — 0=성공, 1=입력오류, 2=API오류, 3=인증필요
|
|
116
|
+
kiwoom stock price 005930 || echo "재시도 또는 재인증"
|
|
117
|
+
|
|
118
|
+
# 주문은 기본 확인 게이트, 자동화 시에만 --confirm으로 명시적 스킵
|
|
119
|
+
kiwoom order buy 005930 10 --type market --confirm
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
- 어떤 명령도 비밀번호·생체인증을 요구하지 않으므로 에이전트 세션이 중간에 멈추지 않습니다.
|
|
123
|
+
- 페이지네이션(연속조회)은 자동 처리 — 에이전트가 커서를 관리할 필요가 없습니다.
|
|
124
|
+
- 자세한 패턴은 [Wiki: AI 에이전트 가이드](https://github.com/gejyn14/kiwoom-cli/wiki/AI-Agents) 참고.
|
|
125
|
+
|
|
77
126
|
## 명령어 구조
|
|
78
127
|
|
|
79
128
|
```
|
|
80
|
-
kiwoom [--format table|json|csv] [--no-color]
|
|
81
|
-
├── config 설정 (setup / show / domain)
|
|
129
|
+
kiwoom [--format table|json|csv] [--no-color] [-p 프로필]
|
|
130
|
+
├── config 설정 (setup / show / domain / profiles)
|
|
82
131
|
├── auth 인증 (login / logout / status)
|
|
83
132
|
├── stock 종목 조회 (info / orderbook / chart / compare ...)
|
|
84
133
|
├── account 계좌 조회 (balance / deposit / returns / pnl ...)
|
|
85
134
|
├── order 주문 (buy / sell / modify / cancel / credit / gold)
|
|
86
135
|
├── market 시장 정보 (rank / sector / theme / etf / elw / gold)
|
|
87
136
|
├── stream 실시간 스트리밍 (quote / orderbook / order / vi ...)
|
|
137
|
+
├── watch 실시간 종목 모니터링 (TUI)
|
|
88
138
|
├── dashboard 대시보드 (계좌 + 거래량 상위 한눈에)
|
|
89
139
|
└── api Raw API 호출
|
|
90
140
|
```
|
|
@@ -108,6 +158,7 @@ kiwoom stock sync # 전 시장 종목 리스트 다운로
|
|
|
108
158
|
kiwoom stock search 삼성 # 캐시에서 종목 검색
|
|
109
159
|
kiwoom stock search 삼성 --market kospi # 코스피만 필터
|
|
110
160
|
kiwoom stock watchlist "005930|000660" # 관심종목
|
|
161
|
+
kiwoom stock compare 005930 000660 # 종목 비교 (최대 여러 종목)
|
|
111
162
|
```
|
|
112
163
|
|
|
113
164
|
### 차트
|
|
@@ -160,6 +211,7 @@ kiwoom stock credit trend 005930 --date 20260301 --type loan
|
|
|
160
211
|
| `search` | 종목 검색 (캐시 기반, 시장/유형 필터) |
|
|
161
212
|
| `watchlist` | 관심종목 |
|
|
162
213
|
| `brokers` | 회원사 리스트 |
|
|
214
|
+
| `compare` | 복수 종목 비교 |
|
|
163
215
|
| `chart *` | 틱/분봉/일봉/주봉/월봉/년봉, 투자자별 차트 |
|
|
164
216
|
| `investor *` | 기관매매, 투자자별매매, 프로그램매매 등 10개 |
|
|
165
217
|
| `analysis *` | 거래상세, 거래량갱신, 매물대, PER, VI, 증권사 등 10개 |
|
|
@@ -174,7 +226,7 @@ kiwoom stock credit trend 005930 --date 20260301 --type loan
|
|
|
174
226
|
|
|
175
227
|
```bash
|
|
176
228
|
kiwoom account list # 계좌번호
|
|
177
|
-
kiwoom account balance # 잔고 + 보유종목 + 손익
|
|
229
|
+
kiwoom account balance # 잔고 + 보유종목 + 손익 (국내+미국 통합)
|
|
178
230
|
kiwoom account deposit # 예수금
|
|
179
231
|
kiwoom account asset # 추정자산
|
|
180
232
|
kiwoom account today # 당일현황
|
|
@@ -216,6 +268,9 @@ kiwoom account orderable amount 005930 --side buy --price 70000
|
|
|
216
268
|
| `orderable` | `amount` | 주문가능 금액 |
|
|
217
269
|
| `orderable` | `margin-qty` | 증거금율별 수량 |
|
|
218
270
|
| `orderable` | `credit-qty` | 신용보증금율별 수량 |
|
|
271
|
+
| `exchange` | `rate` | 환율 조회 |
|
|
272
|
+
| `exchange` | `estimate` | 환전 예상금액 |
|
|
273
|
+
| `exchange` | `apply` | 환전 신청 |
|
|
219
274
|
| `history` | `transactions` | 위탁종합 거래내역 |
|
|
220
275
|
| `history` | `journal` | 당일 매매일지 |
|
|
221
276
|
|
|
@@ -244,11 +299,13 @@ kiwoom account exchange apply 1000000 --confirm # 원화 → 달러 환전
|
|
|
244
299
|
- 정정은 가격만 가능(전량), 취소는 전량 취소만 지원됩니다 (키움 API 제약).
|
|
245
300
|
- 계좌 조회 명령(`balance/deposit/pnl/orders/history`)은 기본 통합 표시이며 `--market kr|us`로 필터링합니다.
|
|
246
301
|
|
|
302
|
+
자세한 가이드: [Wiki: 미국주식](https://github.com/gejyn14/kiwoom-cli/wiki/US-Stocks)
|
|
303
|
+
|
|
247
304
|
---
|
|
248
305
|
|
|
249
306
|
## order - 주문
|
|
250
307
|
|
|
251
|
-
|
|
308
|
+
주문은 실행 전 미리보기 + 대화형 확인이 기본입니다. 자동화 시에만 `--confirm`으로 스킵하세요.
|
|
252
309
|
|
|
253
310
|
```bash
|
|
254
311
|
# 주식
|
|
@@ -363,27 +420,13 @@ kiwoom stream types # 타입 코드 목록
|
|
|
363
420
|
|
|
364
421
|
---
|
|
365
422
|
|
|
366
|
-
## Raw API
|
|
367
|
-
|
|
368
|
-
```bash
|
|
369
|
-
kiwoom api ka10001 '{"stk_cd":"005930"}' # 테이블 출력
|
|
370
|
-
kiwoom api ka10001 '{"stk_cd":"005930"}' --raw # JSON 원본
|
|
371
|
-
```
|
|
372
|
-
|
|
373
|
-
---
|
|
374
|
-
|
|
375
|
-
## dashboard - 대시보드
|
|
423
|
+
## dashboard / Raw API
|
|
376
424
|
|
|
377
425
|
```bash
|
|
378
426
|
kiwoom dashboard # 계좌 요약 + 거래량 상위 한눈에
|
|
379
|
-
```
|
|
380
427
|
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
```bash
|
|
384
|
-
kiwoom stock compare 005930 000660 # 삼성전자 vs SK하이닉스
|
|
385
|
-
kiwoom stock compare 005930 000660 035420 # 3종목 비교
|
|
386
|
-
kiwoom -f json stock compare 005930 000660 # JSON 출력
|
|
428
|
+
kiwoom api ka10001 '{"stk_cd":"005930"}' # Raw API — 테이블 출력
|
|
429
|
+
kiwoom api ka10001 '{"stk_cd":"005930"}' --raw # JSON 원본
|
|
387
430
|
```
|
|
388
431
|
|
|
389
432
|
---
|
|
@@ -429,12 +472,29 @@ eval (env _KIWOOM_COMPLETE=fish_source kiwoom)
|
|
|
429
472
|
| 2 | API/네트워크 오류 |
|
|
430
473
|
| 3 | 인증 필요 (토큰 만료) |
|
|
431
474
|
|
|
475
|
+
## 보안
|
|
476
|
+
|
|
477
|
+
모든 인증정보(appkey, secretkey, 토큰)는 **OS 키체인**(macOS Keychain / Windows Credential Manager / Linux Secret Service)에 저장됩니다. 파일로 존재하지 않으며, 키체인이 디스크 저장 시 암호화를 담당합니다. `gh`, `aws`, `docker` CLI와 동일한 모델입니다.
|
|
478
|
+
|
|
479
|
+
| 항목 | 저장 방식 | 프롬프트 |
|
|
480
|
+
| ------------------ | ------------------ | :------: |
|
|
481
|
+
| appkey / secretkey | OS 키체인 | X |
|
|
482
|
+
| 토큰 | OS 키체인 | X |
|
|
483
|
+
| config.toml | 도메인, 계좌번호만 | X |
|
|
484
|
+
|
|
485
|
+
- 모든 명령어는 비밀번호/생체인증 프롬프트 없이 동작 (AI 에이전트·자동화 친화적)
|
|
486
|
+
- 앱 자체 암호화 계층은 의도적으로 두지 않음 — 추가 계층은 명령마다 잠금 해제 프롬프트를 요구하게 되어 CLI 사용성을 해침
|
|
487
|
+
- v2.0 이하에서 업그레이드한 경우: 암호화 저장소 형식이 제거되어 `kiwoom config setup`을 한 번 다시 실행해야 합니다
|
|
488
|
+
- 주문은 기본적으로 미리보기 + 대화형 확인을 거칩니다 (`--confirm`으로 스킵)
|
|
489
|
+
|
|
490
|
+
자세한 내용: [Wiki: 보안 모델](https://github.com/gejyn14/kiwoom-cli/wiki/Security) · [SECURITY.md](SECURITY.md)
|
|
491
|
+
|
|
432
492
|
## 참고
|
|
433
493
|
|
|
434
494
|
| 항목 | 값 |
|
|
435
495
|
| ---------------- | ---------------------------------------- |
|
|
436
496
|
| 설정 파일 | `~/.kiwoom/config.toml` (도메인, 계좌만) |
|
|
437
|
-
| appkey/secretkey | OS 키체인
|
|
497
|
+
| appkey/secretkey | OS 키체인 |
|
|
438
498
|
| 토큰 | OS 키체인 |
|
|
439
499
|
| 캐시 디렉터리 | `~/.kiwoom/cache/` |
|
|
440
500
|
| 운영 도메인 | `https://api.kiwoom.com` |
|
|
@@ -447,21 +507,6 @@ eval (env _KIWOOM_COMPLETE=fish_source kiwoom)
|
|
|
447
507
|
- 종목코드 6자리: `005930` (삼성전자)
|
|
448
508
|
- 금현물: `M04020000` (1kg), `M04020100` (미니 100g)
|
|
449
509
|
|
|
450
|
-
## 보안
|
|
451
|
-
|
|
452
|
-
인증정보(appkey, secretkey)는 **OS 키체인에 암호화되어 저장**됩니다. 파일로 존재하지 않으며, 비밀번호 없이는 복호화할 수 없습니다.
|
|
453
|
-
|
|
454
|
-
| 항목 | 저장 방식 | 비밀번호 필요 |
|
|
455
|
-
| ------------------ | ------------------ | :---------------------------------: |
|
|
456
|
-
| appkey / secretkey | 암호화 + OS 키체인 | O (`config setup`, `auth login` 시) |
|
|
457
|
-
| 토큰 | OS 키체인 (평문) | X (만료되는 값) |
|
|
458
|
-
| config.toml | 도메인, 계좌번호만 | X |
|
|
459
|
-
|
|
460
|
-
- `config setup` 시 설정한 비밀번호로 appkey/secretkey를 암호화
|
|
461
|
-
- `auth login/logout` 시 비밀번호 확인 후 키체인 접근
|
|
462
|
-
- 토큰 발급 후 일반 명령어는 비밀번호 없이 사용
|
|
463
|
-
- `keyring.get_password()`로 직접 접근해도 암호화된 값만 반환
|
|
464
|
-
|
|
465
510
|
## License
|
|
466
511
|
|
|
467
512
|
kiwoom-cli **Source-Available License, Version 1.0** — see [LICENSE](LICENSE).
|
|
@@ -21,7 +21,7 @@ def save_token(token: str, profile: str | None = None) -> None:
|
|
|
21
21
|
|
|
22
22
|
def load_token(profile: str | None = None) -> str | None:
|
|
23
23
|
p = config.resolve_profile(profile)
|
|
24
|
-
return
|
|
24
|
+
return config._keyring_get(f"{p}:token")
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
def delete_token(profile: str | None = None) -> None:
|