kwcli 0.1.0__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.
Files changed (61) hide show
  1. kwcli-0.1.0/LICENSE.md +36 -0
  2. kwcli-0.1.0/PKG-INFO +215 -0
  3. kwcli-0.1.0/README.md +202 -0
  4. kwcli-0.1.0/kiwoom/__init__.py +47 -0
  5. kwcli-0.1.0/kiwoom/_data/kiwoom_api_spec.json +66372 -0
  6. kwcli-0.1.0/kiwoom/core/__init__.py +6 -0
  7. kwcli-0.1.0/kiwoom/core/auth.py +349 -0
  8. kwcli-0.1.0/kiwoom/core/client.py +244 -0
  9. kwcli-0.1.0/kiwoom/core/errors.py +177 -0
  10. kwcli-0.1.0/kiwoom/core/platform_paths.py +68 -0
  11. kwcli-0.1.0/kiwoom/core/profiles.py +143 -0
  12. kwcli-0.1.0/kiwoom/core/runtime.py +153 -0
  13. kwcli-0.1.0/kiwoom/core/secrets.py +217 -0
  14. kwcli-0.1.0/kiwoom/core/settings.py +64 -0
  15. kwcli-0.1.0/kiwoom/core/token_store.py +186 -0
  16. kwcli-0.1.0/kiwoom/core/types.py +28 -0
  17. kwcli-0.1.0/kiwoom/core/ws_client.py +262 -0
  18. kwcli-0.1.0/kiwoom/realtime/__init__.py +30 -0
  19. kwcli-0.1.0/kiwoom/realtime/decoders.py +171 -0
  20. kwcli-0.1.0/kiwoom/realtime/events.py +98 -0
  21. kwcli-0.1.0/kiwoom/realtime/packets.py +65 -0
  22. kwcli-0.1.0/kiwoom/realtime/schemas.py +76 -0
  23. kwcli-0.1.0/kiwoom/realtime/stream.py +213 -0
  24. kwcli-0.1.0/kiwoom/specs.py +272 -0
  25. kwcli-0.1.0/kiwoom_cli/README.md +671 -0
  26. kwcli-0.1.0/kiwoom_cli/__init__.py +9 -0
  27. kwcli-0.1.0/kiwoom_cli/__main__.py +5 -0
  28. kwcli-0.1.0/kiwoom_cli/argument_maps.py +561 -0
  29. kwcli-0.1.0/kiwoom_cli/arguments.py +147 -0
  30. kwcli-0.1.0/kiwoom_cli/auth_context.py +64 -0
  31. kwcli-0.1.0/kiwoom_cli/banner.py +125 -0
  32. kwcli-0.1.0/kiwoom_cli/commands/__init__.py +1 -0
  33. kwcli-0.1.0/kiwoom_cli/commands/auth.py +406 -0
  34. kwcli-0.1.0/kiwoom_cli/commands/groups.py +281 -0
  35. kwcli-0.1.0/kiwoom_cli/commands/mapped.py +74 -0
  36. kwcli-0.1.0/kiwoom_cli/commands/orders.py +158 -0
  37. kwcli-0.1.0/kiwoom_cli/commands/spec.py +98 -0
  38. kwcli-0.1.0/kiwoom_cli/commands/stocks.py +100 -0
  39. kwcli-0.1.0/kiwoom_cli/commands/streams.py +470 -0
  40. kwcli-0.1.0/kiwoom_cli/doctor.py +324 -0
  41. kwcli-0.1.0/kiwoom_cli/errors.py +24 -0
  42. kwcli-0.1.0/kiwoom_cli/executor/__init__.py +33 -0
  43. kwcli-0.1.0/kiwoom_cli/executor/condition.py +374 -0
  44. kwcli-0.1.0/kiwoom_cli/executor/rest.py +132 -0
  45. kwcli-0.1.0/kiwoom_cli/executor/waits.py +34 -0
  46. kwcli-0.1.0/kiwoom_cli/executor/websocket.py +131 -0
  47. kwcli-0.1.0/kiwoom_cli/main.py +203 -0
  48. kwcli-0.1.0/kiwoom_cli/maps/README.md +99 -0
  49. kwcli-0.1.0/kiwoom_cli/maps/api_commands.csv +209 -0
  50. kwcli-0.1.0/kiwoom_cli/maps/arguments.csv +731 -0
  51. kwcli-0.1.0/kiwoom_cli/maps/order_confirmation_commands.csv +13 -0
  52. kwcli-0.1.0/kiwoom_cli/maps/order_confirmation_fields.csv +71 -0
  53. kwcli-0.1.0/kiwoom_cli/maps/order_price_policies.csv +47 -0
  54. kwcli-0.1.0/kiwoom_cli/maps/order_value_labels.csv +28 -0
  55. kwcli-0.1.0/kiwoom_cli/maps/positional_arguments.csv +21 -0
  56. kwcli-0.1.0/kiwoom_cli/order_confirmation.py +167 -0
  57. kwcli-0.1.0/kiwoom_cli/output.py +136 -0
  58. kwcli-0.1.0/kiwoom_cli/registry.py +95 -0
  59. kwcli-0.1.0/kiwoom_cli/safety.py +30 -0
  60. kwcli-0.1.0/kiwoom_cli/setup.py +533 -0
  61. kwcli-0.1.0/pyproject.toml +43 -0
