ksxt 1.0.4__py3-none-any.whl → 1.0.5__py3-none-any.whl
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.
- ksxt/__pycache__/__init__.cpython-312.pyc +0 -0
- ksxt/__pycache__/bithumb.cpython-312.pyc +0 -0
- ksxt/__pycache__/koreainvest.cpython-312.pyc +0 -0
- ksxt/__pycache__/upbit.cpython-312.pyc +0 -0
- ksxt/api/__pycache__/__init__.cpython-312.pyc +0 -0
- ksxt/api/__pycache__/bithumb.cpython-312.pyc +0 -0
- ksxt/api/__pycache__/koreainvest.cpython-312.pyc +0 -0
- ksxt/api/__pycache__/upbit.cpython-312.pyc +0 -0
- ksxt/api/auto/__pycache__/bithumb.cpython-312.pyc +0 -0
- ksxt/api/auto/__pycache__/koreainvest.cpython-312.pyc +0 -0
- ksxt/api/auto/__pycache__/upbit.cpython-312.pyc +0 -0
- ksxt/async_/__pycache__/__init__.cpython-312.pyc +0 -0
- ksxt/async_/__pycache__/bithumb.cpython-312.pyc +0 -0
- ksxt/async_/__pycache__/koreainvest.cpython-312.pyc +0 -0
- ksxt/async_/__pycache__/upbit.cpython-312.pyc +0 -0
- ksxt/async_/base/__pycache__/__init__.cpython-312.pyc +0 -0
- ksxt/async_/base/__pycache__/async_exchange.cpython-312.pyc +0 -0
- ksxt/async_/base/__pycache__/throttler.cpython-312.pyc +0 -0
- ksxt/async_/base/async_exchange.py +17 -17
- ksxt/async_/bithumb.py +37 -19
- ksxt/async_/koreainvest.py +74 -6
- ksxt/async_/upbit.py +52 -20
- ksxt/base/__pycache__/__init__.cpython-312.pyc +0 -0
- ksxt/base/__pycache__/errors.cpython-312.pyc +0 -0
- ksxt/base/__pycache__/exchange.cpython-312.pyc +0 -0
- ksxt/base/__pycache__/rate_limiter.cpython-312.pyc +0 -0
- ksxt/base/__pycache__/rest_exchange.cpython-312.pyc +0 -0
- ksxt/base/__pycache__/types.cpython-312.pyc +0 -0
- ksxt/base/exchange.py +31 -23
- ksxt/base/rest_exchange.py +26 -28
- ksxt/bithumb.py +29 -12
- ksxt/config/__pycache__/__init__.cpython-312.pyc +0 -0
- ksxt/config/token.toml +6 -6
- ksxt/koreainvest.py +24 -6
- ksxt/market/__pycache__/base.cpython-312.pyc +0 -0
- ksxt/market/__pycache__/db.cpython-312.pyc +0 -0
- ksxt/market/__pycache__/logging.cpython-312.pyc +0 -0
- ksxt/market/__pycache__/manager.cpython-312.pyc +0 -0
- ksxt/market/__pycache__/markets.cpython-312.pyc +0 -0
- ksxt/market/krx/__pycache__/kosdaq.cpython-312.pyc +0 -0
- ksxt/market/krx/__pycache__/kospi.cpython-312.pyc +0 -0
- ksxt/market/krx/__pycache__/stock.cpython-312.pyc +0 -0
- ksxt/market/us/__pycache__/amex.cpython-312.pyc +0 -0
- ksxt/market/us/__pycache__/nasdaq.cpython-312.pyc +0 -0
- ksxt/market/us/__pycache__/nyse.cpython-312.pyc +0 -0
- ksxt/market/us/__pycache__/stock.cpython-312.pyc +0 -0
- ksxt/models/__pycache__/__init__.cpython-312.pyc +0 -0
- ksxt/models/__pycache__/balance.cpython-312.pyc +0 -0
- ksxt/models/__pycache__/cash.cpython-312.pyc +0 -0
- ksxt/models/__pycache__/common.cpython-312.pyc +0 -0
- ksxt/models/__pycache__/error.cpython-312.pyc +0 -0
- ksxt/models/__pycache__/historical.cpython-312.pyc +0 -0
- ksxt/models/__pycache__/market.cpython-312.pyc +0 -0
- ksxt/models/__pycache__/order.cpython-312.pyc +0 -0
- ksxt/models/__pycache__/orderbook.cpython-312.pyc +0 -0
- ksxt/models/__pycache__/ticker.cpython-312.pyc +0 -0
- ksxt/models/__pycache__/token.cpython-312.pyc +0 -0
- ksxt/models/__pycache__/transaction.cpython-312.pyc +0 -0
- ksxt/models/transaction.py +2 -0
- ksxt/parser/__pycache__/bithumb.cpython-312.pyc +0 -0
- ksxt/parser/__pycache__/koreainvest.cpython-312.pyc +0 -0
- ksxt/parser/__pycache__/parser.cpython-312.pyc +0 -0
- ksxt/parser/__pycache__/upbit.cpython-312.pyc +0 -0
- ksxt/parser/bithumb.py +83 -6
- ksxt/parser/koreainvest.py +56 -8
- ksxt/parser/parser.py +21 -5
- ksxt/parser/upbit.py +87 -10
- ksxt/upbit.py +42 -16
- ksxt/utils/__pycache__/safer.cpython-312.pyc +0 -0
- ksxt/utils/__pycache__/sorter.cpython-312.pyc +0 -0
- ksxt/utils/__pycache__/timer.cpython-312.pyc +0 -0
- {ksxt-1.0.4.dist-info → ksxt-1.0.5.dist-info}/METADATA +1 -1
- ksxt-1.0.5.dist-info/RECORD +123 -0
- {ksxt-1.0.4.dist-info → ksxt-1.0.5.dist-info}/WHEEL +1 -1
- ksxt-1.0.4.dist-info/RECORD +0 -120
- {ksxt-1.0.4.dist-info → ksxt-1.0.5.dist-info}/LICENSE.txt +0 -0
- {ksxt-1.0.4.dist-info → ksxt-1.0.5.dist-info}/top_level.txt +0 -0
ksxt/base/exchange.py
CHANGED
@@ -3,7 +3,7 @@ import json
|
|
3
3
|
from datetime import datetime
|
4
4
|
import time
|
5
5
|
import pytz
|
6
|
-
from typing import Dict
|
6
|
+
from typing import Dict
|
7
7
|
import ast
|
8
8
|
|
9
9
|
from requests import Session
|
@@ -85,8 +85,8 @@ class Exchange:
|
|
85
85
|
self,
|
86
86
|
symbol: str,
|
87
87
|
time_frame: str,
|
88
|
-
start:
|
89
|
-
end:
|
88
|
+
start: datetime | None = None,
|
89
|
+
end: datetime | None = None,
|
90
90
|
base_market: str = "KRW",
|
91
91
|
):
|
92
92
|
"""
|
@@ -95,8 +95,8 @@ class Exchange:
|
|
95
95
|
Args:
|
96
96
|
symbol (str): 종목코드
|
97
97
|
time_frame (str): 봉조회기준
|
98
|
-
start (
|
99
|
-
end (
|
98
|
+
start (datetime | None, optional): 조회 시작일. Defaults to None.
|
99
|
+
end (datetime | None, optional): 조회 종료일. Defaults to None.
|
100
100
|
base_market (str, optional): Market 구분 코드. Defaults to 'KRW'.
|
101
101
|
"""
|
102
102
|
pass
|
@@ -139,14 +139,14 @@ class Exchange:
|
|
139
139
|
"""
|
140
140
|
pass
|
141
141
|
|
142
|
-
def fetch_balance(self, acc_num: str, base_market: str = "KRW", excluded_symbols:
|
142
|
+
def fetch_balance(self, acc_num: str, base_market: str = "KRW", excluded_symbols: list[str] | None = None):
|
143
143
|
"""
|
144
144
|
보유 자산 조회
|
145
145
|
|
146
146
|
Args:
|
147
147
|
acc_num (str): 계좌 번호
|
148
148
|
base_market (str, optional): Market 구분 코드. Defaults to 'KRW'.
|
149
|
-
excluded_symbols (
|
149
|
+
excluded_symbols (list[str] | None, optional): 제외할 종목 리스트. Defaults to None.
|
150
150
|
"""
|
151
151
|
pass
|
152
152
|
|
@@ -179,22 +179,30 @@ class Exchange:
|
|
179
179
|
"""
|
180
180
|
pass
|
181
181
|
|
182
|
-
def fetch_deposit_history(
|
182
|
+
def fetch_deposit_history(
|
183
|
+
self, acc_num: str, start: datetime | None = None, end: datetime | None = None, base_market: str = "KRW"
|
184
|
+
):
|
183
185
|
"""
|
184
186
|
입금 내역 조회
|
185
187
|
|
186
188
|
Args:
|
187
189
|
acc_num (str): 계좌 번호
|
190
|
+
start (datetime | None, optional): 조회 시작일. Defaults to None.
|
191
|
+
end (datetime | None, optional): 조회 종료일. Defaults to None.
|
188
192
|
base_market (str, optional): Market 구분 코드. Defaults to 'KRW'.
|
189
193
|
"""
|
190
194
|
pass
|
191
195
|
|
192
|
-
def fetch_withdrawal_history(
|
196
|
+
def fetch_withdrawal_history(
|
197
|
+
self, acc_num: str, start: datetime | None = None, end: datetime | None = None, base_market: str = "KRW"
|
198
|
+
):
|
193
199
|
"""
|
194
200
|
출금 내역 조회
|
195
201
|
|
196
202
|
Args:
|
197
203
|
acc_num (str): 계좌 번호
|
204
|
+
start (datetime | None, optional): 조회 시작일. Defaults to None.
|
205
|
+
end (datetime | None, optional): 조회 종료일. Defaults to None.
|
198
206
|
base_market (str, optional): Market 구분 코드. Defaults to 'KRW'.
|
199
207
|
"""
|
200
208
|
pass
|
@@ -229,7 +237,7 @@ class Exchange:
|
|
229
237
|
pass
|
230
238
|
|
231
239
|
def cancel_order(
|
232
|
-
self, acc_num: str, order_id: str, symbol:
|
240
|
+
self, acc_num: str, order_id: str, symbol: str | None = "", qty: float = 0, *args, base_market: str = "KRW"
|
233
241
|
):
|
234
242
|
"""
|
235
243
|
미체결 주문 취소
|
@@ -237,7 +245,7 @@ class Exchange:
|
|
237
245
|
Args:
|
238
246
|
acc_num (str): 계좌정보(계좌번호, 지갑정보)
|
239
247
|
order_id (str): 주문 정보(주문 id)
|
240
|
-
symbol (str, optional): 종목정보(종목코드). Defaults to ''.
|
248
|
+
symbol (str | None, optional): 종목정보(종목코드). Defaults to ''.
|
241
249
|
qty (float, optional): 수량. Defaults to 0..
|
242
250
|
base_market (str, optional): Market 구분 코드. Defaults to 'KRW'.
|
243
251
|
"""
|
@@ -246,9 +254,9 @@ class Exchange:
|
|
246
254
|
def fetch_open_order(
|
247
255
|
self,
|
248
256
|
acc_num: str,
|
249
|
-
symbol:
|
250
|
-
start:
|
251
|
-
end:
|
257
|
+
symbol: str | None = "",
|
258
|
+
start: datetime | None = None,
|
259
|
+
end: datetime | None = None,
|
252
260
|
base_market: str = "KRW",
|
253
261
|
):
|
254
262
|
"""
|
@@ -256,9 +264,9 @@ class Exchange:
|
|
256
264
|
|
257
265
|
Args:
|
258
266
|
acc_num (str): 계좌정보(계좌번호, 지갑정보)
|
259
|
-
symbol (str, optional): 종목정보(종목코드) Defaults to ''.
|
260
|
-
start (
|
261
|
-
end (
|
267
|
+
symbol (str | None, optional): 종목정보(종목코드) Defaults to ''.
|
268
|
+
start (datetime | None, optional): 조회 시작일자. Defaults to None.
|
269
|
+
end (datetime | None, optional): 조회 종료일자. Defaults to None.
|
262
270
|
base_market (str, optional): Market 구분 코드. Defaults to 'KRW'.
|
263
271
|
"""
|
264
272
|
pass
|
@@ -266,9 +274,9 @@ class Exchange:
|
|
266
274
|
def fetch_closed_order(
|
267
275
|
self,
|
268
276
|
acc_num: str,
|
269
|
-
symbol:
|
270
|
-
start:
|
271
|
-
end:
|
277
|
+
symbol: str | None = "",
|
278
|
+
start: datetime | None = None,
|
279
|
+
end: datetime | None = None,
|
272
280
|
base_market: str = "KRW",
|
273
281
|
):
|
274
282
|
"""
|
@@ -276,9 +284,9 @@ class Exchange:
|
|
276
284
|
|
277
285
|
Args:
|
278
286
|
acc_num (str): 계좌정보(계좌번호, 지갑정보)
|
279
|
-
symbol (str, optional): 종목정보(종목코드) Defaults to ''.
|
280
|
-
start (
|
281
|
-
end (
|
287
|
+
symbol (str | None, optional): 종목정보(종목코드) Defaults to ''.
|
288
|
+
start (datetime | None, optional): 조회 시작일자. Defaults to None.
|
289
|
+
end (datetime | None, optional): 조회 종료일자. Defaults to None.
|
282
290
|
base_market (str, optional): Market 구분 코드. Defaults to 'KRW'.
|
283
291
|
"""
|
284
292
|
pass
|
ksxt/base/rest_exchange.py
CHANGED
@@ -5,7 +5,7 @@ import toml
|
|
5
5
|
import os
|
6
6
|
from pathlib import Path
|
7
7
|
|
8
|
-
from typing import Any, Dict, List, Literal
|
8
|
+
from typing import Any, Dict, List, Literal
|
9
9
|
|
10
10
|
from datetime import datetime, UTC
|
11
11
|
import pytz
|
@@ -232,16 +232,14 @@ class RestExchange(Exchange):
|
|
232
232
|
security_type,
|
233
233
|
method_type,
|
234
234
|
api_type: Any = "public",
|
235
|
-
headers:
|
236
|
-
body:
|
237
|
-
params:
|
235
|
+
headers: Any | None = None,
|
236
|
+
body: Any | None = None,
|
237
|
+
params: Any | None = None,
|
238
238
|
config={},
|
239
239
|
):
|
240
240
|
pass
|
241
241
|
|
242
|
-
def fetch2(
|
243
|
-
self, path, security_type, params={}, headers: Optional[Any] = None, body: Optional[Any] = None, config={}
|
244
|
-
):
|
242
|
+
def fetch2(self, path, security_type, params={}, headers: Any | None = None, body: Any | None = None, config={}):
|
245
243
|
is_activate = self.is_activate(path=path, security_type=security_type)
|
246
244
|
if not is_activate:
|
247
245
|
return {
|
@@ -266,9 +264,7 @@ class RestExchange(Exchange):
|
|
266
264
|
request = self.sign(path, security_type, method_type, api_type, headers, body, params, config)
|
267
265
|
return self.fetch(request["url"], request["method"], request["headers"], request["body"], request["params"])
|
268
266
|
|
269
|
-
def request(
|
270
|
-
self, path, security_type, params={}, headers: Optional[Any] = None, body: Optional[Any] = None, config={}
|
271
|
-
):
|
267
|
+
def request(self, path, security_type, params={}, headers: Any | None = None, body: Any | None = None, config={}):
|
272
268
|
return self.fetch2(path, security_type, params, headers, body, config)
|
273
269
|
|
274
270
|
# region base method
|
@@ -296,8 +292,8 @@ class RestExchange(Exchange):
|
|
296
292
|
self,
|
297
293
|
symbol: str,
|
298
294
|
time_frame: str,
|
299
|
-
start:
|
300
|
-
end:
|
295
|
+
start: datetime | None = None,
|
296
|
+
end: datetime | None = None,
|
301
297
|
base_market: str = "KRW",
|
302
298
|
) -> ksxt.models.KsxtHistoricalDataResponse:
|
303
299
|
raise NotSupportedError(f"{self.id} {self.fetch_historical_data_index.__qualname__}() is not supported yet.")
|
@@ -307,8 +303,8 @@ class RestExchange(Exchange):
|
|
307
303
|
self,
|
308
304
|
symbol: str,
|
309
305
|
time_frame: str,
|
310
|
-
start:
|
311
|
-
end:
|
306
|
+
start: datetime | None = None,
|
307
|
+
end: datetime | None = None,
|
312
308
|
base_market: str = "KRW",
|
313
309
|
) -> ksxt.models.KsxtHistoricalDataResponse:
|
314
310
|
raise NotSupportedError(f"{self.id} {self.fetch_historical_data.__qualname__}() is not supported yet.")
|
@@ -323,7 +319,7 @@ class RestExchange(Exchange):
|
|
323
319
|
|
324
320
|
@check_token
|
325
321
|
def fetch_balance(
|
326
|
-
self, acc_num: str, base_market: str = "KRW", excluded_symbols:
|
322
|
+
self, acc_num: str, base_market: str = "KRW", excluded_symbols: list[str] | None = None
|
327
323
|
) -> ksxt.models.KsxtBalanceResponse:
|
328
324
|
raise NotSupportedError(f"{self.id} {self.fetch_balance.__qualname__}() is not supported yet.")
|
329
325
|
|
@@ -344,12 +340,14 @@ class RestExchange(Exchange):
|
|
344
340
|
raise NotSupportedError(f"{self.id} {self.fetch_screener.__qualname__}() is not supported yet.")
|
345
341
|
|
346
342
|
@check_token
|
347
|
-
def fetch_deposit_history(
|
343
|
+
def fetch_deposit_history(
|
344
|
+
self, acc_num: str, start: datetime | None = None, end: datetime | None = None, base_market: str = "KRW"
|
345
|
+
) -> ksxt.models.KsxtDepositHistoryResponse:
|
348
346
|
raise NotSupportedError(f"{self.id} {self.fetch_deposit_history.__qualname__}() is not supported yet.")
|
349
347
|
|
350
348
|
@check_token
|
351
349
|
def fetch_withdrawal_history(
|
352
|
-
self, acc_num: str, base_market: str = "KRW"
|
350
|
+
self, acc_num: str, start: datetime | None = None, end: datetime | None = None, base_market: str = "KRW"
|
353
351
|
) -> ksxt.models.KsxtWithdrawalHistoryResponse:
|
354
352
|
raise NotSupportedError(f"{self.id} {self.fetch_withdrawal_history.__qualname__}() is not supported yet.")
|
355
353
|
|
@@ -360,16 +358,16 @@ class RestExchange(Exchange):
|
|
360
358
|
symbol: str,
|
361
359
|
ticket_type: Literal["EntryLong", "EntryShort", "ExitLong", "ExitShort"],
|
362
360
|
otype: Literal["limit", "market"],
|
363
|
-
price:
|
364
|
-
qty:
|
365
|
-
amount:
|
361
|
+
price: float | None = 0,
|
362
|
+
qty: float | None = 0,
|
363
|
+
amount: float | None = 0,
|
366
364
|
base_market: str = "KRW",
|
367
365
|
) -> ksxt.models.KsxtCreateOrderResponse:
|
368
366
|
raise NotSupportedError(f"{self.id} {self.create_order.__qualname__}() is not supported yet.")
|
369
367
|
|
370
368
|
@check_token
|
371
369
|
def cancel_order(
|
372
|
-
self, acc_num: str, order_id: str, symbol:
|
370
|
+
self, acc_num: str, order_id: str, symbol: str | None = "", qty: float = 0, *args, base_market: str = "KRW"
|
373
371
|
) -> ksxt.models.KsxtCancelOrderResponse:
|
374
372
|
raise NotSupportedError(f"{self.id} {self.cancel_order.__qualname__}() is not supported yet.")
|
375
373
|
|
@@ -381,7 +379,7 @@ class RestExchange(Exchange):
|
|
381
379
|
price: float,
|
382
380
|
qty: float,
|
383
381
|
*args,
|
384
|
-
symbol:
|
382
|
+
symbol: str | None = "",
|
385
383
|
base_market: str = "KRW",
|
386
384
|
) -> ksxt.models.KsxtModifyOrderResponse:
|
387
385
|
raise NotSupportedError(f"{self.id} {self.modify_order.__qualname__}() is not supported yet.")
|
@@ -390,9 +388,9 @@ class RestExchange(Exchange):
|
|
390
388
|
def fetch_open_order(
|
391
389
|
self,
|
392
390
|
acc_num: str,
|
393
|
-
symbol:
|
394
|
-
start:
|
395
|
-
end:
|
391
|
+
symbol: str | None = "",
|
392
|
+
start: datetime | None = None,
|
393
|
+
end: datetime | None = None,
|
396
394
|
base_market: str = "KRW",
|
397
395
|
) -> ksxt.models.KsxtOpenOrderResponse:
|
398
396
|
raise NotSupportedError(f"{self.id} {self.fetch_open_order.__qualname__}() is not supported yet.")
|
@@ -401,9 +399,9 @@ class RestExchange(Exchange):
|
|
401
399
|
def fetch_closed_order(
|
402
400
|
self,
|
403
401
|
acc_num: str,
|
404
|
-
symbol:
|
405
|
-
start:
|
406
|
-
end:
|
402
|
+
symbol: str | None = "",
|
403
|
+
start: datetime | None = None,
|
404
|
+
end: datetime | None = None,
|
407
405
|
base_market: str = "KRW",
|
408
406
|
) -> ksxt.models.KsxtClosedOrderResponse:
|
409
407
|
raise NotSupportedError(f"{self.id} {self.fetch_closed_order.__qualname__}() is not supported yet.")
|
ksxt/bithumb.py
CHANGED
@@ -3,7 +3,7 @@ import hashlib
|
|
3
3
|
import hmac
|
4
4
|
import json
|
5
5
|
import time
|
6
|
-
from datetime import datetime
|
6
|
+
from datetime import datetime, timezone
|
7
7
|
from typing import Any, Dict, List, Literal, Optional
|
8
8
|
from urllib.parse import urlencode
|
9
9
|
import uuid
|
@@ -119,6 +119,10 @@ class Bithumb(RestExchange, ImplicitAPI):
|
|
119
119
|
) -> ksxt.models.KsxtHistoricalDataResponse:
|
120
120
|
params = {"market": self.safe_symbol(base_market=base_market, security=symbol), "count": 200}
|
121
121
|
|
122
|
+
if end:
|
123
|
+
end_utc = end.astimezone(timezone.utc)
|
124
|
+
params.update({"to": end_utc.strftime("%Y-%m-%d %H:%M:%S")})
|
125
|
+
|
122
126
|
common_header = self.create_common_header(request_params=params)
|
123
127
|
|
124
128
|
# TODO : time_frame 을 어떻게 고정시킬까? 우리는 분봉, 일봉, 주봉, 월봉 만 지원한다고 가정하면?
|
@@ -142,7 +146,10 @@ class Bithumb(RestExchange, ImplicitAPI):
|
|
142
146
|
if common_response.success != "0":
|
143
147
|
return ksxt.models.KsxtHistoricalDataResponse(header=common_header, response=common_response, info=None)
|
144
148
|
|
145
|
-
parsed_response = self.parser.parse_historical_data(
|
149
|
+
parsed_response = self.parser.parse_historical_data(
|
150
|
+
response=response, symbol=symbol, start=start, end=end, base_market=base_market
|
151
|
+
)
|
152
|
+
|
146
153
|
return ksxt.models.KsxtHistoricalDataResponse(
|
147
154
|
header=common_header, response=common_response, info=parsed_response
|
148
155
|
)
|
@@ -341,8 +348,8 @@ class Bithumb(RestExchange, ImplicitAPI):
|
|
341
348
|
self,
|
342
349
|
acc_num: str,
|
343
350
|
symbol: str | None = "",
|
344
|
-
start:
|
345
|
-
end:
|
351
|
+
start: datetime | None = None,
|
352
|
+
end: datetime | None = None,
|
346
353
|
base_market: str = "KRW",
|
347
354
|
) -> ksxt.models.KsxtOpenOrderResponse:
|
348
355
|
params = {
|
@@ -362,7 +369,9 @@ class Bithumb(RestExchange, ImplicitAPI):
|
|
362
369
|
return ksxt.models.KsxtOpenOrderResponse(header=common_header, response=common_response, info=None)
|
363
370
|
|
364
371
|
# 데이터 파싱
|
365
|
-
parsed_info = self.parser.parse_open_order_history(
|
372
|
+
parsed_info = self.parser.parse_open_order_history(
|
373
|
+
response=response, start=start, end=end, base_market=base_market
|
374
|
+
)
|
366
375
|
|
367
376
|
return ksxt.models.KsxtOpenOrderResponse(header=common_header, response=common_response, info=parsed_info)
|
368
377
|
|
@@ -370,8 +379,8 @@ class Bithumb(RestExchange, ImplicitAPI):
|
|
370
379
|
self,
|
371
380
|
acc_num: str,
|
372
381
|
symbol: Optional[str] = "",
|
373
|
-
start:
|
374
|
-
end:
|
382
|
+
start: datetime | None = None,
|
383
|
+
end: datetime | None = None,
|
375
384
|
base_market: str = "KRW",
|
376
385
|
) -> ksxt.models.KsxtClosedOrderResponse:
|
377
386
|
params = {"market": self.safe_symbol(base_market, symbol), "uuids": "", "state": "done"}
|
@@ -387,7 +396,9 @@ class Bithumb(RestExchange, ImplicitAPI):
|
|
387
396
|
return ksxt.models.KsxtClosedOrderResponse(header=common_header, response=common_response, info=None)
|
388
397
|
|
389
398
|
# 데이터 파싱
|
390
|
-
parsed_info = self.parser.parse_closed_order_history(
|
399
|
+
parsed_info = self.parser.parse_closed_order_history(
|
400
|
+
response=response, start=start, end=end, base_market=base_market
|
401
|
+
)
|
391
402
|
|
392
403
|
return ksxt.models.KsxtClosedOrderResponse(header=common_header, response=common_response, info=parsed_info)
|
393
404
|
|
@@ -464,7 +475,7 @@ class Bithumb(RestExchange, ImplicitAPI):
|
|
464
475
|
return ksxt.models.KsxtCreateOrderResponse(header=common_header, response=common_response, info=parsed_info)
|
465
476
|
|
466
477
|
def fetch_withdrawal_history(
|
467
|
-
self, acc_num: str, base_market: str = "KRW"
|
478
|
+
self, acc_num: str, start: datetime | None = None, end: datetime | None = None, base_market: str = "KRW"
|
468
479
|
) -> ksxt.models.KsxtWithdrawalHistoryResponse:
|
469
480
|
params = {"state": "done", "uuids": "", "txids": ""}
|
470
481
|
|
@@ -479,13 +490,17 @@ class Bithumb(RestExchange, ImplicitAPI):
|
|
479
490
|
return ksxt.models.KsxtWithdrawalHistoryResponse(header=common_header, response=common_response, info=None)
|
480
491
|
|
481
492
|
# 데이터 파싱
|
482
|
-
parsed_info = self.parser.parse_withdrawal_history(
|
493
|
+
parsed_info = self.parser.parse_withdrawal_history(
|
494
|
+
response=response, start=start, end=end, base_market=base_market
|
495
|
+
)
|
483
496
|
|
484
497
|
return ksxt.models.KsxtWithdrawalHistoryResponse(
|
485
498
|
header=common_header, response=common_response, info=parsed_info
|
486
499
|
)
|
487
500
|
|
488
|
-
def fetch_deposit_history(
|
501
|
+
def fetch_deposit_history(
|
502
|
+
self, acc_num: str, start: datetime | None = None, end: datetime | None = None, base_market: str = "KRW"
|
503
|
+
) -> ksxt.models.KsxtDepositHistoryResponse:
|
489
504
|
params = {"state": "ACCEPTED", "uuids": "", "txids": ""}
|
490
505
|
|
491
506
|
common_header = self.create_common_header(request_params=params)
|
@@ -499,7 +514,9 @@ class Bithumb(RestExchange, ImplicitAPI):
|
|
499
514
|
return ksxt.models.KsxtWithdrawalHistoryResponse(header=common_header, response=common_response, info=None)
|
500
515
|
|
501
516
|
# 데이터 파싱
|
502
|
-
parsed_info = self.parser.parse_deposit_history(
|
517
|
+
parsed_info = self.parser.parse_deposit_history(
|
518
|
+
response=response, start=start, end=end, base_market=base_market
|
519
|
+
)
|
503
520
|
|
504
521
|
return ksxt.models.KsxtWithdrawalHistoryResponse(
|
505
522
|
header=common_header, response=common_response, info=parsed_info
|
Binary file
|
ksxt/config/token.toml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
[
|
2
|
-
token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.
|
3
|
-
expired =
|
1
|
+
[PSXkvBM1hQXJDRHg2rLvC7Tr8SoyPudlbx9o]
|
2
|
+
token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0b2tlbiIsImF1ZCI6ImQ0N2EzYjY4LTlkMjQtNGE3YS04YmU2LTNjOWI5MzVmZDZhZCIsInByZHRfY2QiOiIiLCJpc3MiOiJ1bm9ndyIsImV4cCI6MTcyMzAzOTYzOSwiaWF0IjoxNzIyOTUzMjM5LCJqdGkiOiJQU1hrdkJNMWhRWEpEUkhnMnJMdkM3VHI4U295UHVkbGJ4OW8ifQ.573I5Sdj6339IWT5gxhdTFFeWCJDu_ukVAu5QbH9X_SU_laTjhFPttlKBn3HJZzmhYBV89BBcwnYiCwGFU9PFg"
|
3
|
+
expired = 2024-08-07T23:07:19
|
4
4
|
|
5
|
-
[
|
6
|
-
token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.
|
7
|
-
expired =
|
5
|
+
[PSo9UuHWHtg1QzRkyu1WeXYERyUkpRK9LSii]
|
6
|
+
token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0b2tlbiIsImF1ZCI6ImNhY2NjNGZhLWMxMzktNGE5MC1hNjg2LTI2OTVmZmNiZmQ0NyIsInByZHRfY2QiOiIiLCJpc3MiOiJ1bm9ndyIsImV4cCI6MTcyMzM3ODExNSwiaWF0IjoxNzIzMjkxNzE1LCJqdGkiOiJQU285VXVIV0h0ZzFRelJreXUxV2VYWUVSeVVrcFJLOUxTaWkifQ.EnsBporS5hoD7Prx_fvXoklkxvx1u0Swp3jL9MXv3GnXtU_totbAtfDqsHWexQGJNqgEAPe6Bd2L2M0rCNUpCg"
|
7
|
+
expired = 2024-08-11T21:08:35
|
ksxt/koreainvest.py
CHANGED
@@ -248,7 +248,12 @@ class KoreaInvest(RestExchange, ImplicitAPI):
|
|
248
248
|
|
249
249
|
@RestExchange.check_token
|
250
250
|
def fetch_historical_data_index(
|
251
|
-
self,
|
251
|
+
self,
|
252
|
+
symbol: str,
|
253
|
+
time_frame: str,
|
254
|
+
start: datetime | None = None,
|
255
|
+
end: datetime | None = None,
|
256
|
+
base_market: str = "KRW",
|
252
257
|
) -> ksxt.models.KsxtHistoricalDataResponse:
|
253
258
|
if time_frame.endswith("D"):
|
254
259
|
param_code = "D"
|
@@ -285,13 +290,22 @@ class KoreaInvest(RestExchange, ImplicitAPI):
|
|
285
290
|
if common_response.success != "0":
|
286
291
|
return ksxt.models.KsxtHistoricalDataResponse(header=common_header, response=common_response, info=None)
|
287
292
|
|
288
|
-
|
293
|
+
parsed_response = self.parser.parse_historical_index_data(
|
294
|
+
response=response, symbol=symbol, start=start, end=end, base_market=base_market
|
295
|
+
)
|
289
296
|
|
290
|
-
return ksxt.models.KsxtHistoricalDataResponse(
|
297
|
+
return ksxt.models.KsxtHistoricalDataResponse(
|
298
|
+
header=common_header, response=common_response, info=parsed_response
|
299
|
+
)
|
291
300
|
|
292
301
|
@RestExchange.check_token
|
293
302
|
def fetch_historical_data(
|
294
|
-
self,
|
303
|
+
self,
|
304
|
+
symbol: str,
|
305
|
+
time_frame: str,
|
306
|
+
start: datetime | None = None,
|
307
|
+
end: datetime | None = None,
|
308
|
+
base_market: str = "KRW",
|
295
309
|
) -> ksxt.models.KsxtHistoricalDataResponse:
|
296
310
|
if time_frame.endswith("D"):
|
297
311
|
param_code = "D"
|
@@ -341,9 +355,13 @@ class KoreaInvest(RestExchange, ImplicitAPI):
|
|
341
355
|
if common_response.success != "0":
|
342
356
|
return ksxt.models.KsxtHistoricalDataResponse(header=common_header, response=common_response, info=None)
|
343
357
|
|
344
|
-
|
358
|
+
parsed_response = self.parser.parse_historical_data(
|
359
|
+
response=response, symbol=symbol, start=start, end=end, base_market=base_market
|
360
|
+
)
|
345
361
|
|
346
|
-
return ksxt.models.KsxtHistoricalDataResponse(
|
362
|
+
return ksxt.models.KsxtHistoricalDataResponse(
|
363
|
+
header=common_header, response=common_response, info=parsed_response
|
364
|
+
)
|
347
365
|
|
348
366
|
@RestExchange.check_token
|
349
367
|
def modify_order(
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
ksxt/models/transaction.py
CHANGED
Binary file
|
Binary file
|
Binary file
|
Binary file
|