kwcli-0.1.0/LICENSE.md ADDED
@@ -0,0 +1,36 @@
1
+ 키움증권 OpenAPI 소프트웨어 라이선스
2
+
3
+ Copyright (c) 2026 키움증권 주식회사 (Kiwoom Securities Co., Ltd.)
4
+ All rights reserved. (모든 권리 보유)
5
+
6
+ 1. 권리의 귀속
7
+ 본 소프트웨어 및 관련 문서 파일(이하 "소프트웨어")에 대한 모든 저작권 및
8
+ 지식재산권은 키움증권 주식회사(이하 "회사")에 귀속됩니다.
9
+
10
+ 2. 사용 허락의 범위
11
+ 본 소프트웨어는 회사가 제공하는 키움증권 OpenAPI 서비스를 이용하기 위한
12
+ 목적에 한하여 사용할 수 있습니다. 회사는 이용자에게 본 소프트웨어를
13
+ 위 목적 범위 내에서 사용할 수 있는 비독점적이고 양도 불가능한 권한을
14
+ 부여합니다.
15
+
16
+ 3. 제한 사항
17
+ 회사의 사전 서면 동의 없이 다음 행위를 할 수 없습니다.
18
+ - 본 소프트웨어의 복제, 배포, 전송, 출판
19
+ - 본 소프트웨어의 수정, 2차적 저작물 작성, 역설계(reverse engineering)
20
+ - 본 소프트웨어의 판매, 대여, 재라이선스 등 상업적 이용
21
+ - 저작권 표시 및 본 라이선스 고지의 제거 또는 변경
22
+
23
+ 4. 보증의 부인 (Disclaimer)
24
+ 본 소프트웨어는 "있는 그대로(AS IS)" 제공되며, 회사는 상품성, 특정 목적
25
+ 적합성, 비침해성에 대한 명시적·묵시적 보증을 하지 않습니다.
26
+
27
+ 5. 책임의 제한
28
+ 본 소프트웨어의 사용 또는 사용 불능으로 인하여 발생하는 어떠한 직접적·
29
+ 간접적·부수적 손해에 대하여도 회사는 책임을 지지 않습니다. 투자 판단 및
30
+ 그 결과에 대한 책임은 전적으로 이용자 본인에게 있습니다.
31
+
32
+ 6. 준거법 및 관할
33
+ 본 라이선스는 대한민국 법률에 따라 해석되며, 분쟁 발생 시 회사 본점
34
+ 소재지를 관할하는 법원을 제1심 관할 법원으로 합니다.
35
+
36
+ 문의: [키움증권 OpenAPI 담당 부서 / 연락처]
kwcli-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,215 @@
1
+ Metadata-Version: 2.4
2
+ Name: kwcli
3
+ Version: 0.1.0
4
+ Summary: Kiwoom OpenAPI toolkit
5
+ License-File: LICENSE.md
6
+ Requires-Python: >=3.13
7
+ Requires-Dist: keyring>=25.7.0
8
+ Requires-Dist: pandas>=3.0.3
9
+ Requires-Dist: platformdirs>=4.9.4
10
+ Requires-Dist: requests>=2.33.1
11
+ Requires-Dist: websockets>=15.0.1
12
+ Description-Content-Type: text/markdown
13
+
14
+ # Kiwoom CLI
15
+
16
+ `kiwoomcli`는 키움증권 OpenAPI를 위한 커맨드라인 클라이언트입니다. 터미널에서
17
+ 키움 OpenAPI 데이터를 조회하고, 인증 상태를 관리하며, 안전장치가 적용된 주문
18
+ 작업을 수행해야 하는 사람과 AI 에이전트를 위한 **탐색(discovery) 중심**의 운영
19
+ 도구입니다.
20
+
21
+ 설치 후 사용하는 콘솔 명령은 `kiwoomcli` 입니다.
22
+
23
+ ## 설치
24
+
25
+ ```sh
26
+ uv tool install kiwoomcli
27
+ # 또는
28
+ pipx install kiwoomcli
29
+ # 또는
30
+ pip install kiwoomcli
31
+ ```
32
+
33
+ 설치한 뒤 계정과 자격 증명을 초기화합니다.
34
+
35
+ ```sh
36
+ kiwoomcli setup
37
+ ```
38
+
39
+ ## 빠른 시작
40
+
41
+ 일상적인 흐름은 **먼저 탐색하고, 그다음 명령 하나를 실행**하는 것입니다. 어떤
42
+ 명령이든 `-h`를 붙이면 실시간으로 매핑된 계약 정보(요약 / 동작 / 예시 / OpenAPI
43
+ 매핑)를 볼 수 있습니다.
44
+
45
+ ```sh
46
+ kiwoomcli setup # 온보딩: 별칭, demo/real, 키, 검증
47
+ kiwoomcli spec search "체결" # 필요한 API/명령 찾기
48
+ kiwoomcli domestic stocks info --code 005930 -h # 매핑된 계약 확인
49
+ kiwoomcli domestic stocks info --code 005930 --format json
50
+ kiwoomcli domestic orders buy --code 005930 --qty 1 --price 70000 --order-type limit --confirm
51
+ ```
52
+
53
+ 전체 명령 목록을 외우기보다는, 평소에는 `spec search`와 `-h`를 활용하세요.
54
+
55
+ ## 인증과 프로필
56
+
57
+ - `kiwoomcli setup`은 온보딩 초기화 명령입니다. 환경 사전 점검(OS 자격 증명
58
+ 저장소 사용 가능 여부와 PATH 모호성 경고)을 수행하고, 계정 별칭을 만들며,
59
+ `demo`/`real`을 선택하고, App Key / Secret을 저장한 뒤, 안전한 읽기 전용
60
+ 호출로 검증하고, 현재 프로필을 지정한 다음 준비 상태 요약을 출력합니다.
61
+ 비대화형 셸에서는 멈추지 않고 안내 메시지와 함께 실패합니다(`--mode` 전달).
62
+ - `kiwoomcli doctor`는 읽기 전용 진단 명령입니다. 어떤 인증 컨텍스트가
63
+ 선택됐는지(우선순위 `--profile`/`KIWOOM_PROFILE` > `--mode`/`KIWOOM_MODE` >
64
+ 현재 프로필), 프로필별 자격 증명/토큰 상태, 권장 조치를 보여줍니다.
65
+ - `--profile NAME`은 저장된 계정 별칭(OS 자격 증명 저장소의 App Key / Secret)을
66
+ 사용합니다. `--mode demo|real`은 저장된 별칭을 쓰지 않으며, mode 단독 실행에는
67
+ `APP_KEY` / `APP_SECRET` 환경변수가 필요합니다. 자격 증명이 없을 때는 진입
68
+ 방식에 맞는 해결책을 함께 안내합니다.
69
+
70
+ 자주 쓰는 인증 명령:
71
+
72
+ ```sh
73
+ kiwoomcli auth login [--alias NAME] [--mode demo|real]
74
+ kiwoomcli auth list
75
+ kiwoomcli auth switch <alias>
76
+ kiwoomcli auth status [--profile NAME | --mode demo|real]
77
+ kiwoomcli auth refresh [--profile NAME | --mode demo|real]
78
+ kiwoomcli auth clear [--profile NAME | --mode demo|real] [--all]
79
+ kiwoomcli auth remove <alias>
80
+ ```
81
+
82
+ - `auth clear`는 비밀 정보만 삭제합니다(기본은 토큰 캐시, `--all`을 주면 OS에
83
+ 저장된 App Key / Secret까지). 별칭 등록 자체는 유지됩니다.
84
+ - `auth remove <alias>`는 계정을 완전히 등록 해제합니다(프로필 항목, 토큰 캐시,
85
+ 저장된 자격 증명 모두).
86
+
87
+ ## 명령 그룹
88
+
89
+ 탐색 명령은 패키지에 포함된 로컬 스펙을 읽습니다(네트워크 불필요).
90
+
91
+ ```sh
92
+ kiwoomcli spec search <query> [--limit N]
93
+ kiwoomcli spec show <api-id> [--format pretty|json|yaml]
94
+ kiwoomcli spec groups [--format pretty|json|yaml]
95
+ kiwoomcli spec apis [--group <text>] [--limit N] [--format pretty|json|yaml]
96
+ ```
97
+
98
+ 국내 리소스 명령은 주제별 그룹으로 나뉩니다. 대표 예시는 아래와 같습니다(어떤
99
+ 명령이든 `-h`를 붙이면 전체 옵션 계약을 볼 수 있습니다).
100
+
101
+ | 그룹 | 예시 |
102
+ | --- | --- |
103
+ | `stocks` | `kiwoomcli domestic stocks info --code 005930` |
104
+ | `quotes` | `kiwoomcli domestic quotes price --code 005930` |
105
+ | `orderbooks` | `kiwoomcli domestic orderbooks list --code 005930` |
106
+ | `candles` | `kiwoomcli domestic candles daily --code 005930 --date 20260529` |
107
+ | `rankings` | `kiwoomcli domestic rankings amount --market all --include-managed no --exchange KRX` |
108
+ | `sectors` | `kiwoomcli domestic sectors price --market kospi --code 001` |
109
+ | `etfs` | `kiwoomcli domestic etfs info --code 069500` |
110
+ | `elws` | `kiwoomcli domestic elws daily --code 57JBHH` |
111
+ | `investors` | `kiwoomcli domestic investors by-stock --code 005930` |
112
+ | `short-selling` | `kiwoomcli domestic short-selling trend --code 005930 --from 20260101 --to 20260529` |
113
+ | `securities-lending` | `kiwoomcli domestic securities-lending by-stock --code 005930` |
114
+ | `themes` | `kiwoomcli domestic themes by-stock --code 005930 --exchange KRX` |
115
+ | `accounts` | `kiwoomcli domestic accounts holdings --basis total --exchange KRX` |
116
+ | `orders` | `kiwoomcli domestic orders list-open --stock-scope all --side all --exchange ALL` |
117
+ | `streams` | `kiwoomcli domestic streams trades --code 005930 --count 1` |
118
+
119
+ ## 출력 형식
120
+
121
+ 도메인 명령은 `--format`과 프로필/모드 선택자를 받습니다.
122
+
123
+ ```sh
124
+ --format pretty|json|jsonl|yaml
125
+ --profile NAME
126
+ --mode demo|real
127
+ ```
128
+
129
+ - `pretty`(기본값)는 사람이 읽기 좋은 들여쓰기 형식입니다.
130
+ - `json`은 에이전트가 파싱하기 좋은 한 줄 압축 출력입니다.
131
+ - `jsonl`은 한 줄에 JSON 레코드 하나씩 출력합니다(목록 행이나 스트림에 유용).
132
+ - `yaml`은 YAML 형식으로 출력합니다.
133
+
134
+ 안전장치가 적용된 계좌/주문 조회와 스트림에서는 출력 계층이 계좌 식별자를
135
+ 마스킹합니다. 다만 주문번호(`ord_no`, `orig_ord_no` 등)는 `orders modify`/`cancel`
136
+ 에 필요하므로 **마스킹하지 않습니다**. 마스킹은 `pretty`, `json`, `jsonl`, `yaml`
137
+ 전반에서 동일하게 적용됩니다.
138
+
139
+ ## 스트리밍 (WebSocket)
140
+
141
+ 스트림 명령은 포그라운드에서 실행되며 키움 서버 메시지를 출력합니다. 유한한
142
+ 실행을 원하면 `--count`/`--duration`을 사용하세요.
143
+
144
+ ```sh
145
+ kiwoomcli domestic streams trades --code 005930 --count 1 --named --format json
146
+ ```
147
+
148
+ - `--count`는 `REAL` 데이터 메시지만 셉니다. `REG`/`REMOVE`/`SYSTEM`은 제어
149
+ 메시지입니다.
150
+ - `--check`는 유한한 등록/수집을 수행하며, `REAL` 틱이 오지 않아도 정상 종료
151
+ 합니다.
152
+ - `--named`는 패키지에 포함된 키움 스펙 기반 내장 스키마로 `REAL` 프레임을
153
+ 변환합니다. 알 수 없는 FID는 `unknown` 아래에 보존됩니다.
154
+
155
+ 장시간 구독을 저장하려면 파일로 출력하고 OS 도구로 프로세스를 백그라운드로
156
+ 돌리세요(CLI는 자체 작업 관리자를 제공하지 않습니다).
157
+
158
+ ```sh
159
+ # 계속 수신하며 이벤트를 파일에 추가 기록
160
+ kiwoomcli domestic streams trades --codes 005930,000660 --watch --format jsonl --output trades.jsonl
161
+
162
+ # Linux/macOS: 터미널을 닫아도 계속 실행
163
+ nohup kiwoomcli domestic streams trades --codes 005930,000660 --watch --output trades.jsonl &
164
+
165
+ # Windows PowerShell: 분리된 프로세스로 실행
166
+ Start-Process kiwoomcli -ArgumentList 'domestic streams trades --codes 005930,000660 --watch --output trades.jsonl'
167
+ ```
168
+
169
+ 조건검색식의 생성과 수정은 키움 영웅문 HTS에서 합니다. CLI는 HTS에 이미 저장된
170
+ 조건식을 목록 조회, 선택, 조회, 구독, 해제만 합니다.
171
+
172
+ ## 주문 안전장치
173
+
174
+ 주문 쓰기 명령(`orders buy/sell/modify/cancel`, `credit-*`, `gold-*`)에는
175
+ 안전장치가 적용됩니다.
176
+
177
+ - `--confirm`이 없으면 짧은 미전송 주문 요약을 출력하고 주문 API를 호출하지
178
+ 않습니다.
179
+ - `--confirm`이 있으면 실제 엔드포인트로 전송합니다.
180
+ - 주문 유형별 가격 규칙은 전송 경로 이전에 검증됩니다. 예를 들어
181
+ `--order-type limit`에는 `--price`가 필요하고, `--order-type market`에는
182
+ `--price`를 넣으면 안 됩니다. 잘못된 주문 식별자는 전송 전에 보고됩니다.
183
+ - 주문 쓰기는 `--profile`/`--mode`로 인증 대상을 선택합니다. 먼저 데모(모의투자)
184
+ 서버에서 검증하세요.
185
+
186
+ ## 용어
187
+
188
+ 안정적인 사용자 대상 옵션 이름이 키움 원본 필드명을 숨깁니다. 구체적인 코드
189
+ 종류는 명령 맥락에 따라 결정됩니다.
190
+
191
+ | 개념 | 옵션 | 예시 |
192
+ | --- | --- | --- |
193
+ | 종목/주식/업종/ETF/ELW 코드 | `--code`, `-c` | `--code 005930` |
194
+ | 인증 프로필 | `--profile` | `--profile demo-main` |
195
+ | 실행 모드 | `--mode` | `--mode demo` |
196
+ | 시장/거래소 선택 | `--market` | `--market kospi` |
197
+ | 수량 | `--qty` | `--qty 10` |
198
+ | 가격 | `--price` | `--price 70000` |
199
+ | 매수/매도 구분 | `--side` | `--side buy` |
200
+ | 주문 유형 | `--order-type` | `--order-type limit` |
201
+ | 주문 식별자 | `--order-id` | `--order-id 123` |
202
+ | 시작 / 종료 일자 | `--from` / `--to` | `--from 20260101 --to 20260529` |
203
+ | 단일 기준 일자 | `--date` | `--date 20260529` |
204
+ | 분 단위 간격 | `--interval` | `--interval 1` |
205
+ | 결과 개수 | `--limit` | `--limit 200` |
206
+ | 출력 형식 | `--format` | `--format json` |
207
+ | 쓰기 확인 | `--confirm` | `--confirm` |
208
+
209
+ ## 안전 유의사항
210
+
211
+ - 개발과 검증 단계에서는 `demo` 모드를 우선 사용하세요.
212
+ - 자격 증명, 토큰, 계좌번호, 정제되지 않은 실제 호출 출력은 절대 로그로 남기거나
213
+ 커밋하지 마세요.
214
+ - 자격 증명·네트워크·계좌 안전 제약으로 실제 호출이 막히면, CLI는 결과를
215
+ 지어내지 않고 차단됨/미실행으로 보고합니다.
kwcli-0.1.0/README.md ADDED
@@ -0,0 +1,202 @@
1
+ # Kiwoom CLI
2
+
3
+ `kiwoomcli`는 키움증권 OpenAPI를 위한 커맨드라인 클라이언트입니다. 터미널에서
4
+ 키움 OpenAPI 데이터를 조회하고, 인증 상태를 관리하며, 안전장치가 적용된 주문
5
+ 작업을 수행해야 하는 사람과 AI 에이전트를 위한 **탐색(discovery) 중심**의 운영
6
+ 도구입니다.
7
+
8
+ 설치 후 사용하는 콘솔 명령은 `kiwoomcli` 입니다.
9
+
10
+ ## 설치
11
+
12
+ ```sh
13
+ uv tool install kiwoomcli
14
+ # 또는
15
+ pipx install kiwoomcli
16
+ # 또는
17
+ pip install kiwoomcli
18
+ ```
19
+
20
+ 설치한 뒤 계정과 자격 증명을 초기화합니다.
21
+
22
+ ```sh
23
+ kiwoomcli setup
24
+ ```
25
+
26
+ ## 빠른 시작
27
+
28
+ 일상적인 흐름은 **먼저 탐색하고, 그다음 명령 하나를 실행**하는 것입니다. 어떤
29
+ 명령이든 `-h`를 붙이면 실시간으로 매핑된 계약 정보(요약 / 동작 / 예시 / OpenAPI
30
+ 매핑)를 볼 수 있습니다.
31
+
32
+ ```sh
33
+ kiwoomcli setup # 온보딩: 별칭, demo/real, 키, 검증
34
+ kiwoomcli spec search "체결" # 필요한 API/명령 찾기
35
+ kiwoomcli domestic stocks info --code 005930 -h # 매핑된 계약 확인
36
+ kiwoomcli domestic stocks info --code 005930 --format json
37
+ kiwoomcli domestic orders buy --code 005930 --qty 1 --price 70000 --order-type limit --confirm
38
+ ```
39
+
40
+ 전체 명령 목록을 외우기보다는, 평소에는 `spec search`와 `-h`를 활용하세요.
41
+
42
+ ## 인증과 프로필
43
+
44
+ - `kiwoomcli setup`은 온보딩 초기화 명령입니다. 환경 사전 점검(OS 자격 증명
45
+ 저장소 사용 가능 여부와 PATH 모호성 경고)을 수행하고, 계정 별칭을 만들며,
46
+ `demo`/`real`을 선택하고, App Key / Secret을 저장한 뒤, 안전한 읽기 전용
47
+ 호출로 검증하고, 현재 프로필을 지정한 다음 준비 상태 요약을 출력합니다.
48
+ 비대화형 셸에서는 멈추지 않고 안내 메시지와 함께 실패합니다(`--mode` 전달).
49
+ - `kiwoomcli doctor`는 읽기 전용 진단 명령입니다. 어떤 인증 컨텍스트가
50
+ 선택됐는지(우선순위 `--profile`/`KIWOOM_PROFILE` > `--mode`/`KIWOOM_MODE` >
51
+ 현재 프로필), 프로필별 자격 증명/토큰 상태, 권장 조치를 보여줍니다.
52
+ - `--profile NAME`은 저장된 계정 별칭(OS 자격 증명 저장소의 App Key / Secret)을
53
+ 사용합니다. `--mode demo|real`은 저장된 별칭을 쓰지 않으며, mode 단독 실행에는
54
+ `APP_KEY` / `APP_SECRET` 환경변수가 필요합니다. 자격 증명이 없을 때는 진입
55
+ 방식에 맞는 해결책을 함께 안내합니다.
56
+
57
+ 자주 쓰는 인증 명령:
58
+
59
+ ```sh
60
+ kiwoomcli auth login [--alias NAME] [--mode demo|real]
61
+ kiwoomcli auth list
62
+ kiwoomcli auth switch <alias>
63
+ kiwoomcli auth status [--profile NAME | --mode demo|real]
64
+ kiwoomcli auth refresh [--profile NAME | --mode demo|real]
65
+ kiwoomcli auth clear [--profile NAME | --mode demo|real] [--all]
66
+ kiwoomcli auth remove <alias>
67
+ ```
68
+
69
+ - `auth clear`는 비밀 정보만 삭제합니다(기본은 토큰 캐시, `--all`을 주면 OS에
70
+ 저장된 App Key / Secret까지). 별칭 등록 자체는 유지됩니다.
71
+ - `auth remove <alias>`는 계정을 완전히 등록 해제합니다(프로필 항목, 토큰 캐시,
72
+ 저장된 자격 증명 모두).
73
+
74
+ ## 명령 그룹
75
+
76
+ 탐색 명령은 패키지에 포함된 로컬 스펙을 읽습니다(네트워크 불필요).
77
+
78
+ ```sh
79
+ kiwoomcli spec search <query> [--limit N]
80
+ kiwoomcli spec show <api-id> [--format pretty|json|yaml]
81
+ kiwoomcli spec groups [--format pretty|json|yaml]
82
+ kiwoomcli spec apis [--group <text>] [--limit N] [--format pretty|json|yaml]
83
+ ```
84
+
85
+ 국내 리소스 명령은 주제별 그룹으로 나뉩니다. 대표 예시는 아래와 같습니다(어떤
86
+ 명령이든 `-h`를 붙이면 전체 옵션 계약을 볼 수 있습니다).
87
+
88
+ | 그룹 | 예시 |
89
+ | --- | --- |
90
+ | `stocks` | `kiwoomcli domestic stocks info --code 005930` |
91
+ | `quotes` | `kiwoomcli domestic quotes price --code 005930` |
92
+ | `orderbooks` | `kiwoomcli domestic orderbooks list --code 005930` |
93
+ | `candles` | `kiwoomcli domestic candles daily --code 005930 --date 20260529` |
94
+ | `rankings` | `kiwoomcli domestic rankings amount --market all --include-managed no --exchange KRX` |
95
+ | `sectors` | `kiwoomcli domestic sectors price --market kospi --code 001` |
96
+ | `etfs` | `kiwoomcli domestic etfs info --code 069500` |
97
+ | `elws` | `kiwoomcli domestic elws daily --code 57JBHH` |
98
+ | `investors` | `kiwoomcli domestic investors by-stock --code 005930` |
99
+ | `short-selling` | `kiwoomcli domestic short-selling trend --code 005930 --from 20260101 --to 20260529` |
100
+ | `securities-lending` | `kiwoomcli domestic securities-lending by-stock --code 005930` |
101
+ | `themes` | `kiwoomcli domestic themes by-stock --code 005930 --exchange KRX` |
102
+ | `accounts` | `kiwoomcli domestic accounts holdings --basis total --exchange KRX` |
103
+ | `orders` | `kiwoomcli domestic orders list-open --stock-scope all --side all --exchange ALL` |
104
+ | `streams` | `kiwoomcli domestic streams trades --code 005930 --count 1` |
105
+
106
+ ## 출력 형식
107
+
108
+ 도메인 명령은 `--format`과 프로필/모드 선택자를 받습니다.
109
+
110
+ ```sh
111
+ --format pretty|json|jsonl|yaml
112
+ --profile NAME
113
+ --mode demo|real
114
+ ```
115
+
116
+ - `pretty`(기본값)는 사람이 읽기 좋은 들여쓰기 형식입니다.
117
+ - `json`은 에이전트가 파싱하기 좋은 한 줄 압축 출력입니다.
118
+ - `jsonl`은 한 줄에 JSON 레코드 하나씩 출력합니다(목록 행이나 스트림에 유용).
119
+ - `yaml`은 YAML 형식으로 출력합니다.
120
+
121
+ 안전장치가 적용된 계좌/주문 조회와 스트림에서는 출력 계층이 계좌 식별자를
122
+ 마스킹합니다. 다만 주문번호(`ord_no`, `orig_ord_no` 등)는 `orders modify`/`cancel`
123
+ 에 필요하므로 **마스킹하지 않습니다**. 마스킹은 `pretty`, `json`, `jsonl`, `yaml`
124
+ 전반에서 동일하게 적용됩니다.
125
+
126
+ ## 스트리밍 (WebSocket)
127
+
128
+ 스트림 명령은 포그라운드에서 실행되며 키움 서버 메시지를 출력합니다. 유한한
129
+ 실행을 원하면 `--count`/`--duration`을 사용하세요.
130
+
131
+ ```sh
132
+ kiwoomcli domestic streams trades --code 005930 --count 1 --named --format json
133
+ ```
134
+
135
+ - `--count`는 `REAL` 데이터 메시지만 셉니다. `REG`/`REMOVE`/`SYSTEM`은 제어
136
+ 메시지입니다.
137
+ - `--check`는 유한한 등록/수집을 수행하며, `REAL` 틱이 오지 않아도 정상 종료
138
+ 합니다.
139
+ - `--named`는 패키지에 포함된 키움 스펙 기반 내장 스키마로 `REAL` 프레임을
140
+ 변환합니다. 알 수 없는 FID는 `unknown` 아래에 보존됩니다.
141
+
142
+ 장시간 구독을 저장하려면 파일로 출력하고 OS 도구로 프로세스를 백그라운드로
143
+ 돌리세요(CLI는 자체 작업 관리자를 제공하지 않습니다).
144
+
145
+ ```sh
146
+ # 계속 수신하며 이벤트를 파일에 추가 기록
147
+ kiwoomcli domestic streams trades --codes 005930,000660 --watch --format jsonl --output trades.jsonl
148
+
149
+ # Linux/macOS: 터미널을 닫아도 계속 실행
150
+ nohup kiwoomcli domestic streams trades --codes 005930,000660 --watch --output trades.jsonl &
151
+
152
+ # Windows PowerShell: 분리된 프로세스로 실행
153
+ Start-Process kiwoomcli -ArgumentList 'domestic streams trades --codes 005930,000660 --watch --output trades.jsonl'
154
+ ```
155
+
156
+ 조건검색식의 생성과 수정은 키움 영웅문 HTS에서 합니다. CLI는 HTS에 이미 저장된
157
+ 조건식을 목록 조회, 선택, 조회, 구독, 해제만 합니다.
158
+
159
+ ## 주문 안전장치
160
+
161
+ 주문 쓰기 명령(`orders buy/sell/modify/cancel`, `credit-*`, `gold-*`)에는
162
+ 안전장치가 적용됩니다.
163
+
164
+ - `--confirm`이 없으면 짧은 미전송 주문 요약을 출력하고 주문 API를 호출하지
165
+ 않습니다.
166
+ - `--confirm`이 있으면 실제 엔드포인트로 전송합니다.
167
+ - 주문 유형별 가격 규칙은 전송 경로 이전에 검증됩니다. 예를 들어
168
+ `--order-type limit`에는 `--price`가 필요하고, `--order-type market`에는
169
+ `--price`를 넣으면 안 됩니다. 잘못된 주문 식별자는 전송 전에 보고됩니다.
170
+ - 주문 쓰기는 `--profile`/`--mode`로 인증 대상을 선택합니다. 먼저 데모(모의투자)
171
+ 서버에서 검증하세요.
172
+
173
+ ## 용어
174
+
175
+ 안정적인 사용자 대상 옵션 이름이 키움 원본 필드명을 숨깁니다. 구체적인 코드
176
+ 종류는 명령 맥락에 따라 결정됩니다.
177
+
178
+ | 개념 | 옵션 | 예시 |
179
+ | --- | --- | --- |
180
+ | 종목/주식/업종/ETF/ELW 코드 | `--code`, `-c` | `--code 005930` |
181
+ | 인증 프로필 | `--profile` | `--profile demo-main` |
182
+ | 실행 모드 | `--mode` | `--mode demo` |
183
+ | 시장/거래소 선택 | `--market` | `--market kospi` |
184
+ | 수량 | `--qty` | `--qty 10` |
185
+ | 가격 | `--price` | `--price 70000` |
186
+ | 매수/매도 구분 | `--side` | `--side buy` |
187
+ | 주문 유형 | `--order-type` | `--order-type limit` |
188
+ | 주문 식별자 | `--order-id` | `--order-id 123` |
189
+ | 시작 / 종료 일자 | `--from` / `--to` | `--from 20260101 --to 20260529` |
190
+ | 단일 기준 일자 | `--date` | `--date 20260529` |
191
+ | 분 단위 간격 | `--interval` | `--interval 1` |
192
+ | 결과 개수 | `--limit` | `--limit 200` |
193
+ | 출력 형식 | `--format` | `--format json` |
194
+ | 쓰기 확인 | `--confirm` | `--confirm` |
195
+
196
+ ## 안전 유의사항
197
+
198
+ - 개발과 검증 단계에서는 `demo` 모드를 우선 사용하세요.
199
+ - 자격 증명, 토큰, 계좌번호, 정제되지 않은 실제 호출 출력은 절대 로그로 남기거나
200
+ 커밋하지 마세요.
201
+ - 자격 증명·네트워크·계좌 안전 제약으로 실제 호출이 막히면, CLI는 결과를
202
+ 지어내지 않고 차단됨/미실행으로 보고합니다.
@@ -0,0 +1,47 @@
1
+ from kiwoom.core.auth import KiwoomAuth
2
+ from kiwoom.core.client import KiwoomClient
3
+ from kiwoom.core.errors import KiwoomError
4
+ from kiwoom.core.profiles import (
5
+ AuthProfile,
6
+ get_current_profile,
7
+ get_profile,
8
+ load_profiles,
9
+ set_current_profile,
10
+ )
11
+ from kiwoom.core.runtime import (
12
+ SelectionContext,
13
+ describe_selection,
14
+ get_auth,
15
+ get_base_url,
16
+ get_client,
17
+ get_ws_base_url,
18
+ get_ws_client,
19
+ resolve_mode,
20
+ )
21
+ from kiwoom.specs import search_api_specs
22
+ from kiwoom.core.types import Continuation, KiwoomResponse, Mode
23
+ from kiwoom.core.ws_client import KiwoomWebSocketClient
24
+
25
+ __all__ = [
26
+ "AuthProfile",
27
+ "Continuation",
28
+ "KiwoomAuth",
29
+ "KiwoomClient",
30
+ "KiwoomError",
31
+ "KiwoomWebSocketClient",
32
+ "KiwoomResponse",
33
+ "Mode",
34
+ "SelectionContext",
35
+ "describe_selection",
36
+ "get_auth",
37
+ "get_base_url",
38
+ "get_client",
39
+ "get_current_profile",
40
+ "get_profile",
41
+ "get_ws_base_url",
42
+ "get_ws_client",
43
+ "load_profiles",
44
+ "resolve_mode",
45
+ "search_api_specs",
46
+ "set_current_profile",
47
+ ]