ksxt 1.0.5__py3-none-any.whl → 1.0.7__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.
Files changed (78) hide show
  1. ksxt/__pycache__/__init__.cpython-312.pyc +0 -0
  2. ksxt/__pycache__/bithumb.cpython-312.pyc +0 -0
  3. ksxt/__pycache__/koreainvest.cpython-312.pyc +0 -0
  4. ksxt/__pycache__/upbit.cpython-312.pyc +0 -0
  5. ksxt/api/__pycache__/__init__.cpython-312.pyc +0 -0
  6. ksxt/api/__pycache__/bithumb.cpython-312.pyc +0 -0
  7. ksxt/api/__pycache__/koreainvest.cpython-312.pyc +0 -0
  8. ksxt/api/__pycache__/upbit.cpython-312.pyc +0 -0
  9. ksxt/async_/__pycache__/__init__.cpython-312.pyc +0 -0
  10. ksxt/async_/__pycache__/bithumb.cpython-312.pyc +0 -0
  11. ksxt/async_/__pycache__/koreainvest.cpython-312.pyc +0 -0
  12. ksxt/async_/__pycache__/upbit.cpython-312.pyc +0 -0
  13. ksxt/async_/base/__pycache__/__init__.cpython-312.pyc +0 -0
  14. ksxt/async_/base/__pycache__/async_exchange.cpython-312.pyc +0 -0
  15. ksxt/async_/base/async_exchange.py +7 -1
  16. ksxt/async_/bithumb.py +19 -2
  17. ksxt/async_/koreainvest.py +13 -2
  18. ksxt/async_/upbit.py +15 -4
  19. ksxt/base/__pycache__/__init__.cpython-312.pyc +0 -0
  20. ksxt/base/__pycache__/errors.cpython-312.pyc +0 -0
  21. ksxt/base/__pycache__/exchange.cpython-312.pyc +0 -0
  22. ksxt/base/__pycache__/rate_limiter.cpython-312.pyc +0 -0
  23. ksxt/base/__pycache__/rest_exchange.cpython-312.pyc +0 -0
  24. ksxt/base/__pycache__/types.cpython-312.pyc +0 -0
  25. ksxt/base/exchange.py +12 -1
  26. ksxt/base/rest_exchange.py +7 -1
  27. ksxt/bithumb.py +19 -2
  28. ksxt/config/__pycache__/__init__.cpython-312.pyc +0 -0
  29. ksxt/config/token.toml +2 -6
  30. ksxt/koreainvest.py +13 -2
  31. ksxt/market/__pycache__/base.cpython-312.pyc +0 -0
  32. ksxt/market/__pycache__/db.cpython-312.pyc +0 -0
  33. ksxt/market/__pycache__/logging.cpython-312.pyc +0 -0
  34. ksxt/market/__pycache__/manager.cpython-312.pyc +0 -0
  35. ksxt/market/__pycache__/markets.cpython-312.pyc +0 -0
  36. ksxt/market/krx/__pycache__/kosdaq.cpython-312.pyc +0 -0
  37. ksxt/market/krx/__pycache__/kospi.cpython-312.pyc +0 -0
  38. ksxt/market/krx/__pycache__/stock.cpython-312.pyc +0 -0
  39. ksxt/market/us/__pycache__/amex.cpython-312.pyc +0 -0
  40. ksxt/market/us/__pycache__/nasdaq.cpython-312.pyc +0 -0
  41. ksxt/market/us/__pycache__/nyse.cpython-312.pyc +0 -0
  42. ksxt/market/us/__pycache__/stock.cpython-312.pyc +0 -0
  43. ksxt/models/__pycache__/__init__.cpython-312.pyc +0 -0
  44. ksxt/models/__pycache__/balance.cpython-312.pyc +0 -0
  45. ksxt/models/__pycache__/cash.cpython-312.pyc +0 -0
  46. ksxt/models/__pycache__/common.cpython-312.pyc +0 -0
  47. ksxt/models/__pycache__/error.cpython-312.pyc +0 -0
  48. ksxt/models/__pycache__/historical.cpython-312.pyc +0 -0
  49. ksxt/models/__pycache__/market.cpython-312.pyc +0 -0
  50. ksxt/models/__pycache__/order.cpython-312.pyc +0 -0
  51. ksxt/models/__pycache__/orderbook.cpython-312.pyc +0 -0
  52. ksxt/models/__pycache__/ticker.cpython-312.pyc +0 -0
  53. ksxt/models/__pycache__/token.cpython-312.pyc +0 -0
  54. ksxt/models/__pycache__/transaction.cpython-312.pyc +0 -0
  55. ksxt/models/balance.py +17 -4
  56. ksxt/models/transaction.py +22 -30
  57. ksxt/parser/__pycache__/bithumb.cpython-312.pyc +0 -0
  58. ksxt/parser/__pycache__/koreainvest.cpython-312.pyc +0 -0
  59. ksxt/parser/__pycache__/parser.cpython-312.pyc +0 -0
  60. ksxt/parser/__pycache__/upbit.cpython-312.pyc +0 -0
  61. ksxt/parser/bithumb.py +41 -17
  62. ksxt/parser/koreainvest.py +28 -13
  63. ksxt/parser/parser.py +9 -5
  64. ksxt/parser/upbit.py +50 -19
  65. ksxt/upbit.py +13 -2
  66. ksxt/utils/__pycache__/safer.cpython-312.pyc +0 -0
  67. ksxt/utils/__pycache__/sorter.cpython-312.pyc +0 -0
  68. ksxt/utils/__pycache__/timer.cpython-312.pyc +0 -0
  69. {ksxt-1.0.5.dist-info → ksxt-1.0.7.dist-info}/LICENSE.txt +1 -1
  70. {ksxt-1.0.5.dist-info → ksxt-1.0.7.dist-info}/METADATA +2 -2
  71. ksxt-1.0.7.dist-info/RECORD +119 -0
  72. ksxt/api/auto/__pycache__/bithumb.cpython-312.pyc +0 -0
  73. ksxt/api/auto/__pycache__/koreainvest.cpython-312.pyc +0 -0
  74. ksxt/api/auto/__pycache__/upbit.cpython-312.pyc +0 -0
  75. ksxt/async_/base/__pycache__/throttler.cpython-312.pyc +0 -0
  76. ksxt-1.0.5.dist-info/RECORD +0 -123
  77. {ksxt-1.0.5.dist-info → ksxt-1.0.7.dist-info}/WHEEL +0 -0
  78. {ksxt-1.0.5.dist-info → ksxt-1.0.7.dist-info}/top_level.txt +0 -0
@@ -11,10 +11,9 @@ from ksxt.models.ticker import MultiSymbolTickerInfo, TickerInfo
11
11
  from ksxt.models.token import TokenInfo
12
12
  from ksxt.models.transaction import (
13
13
  ClosedOrderHistory,
14
- ClosedOrderInfo,
15
14
  DepositHistory,
16
15
  OpenedOrderHistory,
17
- OpenedOrderInfo,
16
+ TransactionInfo,
18
17
  )
19
18
  from ksxt.parser.parser import BaseParser
20
19
  from ksxt.utils import safer, sorter, timer
@@ -182,7 +181,13 @@ class KoreaInvestParser(BaseParser):
182
181
  return ask_data, bid_data
183
182
 
184
183
  def parse_balance(
185
- self, response: List[Dict], base_market: str = "KRW", excluded_symbols: Optional[list[str]] = None
184
+ self,
185
+ response: List[Dict],
186
+ base_market: str = "KRW",
187
+ excluded_symbols: Optional[list[str]] = None,
188
+ included_symbols: list[str] | None = None,
189
+ filter_delisted: bool = True,
190
+ min_amount: float = 0,
186
191
  ) -> BalanceInfo:
187
192
  safe_response = safer.safe_value(response, "output1")
188
193
 
@@ -190,9 +195,16 @@ class KoreaInvestParser(BaseParser):
190
195
  balances = [
191
196
  self._parse_balance(_, base_market)
192
197
  for _ in safe_response
193
- if excluded_symbols is None or safer.safe_string(_, "pdno") not in excluded_symbols
198
+ if (excluded_symbols is None or safer.safe_string(_, "pdno") not in excluded_symbols)
199
+ and (included_symbols is None or safer.safe_string(_, "pdno") in included_symbols)
194
200
  ]
195
201
 
202
+ if filter_delisted:
203
+ balances = [balance for balance in balances if balance.price > 0]
204
+
205
+ if min_amount > 0:
206
+ balances = [balance for balance in balances if balance.amount > min_amount]
207
+
196
208
  # 총 매입금액
197
209
  total_amount = sum(bal.price * bal.qty for bal in balances)
198
210
  total_evaluation_amount = sum(bal.evaluation_price * bal.qty for bal in balances)
@@ -214,7 +226,7 @@ class KoreaInvestParser(BaseParser):
214
226
  name=safer.safe_string(data, "prdt_name"),
215
227
  evaluation_price=safer.safe_number(data, "evlu_amt"),
216
228
  price=safer.safe_number(data, "pchs_avg_pric"),
217
- pnl_amount=safer.safe_number(data, "evlu_pfls_amt"),
229
+ pnl=safer.safe_number(data, "evlu_pfls_amt"),
218
230
  pnl_ratio=safer.safe_number(data, "evlu_pfls_rt"),
219
231
  qty=safer.safe_number(data, "hldg_qty"),
220
232
  free_qty=safer.safe_number(data, "ord_psbl_qty"),
@@ -284,15 +296,17 @@ class KoreaInvestParser(BaseParser):
284
296
 
285
297
  return ClosedOrderHistory(history=orders)
286
298
 
287
- def _parse_closed_order_info(self, order: Dict, base_market: str = "KRW") -> ClosedOrderInfo:
299
+ def _parse_closed_order_info(self, order: Dict, base_market: str = "KRW") -> TransactionInfo:
288
300
  if safer.safe_string(order, "sll_buy_dvsn_cd") == "01":
289
301
  _type = "ask"
290
302
  else:
291
303
  _type = "bid"
292
304
 
293
- return ClosedOrderInfo(
305
+ return TransactionInfo(
294
306
  uuid=safer.safe_string(order, "odno"),
295
- type=_type,
307
+ account_id="",
308
+ # account_id=f'{safer.safe_string(order, "CANO")}-{safer.safe_string(order, "ACNT_PRDT_CD")}',
309
+ transaction_type=_type,
296
310
  symbol=safer.safe_string(order, "pdno"),
297
311
  price=safer.safe_number(order, "avg_prvs"),
298
312
  qty=safer.safe_number(order, "tot_ccld_qty"),
@@ -300,8 +314,8 @@ class KoreaInvestParser(BaseParser):
300
314
  tax=0,
301
315
  # 단일 주문 이력에는 수수료 관련 정보가 없고, 조회한 전체 목록에 대해 수수료 정보만 존재한다.
302
316
  fee=0,
303
- created_at=datetime.fromisoformat(safer.safe_string(order, "ord_dt")),
304
317
  order_type=safer.safe_string(order, "avg_prvs"),
318
+ created_at=datetime.fromisoformat(safer.safe_string(order, "ord_dt")),
305
319
  )
306
320
 
307
321
  def parse_open_order_history(
@@ -318,15 +332,15 @@ class KoreaInvestParser(BaseParser):
318
332
 
319
333
  return OpenedOrderHistory(history=orders)
320
334
 
321
- def _parse_open_order_info(self, order: Dict, base_market: str = "KRW") -> OpenedOrderInfo:
335
+ def _parse_open_order_info(self, order: Dict, base_market: str = "KRW") -> TransactionInfo:
322
336
  if safer.safe_string(order, "sll_buy_dvsn_cd") == "01":
323
337
  _type = "ask"
324
338
  else:
325
339
  _type = "bid"
326
340
 
327
- return OpenedOrderInfo(
341
+ return TransactionInfo(
328
342
  uuid=safer.safe_string(order, "odno"),
329
- type=_type,
343
+ transaction_type=_type,
330
344
  symbol=safer.safe_string(order, "pdno"),
331
345
  price=safer.safe_number(order, "avg_prvs"),
332
346
  qty=safer.safe_number(order, "tot_ccld_qty"),
@@ -334,8 +348,9 @@ class KoreaInvestParser(BaseParser):
334
348
  tax=0,
335
349
  # 단일 주문 이력에는 수수료 관련 정보가 없고, 조회한 전체 목록에 대해 수수료 정보만 존재한다.
336
350
  fee=0,
337
- created_at=datetime.fromisoformat(safer.safe_string(order, "ord_dt")),
351
+ currency=base_market,
338
352
  order_type=safer.safe_string(order, "avg_prvs"),
353
+ created_at=datetime.fromisoformat(safer.safe_string(order, "ord_dt")),
339
354
  )
340
355
 
341
356
  def parse_create_order(self, response: Dict, base_market: str = "KRW") -> CreateOrderResponse:
ksxt/parser/parser.py CHANGED
@@ -11,10 +11,8 @@ from ksxt.models.orderbook import MultiSymbolOrderBookInfos, OrderBookData, Orde
11
11
  from ksxt.models.ticker import MultiSymbolTickerInfo, TickerInfo
12
12
  from ksxt.models.transaction import (
13
13
  ClosedOrderHistory,
14
- ClosedOrderInfo,
15
14
  DepositHistory,
16
15
  OpenedOrderHistory,
17
- OpenedOrderInfo,
18
16
  TransactionInfo,
19
17
  WithdrawalHistory,
20
18
  )
@@ -71,7 +69,13 @@ class BaseParser:
71
69
  self._raise_not_implemented_error()
72
70
 
73
71
  def parse_balance(
74
- self, response: List[Dict], base_market: str = "KRW", excluded_symbols: Optional[list[str]] = None
72
+ self,
73
+ response: List[Dict],
74
+ base_market: str = "KRW",
75
+ excluded_symbols: Optional[list[str]] = None,
76
+ included_symbols: list[str] | None = None,
77
+ filter_delisted: bool = True,
78
+ min_amount: float = 0,
75
79
  ) -> BalanceInfo:
76
80
  self._raise_not_implemented_error()
77
81
 
@@ -92,7 +96,7 @@ class BaseParser:
92
96
  ) -> OpenedOrderHistory:
93
97
  self._raise_not_implemented_error()
94
98
 
95
- def _parse_open_order_info(self, order: dict, base_market: str = "KRW") -> OpenedOrderInfo:
99
+ def _parse_open_order_info(self, order: dict, base_market: str = "KRW") -> TransactionInfo:
96
100
  self._raise_not_implemented_error()
97
101
 
98
102
  def parse_closed_order_history(
@@ -100,7 +104,7 @@ class BaseParser:
100
104
  ) -> ClosedOrderHistory:
101
105
  self._raise_not_implemented_error()
102
106
 
103
- def _parse_closed_order_info(self, order: dict, base_market: str = "KRW") -> ClosedOrderInfo:
107
+ def _parse_closed_order_info(self, order: dict, base_market: str = "KRW") -> TransactionInfo:
104
108
  self._raise_not_implemented_error()
105
109
 
106
110
  def parse_modify_order(self, response: dict, base_market: str = "KRW") -> ModifyOrderResponse:
ksxt/parser/upbit.py CHANGED
@@ -11,10 +11,8 @@ from ksxt.models.orderbook import MultiSymbolOrderBookInfos, OrderBookData, Orde
11
11
  from ksxt.models.ticker import MultiSymbolTickerInfo, TickerInfo
12
12
  from ksxt.models.transaction import (
13
13
  ClosedOrderHistory,
14
- ClosedOrderInfo,
15
14
  DepositHistory,
16
15
  OpenedOrderHistory,
17
- OpenedOrderInfo,
18
16
  TransactionInfo,
19
17
  WithdrawalHistory,
20
18
  )
@@ -181,7 +179,13 @@ class UpbitParser(BaseParser):
181
179
  return ask_data, bid_data
182
180
 
183
181
  def parse_balance(
184
- self, response: List[Dict], base_market: str = "KRW", excluded_symbols: Optional[list[str]] = None
182
+ self,
183
+ response: List[Dict],
184
+ base_market: str = "KRW",
185
+ excluded_symbols: Optional[list[str]] = None,
186
+ included_symbols: list[str] | None = None,
187
+ filter_delisted: bool = True,
188
+ min_amount: float = 0,
185
189
  ) -> BalanceInfo:
186
190
  # 1. Filter out entries where 'currency' is not the base_market
187
191
  # 2. Ensure 'unit_currency' is the base_market
@@ -192,11 +196,18 @@ class UpbitParser(BaseParser):
192
196
  if data["currency"] != base_market
193
197
  and data["unit_currency"] == base_market
194
198
  and (excluded_symbols is None or data["currency"] not in excluded_symbols)
199
+ and (included_symbols is None or self.safe_symbol(base_market, data["currency"]) in included_symbols)
195
200
  ]
196
201
 
197
202
  # Initialize balance list
198
203
  balances = [self._parse_balance(data, base_market) for data in filtered_data]
199
204
 
205
+ if filter_delisted:
206
+ balances = [balance for balance in balances if balance.price > 0]
207
+
208
+ if min_amount > 0:
209
+ balances = [balance for balance in balances if balance.amount > min_amount]
210
+
200
211
  # 총 매입금액
201
212
  total_amount = sum(bal.price * bal.qty for bal in balances)
202
213
  total_evaluation_amount = sum(bal.evaluation_price * bal.qty for bal in balances)
@@ -216,10 +227,8 @@ class UpbitParser(BaseParser):
216
227
  return BalanceData(
217
228
  symbol=self.safe_symbol(base_market, safer.safe_string(data, "currency")),
218
229
  name=self.safe_symbol(base_market, safer.safe_string(data, "currency")),
219
- evaluation_price=safer.safe_number(data, "avg_buy_price"),
220
230
  price=safer.safe_number(data, "avg_buy_price"),
221
- pnl_amount=0, # 필요에 따라 적절히 설정
222
- pnl_ratio=0, # 필요에 따라 적절히 설정
231
+ evaluation_price=safer.safe_number(data, "avg_buy_price"),
223
232
  qty=safer.safe_number(data, "balance"),
224
233
  free_qty=safer.safe_number(data, "balance") - safer.safe_number(data, "locked"),
225
234
  used_qty=safer.safe_number(data, "locked"),
@@ -293,18 +302,27 @@ class UpbitParser(BaseParser):
293
302
 
294
303
  return ClosedOrderHistory(history=orders)
295
304
 
296
- def _parse_closed_order_info(self, order: dict, base_market: str = "KRW") -> ClosedOrderInfo:
297
- return ClosedOrderInfo(
305
+ def _parse_closed_order_info(self, order: dict, base_market: str = "KRW") -> TransactionInfo:
306
+ # 현재 API에서 price 값을 제대로 전달해주지 않음.
307
+ if safer.safe_number(order, "price") == 0:
308
+ price = price = safer.safe_number(order, "executed_funds") / safer.safe_number(order, "volume")
309
+ else:
310
+ price = safer.safe_number(order, "price")
311
+
312
+ return TransactionInfo(
298
313
  uuid=safer.safe_string(order, "uuid"),
299
- type=safer.safe_string(order, "side"),
314
+ account_id="",
315
+ transaction_type=safer.safe_string(order, "side"),
316
+ order_type=safer.safe_string(order, "ord_type"),
317
+ tr_position="long",
300
318
  symbol=self.safe_symbol(base_market, safer.safe_string(order, "market")),
301
- price=safer.safe_number(order, "executed_funds") / safer.safe_number(order, "volume"),
319
+ price=price,
302
320
  qty=safer.safe_number(order, "volume"),
303
321
  amount=safer.safe_number(order, "executed_funds"),
304
322
  tax=0,
305
- fee=safer.safe_number(order, "paid_fee"), # Adjusted to 'paid_fee' to match provided data
323
+ fee=safer.safe_number(order, "paid_fee"),
324
+ currency=base_market,
306
325
  created_at=datetime.fromisoformat(safer.safe_string(order, "created_at")),
307
- order_type=safer.safe_string(order, "ord_type"),
308
326
  )
309
327
 
310
328
  def parse_open_order_history(
@@ -324,18 +342,26 @@ class UpbitParser(BaseParser):
324
342
 
325
343
  return OpenedOrderHistory(history=orders)
326
344
 
327
- def _parse_open_order_info(self, order: dict, base_market: str = "KRW") -> OpenedOrderInfo:
328
- return OpenedOrderInfo(
345
+ def _parse_open_order_info(self, order: dict, base_market: str = "KRW") -> TransactionInfo:
346
+ # 현재 API에서 price 값을 제대로 전달해주지 않음.
347
+ if safer.safe_number(order, "price") == 0:
348
+ price = price = safer.safe_number(order, "executed_funds") / safer.safe_number(order, "volume")
349
+ else:
350
+ price = safer.safe_number(order, "price")
351
+
352
+ return TransactionInfo(
329
353
  uuid=safer.safe_string(order, "uuid"),
330
- type=safer.safe_string(order, "side"),
354
+ account_id="",
355
+ transaction_type=safer.safe_string(order, "side"),
331
356
  symbol=self.safe_symbol(base_market, safer.safe_string(order, "market")),
332
- price=safer.safe_number(order, "executed_funds") / safer.safe_number(order, "volume"),
357
+ price=price,
333
358
  qty=safer.safe_number(order, "volume"),
334
359
  amount=safer.safe_number(order, "executed_funds"),
335
360
  tax=0,
336
- fee=safer.safe_number(order, "reserved_fee"),
337
- created_at=datetime.fromisoformat(safer.safe_string(order, "created_at")),
361
+ fee=safer.safe_number(order, "paid_fee"),
362
+ currency=base_market,
338
363
  order_type=safer.safe_string(order, "ord_type"),
364
+ created_at=datetime.fromisoformat(safer.safe_string(order, "created_at")),
339
365
  )
340
366
 
341
367
  def parse_withdrawal_history(
@@ -383,11 +409,16 @@ class UpbitParser(BaseParser):
383
409
  def _parse_transaction_history_item(self, item: Dict, base_market: str = "KRW") -> TransactionInfo:
384
410
  return TransactionInfo(
385
411
  uuid=safer.safe_string(item, "uuid"),
386
- type=safer.safe_string(item, "type"),
412
+ account_id="",
413
+ transaction_type=safer.safe_string(item, "type"),
414
+ symbol=safer.safe_string(item, "currency"),
415
+ price=1,
416
+ qty=safer.safe_number(item, "amount"),
387
417
  amount=safer.safe_number(item, "amount"),
388
418
  tax=0,
389
419
  fee=safer.safe_number(item, "fee"),
390
420
  currency=safer.safe_string(item, "currency"),
421
+ order_type=safer.safe_string(item, "transaction_type"),
391
422
  created_at=datetime.fromisoformat(safer.safe_string(item, "done_at")),
392
423
  )
393
424
 
ksxt/upbit.py CHANGED
@@ -238,7 +238,13 @@ class Upbit(RestExchange, ImplicitAPI):
238
238
  return ksxt.models.KsxtMultiOrderBookResponse(header=common_header, response=common_response, info=parsed_info)
239
239
 
240
240
  def fetch_balance(
241
- self, acc_num: str, base_market: str = "KRW", excluded_symbols: Optional[list[str]] = None
241
+ self,
242
+ acc_num: str,
243
+ base_market: str = "KRW",
244
+ excluded_symbols: list[str] | None = None,
245
+ included_symbols: list[str] | None = None,
246
+ filter_delisted: bool = True,
247
+ min_amount: float = 0,
242
248
  ) -> ksxt.models.KsxtBalanceResponse:
243
249
  params = {}
244
250
 
@@ -251,7 +257,12 @@ class Upbit(RestExchange, ImplicitAPI):
251
257
  return ksxt.models.KsxtBalanceResponse(header=common_header, response=common_response, info=None)
252
258
 
253
259
  parsed_info = self.parser.parse_balance(
254
- response=response, base_market=base_market, excluded_symbols=excluded_symbols
260
+ response=response,
261
+ base_market=base_market,
262
+ excluded_symbols=excluded_symbols,
263
+ included_symbols=included_symbols,
264
+ filter_delisted=filter_delisted,
265
+ min_amount=min_amount,
255
266
  )
256
267
 
257
268
  return ksxt.models.KsxtBalanceResponse(header=common_header, response=common_response, info=parsed_info)
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright © 2023 AMOSA
3
+ Copyright © 2025 AMOSA
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ksxt
3
- Version: 1.0.5
3
+ Version: 1.0.7
4
4
  License: MIT License
5
5
 
6
- Copyright © 2023 AMOSA
6
+ Copyright © 2025 AMOSA
7
7
 
8
8
  Permission is hereby granted, free of charge, to any person obtaining a copy
9
9
  of this software and associated documentation files (the "Software"), to deal
@@ -0,0 +1,119 @@
1
+ ksxt/__init__.py,sha256=Q4kbXuxaCcQg5Z1T2z31lrUc5Cr95RIyv-y6hNf3R0E,131
2
+ ksxt/bithumb.py,sha256=jiN9hIopmXwUTQn71mR13Z_c0ZDJOXhbJhgpzHRniLs,22641
3
+ ksxt/koreainvest.py,sha256=_3ZbMw7O-I0lWhMcDMRTcb3lCcuUFFp-OeDtUs8S5hA,20805
4
+ ksxt/upbit.py,sha256=2nfO-x_1C9XOoXRm2_cB4hXRV7jxoTP-s7Eqm8u8EJc,22861
5
+ ksxt/__pycache__/__init__.cpython-312.pyc,sha256=99OafUFiZDEhtstgud7UXpCCcOfy20LUICQC7vNbNPc,310
6
+ ksxt/__pycache__/bithumb.cpython-312.pyc,sha256=SI-IV1_1cTRt54m0z5G_Qys0f2jqJ_e91QIGucD1Jrg,25686
7
+ ksxt/__pycache__/koreainvest.cpython-312.pyc,sha256=38FJ1f8w7PnSCALogXBPjVTAoRursY6sIKmNqOxlx08,22472
8
+ ksxt/__pycache__/upbit.cpython-312.pyc,sha256=C3Bv5Gw5FvBjK3hgKeu4Loh7em94wyqTV9qgAdYhhC0,26035
9
+ ksxt/api/__init__.py,sha256=CZ8AedRG8O9vEdSqTaot5sV3nwpxPZoVOYwrFCLUo6M,736
10
+ ksxt/api/bithumb.py,sha256=6apoSNoiEOIkR6xQu4rtCSz7sdNdx3BHeu8-m8omh6E,2177
11
+ ksxt/api/koreainvest.py,sha256=93BASTUUsw39APRFxVqlaOu-keEFuIO3MvHX_6g-AAs,2159
12
+ ksxt/api/upbit.py,sha256=CQN-A0gVoeNoHTZhH8kCaGk1svaOvo5HDyVFfXou_6A,2704
13
+ ksxt/api/__pycache__/__init__.cpython-312.pyc,sha256=1tMXRXoUs6u2hiKjL8_5209aEWMLxAIEABmUj8iNqw4,1374
14
+ ksxt/api/__pycache__/bithumb.cpython-312.pyc,sha256=-tF6txgvtDIqXxIroDh28pgIrEvA9DK_NCzw6DBKcgk,2559
15
+ ksxt/api/__pycache__/koreainvest.cpython-312.pyc,sha256=VftBw8Krzp9VYAZ3RSeBWrqiNkAUyqQfinE2ZjxRueM,2087
16
+ ksxt/api/__pycache__/upbit.cpython-312.pyc,sha256=38hbV6oBqrh4hXrkooxTJluIryuDuSBkbv119mq3Ewg,3014
17
+ ksxt/api/auto/api_generator.py,sha256=R8Q7uFN1wDr_0CUsJJ1nmZhoDBwzjPlKUXrNCsY9QKU,2540
18
+ ksxt/api/auto/bithumb.py,sha256=n6ctGefq28i5CMiItLF1xOZgeDP9F9em4HXfoPUcmqw,1261
19
+ ksxt/api/auto/koreainvest.py,sha256=z4Bf3C7g2W-eQP99oBeM_J0mq2D3PkbQaulrDwxJB04,1582
20
+ ksxt/api/auto/upbit.py,sha256=CtSG0jziqJR4FInHvwDisJfMWCUrUIQQcNPuCGGR7Do,1467
21
+ ksxt/async_/__init__.py,sha256=ztfV65aN2mXamQSfVm3GLYB6cszkvsCSlUyhfe2H_2M,186
22
+ ksxt/async_/bithumb.py,sha256=sVGUSHSm9CKLbhUoz9bDkpxlSJAzqnRaNt30ocWBsKI,20534
23
+ ksxt/async_/koreainvest.py,sha256=6HV-miG50khuvyr634eQb9GlaIIfo8asI_qfDATX90E,23132
24
+ ksxt/async_/upbit.py,sha256=Y0cPAkiZluBCpNj2jX1d-V0olzMZMT8Dyzup2BAnSH0,22783
25
+ ksxt/async_/__pycache__/__init__.cpython-312.pyc,sha256=JMmqx3WOUqRd8bNVJetVrh4iuOE0ihwajLyI0OaHB7U,379
26
+ ksxt/async_/__pycache__/bithumb.cpython-312.pyc,sha256=qL2X3-e3ulLiWHWJQrCYhsNDkxK1mqT4GdH_nVF8GDM,24418
27
+ ksxt/async_/__pycache__/koreainvest.cpython-312.pyc,sha256=Oy71u-nws5BJEiT0mBgi_AxlmqM1Bn7LRRGjguFwCNM,25680
28
+ ksxt/async_/__pycache__/upbit.cpython-312.pyc,sha256=ssF1mktP57F243a0IEogVCuXFoIfYANZvpmCs95DNoo,27751
29
+ ksxt/async_/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
+ ksxt/async_/base/async_exchange.py,sha256=wUZySn7TE5FMMmJpi1Whpm6pXPObxVaS87HS0jJ35R8,9721
31
+ ksxt/async_/base/__pycache__/__init__.cpython-312.pyc,sha256=S4bPuB8OeLTMdU22fAKRges3VlhAuVM6EBIbb_92gOM,152
32
+ ksxt/async_/base/__pycache__/async_exchange.cpython-312.pyc,sha256=ZiEzacI9o9ppGsg8B9vuyD9F3ZHzMXHwOLlJ4NXtXyw,15858
33
+ ksxt/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
+ ksxt/base/com_exchange.py,sha256=q7C3Bc5q4ENvNGoghnQCN7YLttgwmFoNj9WsH5qxXNQ,287
35
+ ksxt/base/errors.py,sha256=msGHmm9YGUOXOaK_VhOUEt5LvIDMMm6G-io8nQbNgA0,141
36
+ ksxt/base/exchange.py,sha256=tKU37qlYarwGmTySzGu_kQGowc_QRMdm31SGSjeLoZI,16598
37
+ ksxt/base/rate_limiter.py,sha256=9iF6OB-2u0q4nqtng8Tafn-fM3CVQ-DvdNRJ1aSCS3w,3005
38
+ ksxt/base/rest_exchange.py,sha256=_fQqoq7LkJIR8S2YkMF8PqWH-Zx4ibth_f_0BuI8PTo,16103
39
+ ksxt/base/types.py,sha256=3bd3obJhhX1njy_o4LW8hSAHX2MThOI-mZm6iifwno4,59
40
+ ksxt/base/__pycache__/__init__.cpython-312.pyc,sha256=sRTaTlUmf1BjkcBImIDu9hF2H1CO1uFRqOTXjkpSeMo,145
41
+ ksxt/base/__pycache__/errors.cpython-312.pyc,sha256=AcQa0ZFWVvPHzZ_qo7uMQUOTQwwt71FLroolBT77Tgw,621
42
+ ksxt/base/__pycache__/exchange.cpython-312.pyc,sha256=ZjDZ29l8IDEU8GZrw4cnDwBwB9tUYIIDMf4JUIRQCPw,21760
43
+ ksxt/base/__pycache__/rate_limiter.cpython-312.pyc,sha256=b-OiLzKiXR8I8GcuPAYjpDGwHOgywFfOMPJDTxHDDgA,5417
44
+ ksxt/base/__pycache__/rest_exchange.cpython-312.pyc,sha256=dRotNlB7p_iuLMOu9yeQ5_veOr5chTjpmv7TSnuUuS4,23248
45
+ ksxt/base/__pycache__/types.cpython-312.pyc,sha256=JZdcCrwjXkLpp1F5kPwUb8M2Rs3HJxpx0WuhJk-X0kc,231
46
+ ksxt/config/__init__.py,sha256=hkQx56FVJD8Gq1A_KzfOqO8BoqJRTX5TnUmqIignnlc,148
47
+ ksxt/config/bithumb.toml,sha256=JgKgHQVATsLcbxKYvekSRonJ4PjJ5x2ejp1eZHHusrQ,11693
48
+ ksxt/config/koreainvest.toml,sha256=XQRSdEgkWlhbfS6AvJRqQJ_8210i__nfFSI9n3GcgqY,11526
49
+ ksxt/config/token.toml,sha256=L71hM8EBBcZmMtuHUKPGa8sQqg7SUxKCL_ecu98SU1I,431
50
+ ksxt/config/upbit.toml,sha256=1aGKZ3HAV28rrTVGZQ418I9NJwhoRh70Vx03oKacIfY,13439
51
+ ksxt/config/__pycache__/__init__.cpython-312.pyc,sha256=1jLyeKuG_1Uy5_K3mrBPd8h4uRR_9psing5ZdeOKUkw,424
52
+ ksxt/market/base.py,sha256=SzNPJECU2iWaQEUesI_REW_A0by_Tv4hs4Hv8p_sr0I,6856
53
+ ksxt/market/db.py,sha256=ZPr2WlQRUOjhJm1fwFBrdwWG7UJkEpy5Pr0oEQ3Nqb0,386
54
+ ksxt/market/logging.py,sha256=hkyAhzA72-KCGcVavSOHFSz2FU5QJq_gn6WA6kXs_Pw,698
55
+ ksxt/market/manager.py,sha256=kgXrsjFw4O_BPVM2VxQJbm5ryWPG3L-NX1Pm-pN68jE,7301
56
+ ksxt/market/markets.py,sha256=pExEvlLhoLvs2Ipkp-p8_yG3tFgz3U3yB5VAVqD8qdM,545
57
+ ksxt/market/__pycache__/base.cpython-312.pyc,sha256=rKw82jppSUh3WKj-ZTwMe7f0bb45S7BiS0QJVYIf6Ag,11238
58
+ ksxt/market/__pycache__/db.cpython-312.pyc,sha256=UqAmDamjS6fG0HAPbgq9ZZAB1gbmkIgVpvPpdXQTByI,691
59
+ ksxt/market/__pycache__/logging.cpython-312.pyc,sha256=cF9xFQUauuncKAumkOk7ZTOogfwvS_W6xgJ6OBF7gGA,1401
60
+ ksxt/market/__pycache__/manager.cpython-312.pyc,sha256=KBjTJ90x1dSo4_8Vc4pRngsMldrioBsduFXgNlmeh-4,11783
61
+ ksxt/market/__pycache__/markets.cpython-312.pyc,sha256=kuzNGgwZoNVwZ4pC_VdiIek9hxP7yarLxR5YltUYkgs,744
62
+ ksxt/market/krx/kosdaq.py,sha256=CJDKMPp3utH-bmPrrEAzmFx5GSXk_KVhLDdGCAaxaBQ,18626
63
+ ksxt/market/krx/kospi.py,sha256=lRyA-xCjqdyuB87eHFGooIHtpbjy7WcrQ0Rk2ZnCt40,20466
64
+ ksxt/market/krx/stock.py,sha256=IXx4xNYsQgKhuLz1_S0Bd9Scqd6fip75gafRePAFW7U,8111
65
+ ksxt/market/krx/__pycache__/kosdaq.cpython-312.pyc,sha256=rk9C1APZmW42WH8OISrlR-EwpMHrgyGCMRGbaOtPMEE,7516
66
+ ksxt/market/krx/__pycache__/kospi.cpython-312.pyc,sha256=vEzv-Mg9Jq0lwWRySoJIh9g13LOLkpzyxys3mxJJ6CQ,8608
67
+ ksxt/market/krx/__pycache__/stock.cpython-312.pyc,sha256=k9hUlFzTKcTa1pY_VMKOVKvIlzJxdoGYx9APJUjEloA,9012
68
+ ksxt/market/us/amex.py,sha256=ZYlfh1x2eiA8P3DfO2PKj6nIE-O4WQNgDM-CsLqFUVs,5510
69
+ ksxt/market/us/nasdaq.py,sha256=OIBJn16veH36Um-Bhr14K0qBu3ZZwPSWi5sj6zxmkVA,5524
70
+ ksxt/market/us/nyse.py,sha256=eCAcz0saj1RFuyfmJc8cjecwGEDIhvkYVkUp941ZOIw,5507
71
+ ksxt/market/us/stock.py,sha256=hRb4RH2kf-1RaNcWLvE5tg2uCcu6LoPZ0Nc1u6Wpzbc,3675
72
+ ksxt/market/us/__pycache__/amex.cpython-312.pyc,sha256=ISJeRZ9bQHYmH9ltf7aHXUdpGaq2MgRriFm0m182iGU,3380
73
+ ksxt/market/us/__pycache__/nasdaq.cpython-312.pyc,sha256=CmTxTMsNZFWUFkZo_S7pkGWmMQoIQ-gnsfjefvz389k,3394
74
+ ksxt/market/us/__pycache__/nyse.cpython-312.pyc,sha256=ERLmlKoyXwbcK1A1Tep8i-K7v3MUvAlKQrh2pANzZqo,3377
75
+ ksxt/market/us/__pycache__/stock.cpython-312.pyc,sha256=AAb5L9s3z8F7OT0WZl20lWUKg6iEyIifU-Yc1hGsO2w,4975
76
+ ksxt/models/__init__.py,sha256=V7Nr0RHOOXithVTQW12hveavnapS8nGhWQ3JIMwDFTc,706
77
+ ksxt/models/balance.py,sha256=YarLzTXuqqdXYHoOWDx5Hh_K2DXqEoKtNgdii0UINjM,1138
78
+ ksxt/models/cash.py,sha256=sNexdR6Ek-YZ6cVAmre-zf3K30R-6hreHuBQKYzMsPU,303
79
+ ksxt/models/common.py,sha256=HvsNa2wlTeLdnB67untL0UzOQ5r6f2s6Gkfxeh7LTpM,827
80
+ ksxt/models/error.py,sha256=yzpTweHMB-bi7hzD8ATKsK2klJAsbfPEBBa1A5tY6tw,291
81
+ ksxt/models/historical.py,sha256=fWcst4WPimI2Avb4b1kOswfyf3nB4XSMgpTSmm7uTpY,655
82
+ ksxt/models/market.py,sha256=kkH-P1m1HQjJOPT1k4bk9ZgW-_kwIBO_fXHcrRlWlVE,2013
83
+ ksxt/models/order.py,sha256=LJJd-licLirI5WrAM1MItViOX_u5U_fmpBFPpDSdHxE,867
84
+ ksxt/models/orderbook.py,sha256=S1c03QBu1hupN87CMWLgEsh8u2GrZ_Z_BcTUuiKGnR0,773
85
+ ksxt/models/ticker.py,sha256=pPc7GqUOJchLg7qOpKfxhTVpXygF1Otc_M9_KfHFEgY,544
86
+ ksxt/models/token.py,sha256=eUBoX7O0ffC63BN12-1aUjcfE_R1Ylyxr6_U79FLDv0,319
87
+ ksxt/models/transaction.py,sha256=E086NQkIfTuVhmJNmr8_vYGn84c1Vf8_8sgHyBMZFU0,1491
88
+ ksxt/models/__pycache__/__init__.cpython-312.pyc,sha256=juNSOa40CKXj3FcqX7uufkG-nGRv7BeymAsD5iFbtDg,1032
89
+ ksxt/models/__pycache__/balance.cpython-312.pyc,sha256=ojawyH9i68QXJ1ZiQ8KtS2F0iQdSYIahundVhdghYns,2118
90
+ ksxt/models/__pycache__/cash.cpython-312.pyc,sha256=PNyyB9eKOU0OyaMP7p3dg3BYDb21wA0v8zzkXUXTg5E,721
91
+ ksxt/models/__pycache__/common.cpython-312.pyc,sha256=UiwBy-d1G_BCST5Ercj3HnBEO3uURPc1K71nQ25_xjs,1362
92
+ ksxt/models/__pycache__/error.cpython-312.pyc,sha256=PaFS6ijLZsNmHeIEd6M2RKAElyZ1GdmufAspqE1Y78A,773
93
+ ksxt/models/__pycache__/historical.cpython-312.pyc,sha256=9mcQEc1p9YyVovIKOYQlGwYk4s6AdPlg9WY2WQlyMIQ,1290
94
+ ksxt/models/__pycache__/market.cpython-312.pyc,sha256=1JH7CXMZ8kvbdlHqrongsmoq99p5S-vqTYhqK5eMfYQ,3077
95
+ ksxt/models/__pycache__/order.cpython-312.pyc,sha256=2pcwKS9_-I25plh92Gii3d67noYABixnrOjpkMZPnsc,1790
96
+ ksxt/models/__pycache__/orderbook.cpython-312.pyc,sha256=YL_iiIMMfKdjlkNIN4lC-olNrK8LmCBoj56GGpe9ghM,1516
97
+ ksxt/models/__pycache__/ticker.cpython-312.pyc,sha256=SQ4PMAMdWrUomHeyBY-P5STecg1EC46wRmwcCvdx0Sc,1164
98
+ ksxt/models/__pycache__/token.cpython-312.pyc,sha256=NuH6VnrVsPRhUFUspVJwcEl4KyA8hMHdZwsguCxD6M8,794
99
+ ksxt/models/__pycache__/transaction.cpython-312.pyc,sha256=_3vlu_CTVyFd5Zvil8DrDWnc9QODYCg-K3xyhOmZhdQ,2435
100
+ ksxt/parser/bithumb.py,sha256=jPNISv-LBKjATGPx-ukyoZcpurSjCBlHoHva5UBEj8E,18152
101
+ ksxt/parser/koreainvest.py,sha256=6sJ_yMmDb4IVZnEI4facxdTybtW45s9kEeiWrVXxEzs,17328
102
+ ksxt/parser/parser.py,sha256=xdqRS69VMxFupv5dNE4Cb6vq-rmDjlIOuouHj4RP72I,5801
103
+ ksxt/parser/upbit.py,sha256=8C4TYwYgdu8tOiIlrJ4QhBhUVYI57hmXwMMD2GPxObM,18908
104
+ ksxt/parser/__pycache__/bithumb.cpython-312.pyc,sha256=sOd7Q5S7o6PmvuV1i1Hn1WHj6wUB7Vt13YTR_XuCMvA,21763
105
+ ksxt/parser/__pycache__/koreainvest.cpython-312.pyc,sha256=hLywsOyhmk0sI7-P9y7VYGd5icB1FVjGYc5ULgIKFW4,20909
106
+ ksxt/parser/__pycache__/parser.cpython-312.pyc,sha256=tyRu43UBQ7e4T-y1Pk2R4SOVWPPjUmuEdaxvGODxq6Y,9029
107
+ ksxt/parser/__pycache__/upbit.cpython-312.pyc,sha256=HU4xvFJ-sxJJTbtnwAGLqDo5rVB856u-YWhcKjHq8IY,23406
108
+ ksxt/sample/symbol_sync.ipynb,sha256=dnUOgEKdUuEkDo_6LZjmDtVuNh4PPmCN4Ht7Pz-0L9Y,640081
109
+ ksxt/utils/safer.py,sha256=tlXDU9KDxrrM0HT2bv45hkblIgbEYr02NygdYS0jj6c,1289
110
+ ksxt/utils/sorter.py,sha256=j7eN1Qy7Wx3cXcWyRWyO1fVq-M24TrXvcfewPR5axF4,227
111
+ ksxt/utils/timer.py,sha256=4_rhXdQDFkKshS5utWrgTteIe71tVSTL1zNW-IjOngM,1228
112
+ ksxt/utils/__pycache__/safer.cpython-312.pyc,sha256=w-dkk_sa768g7ViIk-YrnhaxKmOu1loBlDFfjHu4PxM,1990
113
+ ksxt/utils/__pycache__/sorter.cpython-312.pyc,sha256=fg2obPlufrTQZLqIrzDKkX6bZQkUbdXyzZNqLjZiG3A,625
114
+ ksxt/utils/__pycache__/timer.cpython-312.pyc,sha256=9YXIdgCoGYeTR2gV86pZO9dG6_ZZ_IUNjJ318Tnb0m0,2004
115
+ ksxt-1.0.7.dist-info/LICENSE.txt,sha256=p2JwEVHDRuJx8UL5Xnt_pFhdC73ppwp7rYQhHqviWB8,1080
116
+ ksxt-1.0.7.dist-info/METADATA,sha256=2Yw99Tp0SO2JBNo3-WqphruPpxmkhj3QHCql9BBbcuI,1649
117
+ ksxt-1.0.7.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
118
+ ksxt-1.0.7.dist-info/top_level.txt,sha256=XLUhkZCur5Pe0BPUV3J0syngIPz7jBb2YlQR4epo5kI,5
119
+ ksxt-1.0.7.dist-info/RECORD,,
@@ -1,123 +0,0 @@
1
- ksxt/__init__.py,sha256=Q4kbXuxaCcQg5Z1T2z31lrUc5Cr95RIyv-y6hNf3R0E,131
2
- ksxt/bithumb.py,sha256=1_pA-dFJvFnrnj5jP5wXy1wLUivPuKNd9SfW6AZwtFk,22149
3
- ksxt/koreainvest.py,sha256=ohXxbhPphLmAYPtEmEQw_3kzQOnGn80e2y4K8tdbGb4,20500
4
- ksxt/upbit.py,sha256=WE9sTqTOu3409YY3aCxOz0nWdYngP_ylu2BLsNzH7qU,22556
5
- ksxt/__pycache__/__init__.cpython-312.pyc,sha256=aBHVFPn-w8foaTpyyvHjFAb4fVLkO3orauFpozqpvv8,309
6
- ksxt/__pycache__/bithumb.cpython-312.pyc,sha256=68w6VqfuUl-N_oMdl1U0NVoI0GokNpBKAiH90OjQvyA,25447
7
- ksxt/__pycache__/koreainvest.cpython-312.pyc,sha256=J6TqEj-oMtdzC9BssoxlCjd8a63xFor_5Ln0B_9hIng,22244
8
- ksxt/__pycache__/upbit.cpython-312.pyc,sha256=ha8t5Ubp5CAoz4p9-rcmaaeVnaJjFMEIXdTo4NApJHA,25839
9
- ksxt/api/__init__.py,sha256=CZ8AedRG8O9vEdSqTaot5sV3nwpxPZoVOYwrFCLUo6M,736
10
- ksxt/api/bithumb.py,sha256=6apoSNoiEOIkR6xQu4rtCSz7sdNdx3BHeu8-m8omh6E,2177
11
- ksxt/api/koreainvest.py,sha256=93BASTUUsw39APRFxVqlaOu-keEFuIO3MvHX_6g-AAs,2159
12
- ksxt/api/upbit.py,sha256=CQN-A0gVoeNoHTZhH8kCaGk1svaOvo5HDyVFfXou_6A,2704
13
- ksxt/api/__pycache__/__init__.cpython-312.pyc,sha256=ADtdUmNtVvjoBuPDCkQpCcl62eIdev63nkOnSu8FRjo,1373
14
- ksxt/api/__pycache__/bithumb.cpython-312.pyc,sha256=YCkBbJj8uNqjuxUQF0Ko9X0VSYsteksIbutP09zKrG4,2558
15
- ksxt/api/__pycache__/koreainvest.cpython-312.pyc,sha256=sCCOv9RV7cTn6LXVpdFNEqrWakpm97bl5AbA3AMDzMo,2086
16
- ksxt/api/__pycache__/upbit.cpython-312.pyc,sha256=exLCsTut235Sryu1WxtFJJgw_k7z2xwwtqh6svw_o3Q,3013
17
- ksxt/api/auto/api_generator.py,sha256=R8Q7uFN1wDr_0CUsJJ1nmZhoDBwzjPlKUXrNCsY9QKU,2540
18
- ksxt/api/auto/bithumb.py,sha256=n6ctGefq28i5CMiItLF1xOZgeDP9F9em4HXfoPUcmqw,1261
19
- ksxt/api/auto/koreainvest.py,sha256=z4Bf3C7g2W-eQP99oBeM_J0mq2D3PkbQaulrDwxJB04,1582
20
- ksxt/api/auto/upbit.py,sha256=CtSG0jziqJR4FInHvwDisJfMWCUrUIQQcNPuCGGR7Do,1467
21
- ksxt/api/auto/__pycache__/bithumb.cpython-312.pyc,sha256=s-R5UHnDxV2DxOugrUdHyu2OWyGpKmf8YoUK3gVKw_8,834
22
- ksxt/api/auto/__pycache__/koreainvest.cpython-312.pyc,sha256=kz6DHIlhPARI_GfYsZzwVz7NoQ6We_yCFrMWLpW0JTQ,968
23
- ksxt/api/auto/__pycache__/upbit.cpython-312.pyc,sha256=LVxuy6pD2QGXmM1kYou2-xWhb4075o9lkPFDpv2z004,965
24
- ksxt/async_/__init__.py,sha256=ztfV65aN2mXamQSfVm3GLYB6cszkvsCSlUyhfe2H_2M,186
25
- ksxt/async_/bithumb.py,sha256=pbbiUYz_jwir_ec-vWg6oHMQjgWUQ209WrmESxJ2FG4,20042
26
- ksxt/async_/koreainvest.py,sha256=PzIRsAsP2pLkNgxBaiHY3Nq4arYAKW4OA8EE1iMmVGQ,22827
27
- ksxt/async_/upbit.py,sha256=y3jwVSccJ9zSLOwiRzShu_q-VZvHpizf7p-cyqMqcT4,22478
28
- ksxt/async_/__pycache__/__init__.cpython-312.pyc,sha256=0kYmKTHaRVZMai7hLh6lRtbRBJYn-b7m8NpMgJ7NmHg,378
29
- ksxt/async_/__pycache__/bithumb.cpython-312.pyc,sha256=PNU5CWHVwxGesTRb0ZQQU12esCxLDxJh6PTu2wVGytQ,24179
30
- ksxt/async_/__pycache__/koreainvest.cpython-312.pyc,sha256=kBFxY26xmn05yXFRpiaqekuo3bLDTcKSBLiFaLupk-8,25452
31
- ksxt/async_/__pycache__/upbit.cpython-312.pyc,sha256=Hq-N2dexzioMKo8DkF6cifFhKrdlHMC0nUpnSHt0hGU,27541
32
- ksxt/async_/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- ksxt/async_/base/async_exchange.py,sha256=pAjsHuSzv9BbU26icfzn0t53TIC62VEJ6Q1oHT4pxQc,9570
34
- ksxt/async_/base/__pycache__/__init__.cpython-312.pyc,sha256=6FPlac0sgVrNi5Ln3bOjRTq9zF2XysE9qQXl4j3nKok,151
35
- ksxt/async_/base/__pycache__/async_exchange.cpython-312.pyc,sha256=gD1kbby6oj6dmQR-cfgqBctsufg-OnxL3rdBi2gAIqE,15640
36
- ksxt/async_/base/__pycache__/throttler.cpython-312.pyc,sha256=R-LT5NWQWnX74cdMJYKM1rjSpCGCdN7t1m8V5QUOwK8,3190
37
- ksxt/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- ksxt/base/com_exchange.py,sha256=q7C3Bc5q4ENvNGoghnQCN7YLttgwmFoNj9WsH5qxXNQ,287
39
- ksxt/base/errors.py,sha256=msGHmm9YGUOXOaK_VhOUEt5LvIDMMm6G-io8nQbNgA0,141
40
- ksxt/base/exchange.py,sha256=S-ZKsh--yRHLfZ4-Yx_u5A1CrVEQzsYDb9sjYslCEO0,16098
41
- ksxt/base/rate_limiter.py,sha256=9iF6OB-2u0q4nqtng8Tafn-fM3CVQ-DvdNRJ1aSCS3w,3005
42
- ksxt/base/rest_exchange.py,sha256=vMDvojZsN5YzP1BVPtFdR8UxoF8y-bu655KkJiAkq3o,15952
43
- ksxt/base/types.py,sha256=3bd3obJhhX1njy_o4LW8hSAHX2MThOI-mZm6iifwno4,59
44
- ksxt/base/__pycache__/__init__.cpython-312.pyc,sha256=bNBz2l_g_6uoMfpg84oTHcjKkwBVVRavk1RlYg6N-to,144
45
- ksxt/base/__pycache__/errors.cpython-312.pyc,sha256=Cqv1BFN_hzWP_5aJyEUUQqpG8eDiGmKROqaRmg9CCU8,620
46
- ksxt/base/__pycache__/exchange.cpython-312.pyc,sha256=19yIHgTh1OabVwLIo0r_DXAmkgFCY9hvneu1uhorBks,21259
47
- ksxt/base/__pycache__/rate_limiter.cpython-312.pyc,sha256=h1UefCyC3UBW2izVXNt6OXLLXrAcP3ZubJEzdLaoSL4,5416
48
- ksxt/base/__pycache__/rest_exchange.cpython-312.pyc,sha256=NgGJdTGSl1zp1ckXmEl7tWP6VpoBGvbXmRlMboPq978,23036
49
- ksxt/base/__pycache__/types.cpython-312.pyc,sha256=7bugAIz0poOTdpogxGqmiFcjhrgCfMDlu1gZ2l3Qo0c,230
50
- ksxt/config/__init__.py,sha256=hkQx56FVJD8Gq1A_KzfOqO8BoqJRTX5TnUmqIignnlc,148
51
- ksxt/config/bithumb.toml,sha256=JgKgHQVATsLcbxKYvekSRonJ4PjJ5x2ejp1eZHHusrQ,11693
52
- ksxt/config/koreainvest.toml,sha256=XQRSdEgkWlhbfS6AvJRqQJ_8210i__nfFSI9n3GcgqY,11526
53
- ksxt/config/token.toml,sha256=F3RnfRe8ArAtriXQsDF3k5attyJ4gGbH9rcHRrgFU2E,860
54
- ksxt/config/upbit.toml,sha256=1aGKZ3HAV28rrTVGZQ418I9NJwhoRh70Vx03oKacIfY,13439
55
- ksxt/config/__pycache__/__init__.cpython-312.pyc,sha256=mHDOgIn3JKvJ85BM8nn459aRhoUmWJzlnrVYyGRDbZg,423
56
- ksxt/market/base.py,sha256=SzNPJECU2iWaQEUesI_REW_A0by_Tv4hs4Hv8p_sr0I,6856
57
- ksxt/market/db.py,sha256=ZPr2WlQRUOjhJm1fwFBrdwWG7UJkEpy5Pr0oEQ3Nqb0,386
58
- ksxt/market/logging.py,sha256=hkyAhzA72-KCGcVavSOHFSz2FU5QJq_gn6WA6kXs_Pw,698
59
- ksxt/market/manager.py,sha256=kgXrsjFw4O_BPVM2VxQJbm5ryWPG3L-NX1Pm-pN68jE,7301
60
- ksxt/market/markets.py,sha256=pExEvlLhoLvs2Ipkp-p8_yG3tFgz3U3yB5VAVqD8qdM,545
61
- ksxt/market/__pycache__/base.cpython-312.pyc,sha256=ljzyywdEdu8zKN38eWh6r6D4NYL96W_Zm1xFcXMwSZI,11237
62
- ksxt/market/__pycache__/db.cpython-312.pyc,sha256=Ej-HqAnaNQKWQHndwkbm4nNeVGR8ERbvC4vLs_vZ2j0,690
63
- ksxt/market/__pycache__/logging.cpython-312.pyc,sha256=lj3L123QmJeAjP0p_YTlY-ZuYS3Ujusy3swOeUMDCls,1400
64
- ksxt/market/__pycache__/manager.cpython-312.pyc,sha256=i4bOmK_AtgcoHl4uwx-SqrbiKg0e3RcLQB4Q_Uz0uCk,11782
65
- ksxt/market/__pycache__/markets.cpython-312.pyc,sha256=hDMXIz5i38AOJv0MIuJiUO19_7iEn5c5GXFfBeNE5V8,743
66
- ksxt/market/krx/kosdaq.py,sha256=CJDKMPp3utH-bmPrrEAzmFx5GSXk_KVhLDdGCAaxaBQ,18626
67
- ksxt/market/krx/kospi.py,sha256=lRyA-xCjqdyuB87eHFGooIHtpbjy7WcrQ0Rk2ZnCt40,20466
68
- ksxt/market/krx/stock.py,sha256=IXx4xNYsQgKhuLz1_S0Bd9Scqd6fip75gafRePAFW7U,8111
69
- ksxt/market/krx/__pycache__/kosdaq.cpython-312.pyc,sha256=JLFNvSwg9vko59DBhOwM1g9T5yM3XzrKVjCsvYCg6mo,7515
70
- ksxt/market/krx/__pycache__/kospi.cpython-312.pyc,sha256=TuUo2YVL-V-5TmlEEAQl-2Bb5fcCVSOgWDuj0joTARw,8607
71
- ksxt/market/krx/__pycache__/stock.cpython-312.pyc,sha256=vE6kr-bP9_qtj3oA7YQnV7zbJ9ofIlPYnN1iGtyp3wU,9011
72
- ksxt/market/us/amex.py,sha256=ZYlfh1x2eiA8P3DfO2PKj6nIE-O4WQNgDM-CsLqFUVs,5510
73
- ksxt/market/us/nasdaq.py,sha256=OIBJn16veH36Um-Bhr14K0qBu3ZZwPSWi5sj6zxmkVA,5524
74
- ksxt/market/us/nyse.py,sha256=eCAcz0saj1RFuyfmJc8cjecwGEDIhvkYVkUp941ZOIw,5507
75
- ksxt/market/us/stock.py,sha256=hRb4RH2kf-1RaNcWLvE5tg2uCcu6LoPZ0Nc1u6Wpzbc,3675
76
- ksxt/market/us/__pycache__/amex.cpython-312.pyc,sha256=FtW2C1PoQdPoO6OG91baKWkeA-e9G4P8NbMSpImXQVw,3379
77
- ksxt/market/us/__pycache__/nasdaq.cpython-312.pyc,sha256=1BqqOszEL9GGXbBqdKC2C7iswlf5VX1YMwi4Wi5FoOI,3393
78
- ksxt/market/us/__pycache__/nyse.cpython-312.pyc,sha256=S7Pngjx_aPoTC_h6x43BXNvqGWV3PmEXr1tJvXe-wlQ,3376
79
- ksxt/market/us/__pycache__/stock.cpython-312.pyc,sha256=Gh7sugnsiHbTlJST-Tuqu24vNdKz7Pw_2NOusiaKduI,4974
80
- ksxt/models/__init__.py,sha256=V7Nr0RHOOXithVTQW12hveavnapS8nGhWQ3JIMwDFTc,706
81
- ksxt/models/balance.py,sha256=zOYclyZA0A-DU8ZIsTDOxXZw3VUYQhfp1u3sTrzXWuE,651
82
- ksxt/models/cash.py,sha256=sNexdR6Ek-YZ6cVAmre-zf3K30R-6hreHuBQKYzMsPU,303
83
- ksxt/models/common.py,sha256=HvsNa2wlTeLdnB67untL0UzOQ5r6f2s6Gkfxeh7LTpM,827
84
- ksxt/models/error.py,sha256=yzpTweHMB-bi7hzD8ATKsK2klJAsbfPEBBa1A5tY6tw,291
85
- ksxt/models/historical.py,sha256=fWcst4WPimI2Avb4b1kOswfyf3nB4XSMgpTSmm7uTpY,655
86
- ksxt/models/market.py,sha256=kkH-P1m1HQjJOPT1k4bk9ZgW-_kwIBO_fXHcrRlWlVE,2013
87
- ksxt/models/order.py,sha256=LJJd-licLirI5WrAM1MItViOX_u5U_fmpBFPpDSdHxE,867
88
- ksxt/models/orderbook.py,sha256=S1c03QBu1hupN87CMWLgEsh8u2GrZ_Z_BcTUuiKGnR0,773
89
- ksxt/models/ticker.py,sha256=pPc7GqUOJchLg7qOpKfxhTVpXygF1Otc_M9_KfHFEgY,544
90
- ksxt/models/token.py,sha256=eUBoX7O0ffC63BN12-1aUjcfE_R1Ylyxr6_U79FLDv0,319
91
- ksxt/models/transaction.py,sha256=AOIf3VdIbYNtafyFdDmmO1n5W3teY_GCP5F_erAAq8o,1643
92
- ksxt/models/__pycache__/__init__.cpython-312.pyc,sha256=uln0kH0-sy3WsBbbAjvV-E-D6L3Dtb6ph0oQki4yxjQ,1031
93
- ksxt/models/__pycache__/balance.cpython-312.pyc,sha256=_r64PniIdeptVO7zbVxYeh6nTH2UCnmnK8EzOr2jPzo,1279
94
- ksxt/models/__pycache__/cash.cpython-312.pyc,sha256=XXk7d17aZCvNf0_-pszEHqp0iBVNmT6PGANun6TUUBo,720
95
- ksxt/models/__pycache__/common.cpython-312.pyc,sha256=WcB1khTiUQPMLU_JuNJJq0zG7iv72X-WVTg91Xeklyk,1361
96
- ksxt/models/__pycache__/error.cpython-312.pyc,sha256=3674NIk6nnWW5sJh8xesC7c2ky7Id0dowXDn8axOJ1w,772
97
- ksxt/models/__pycache__/historical.cpython-312.pyc,sha256=CrFkLdryZRyVBCnqii-t7AEOWq-9JqafuUSoM__KoCk,1289
98
- ksxt/models/__pycache__/market.cpython-312.pyc,sha256=uZzrbwpf5QFtTKM5QaoDrkiRBEuEir8liuCgZxRT7sg,3076
99
- ksxt/models/__pycache__/order.cpython-312.pyc,sha256=j5LVaexWVroh3TC3Mrf11dH2prGEoqKETWDAdYDeHwQ,1789
100
- ksxt/models/__pycache__/orderbook.cpython-312.pyc,sha256=Yzm2_c3BjdgWgTMWKPCfwXj4dVxJV-GFG8May6ahfFg,1515
101
- ksxt/models/__pycache__/ticker.cpython-312.pyc,sha256=9kKIXZ1a6S_0Fpb3kjccZmrxcD1jYhChIRLvYpgnB6I,1163
102
- ksxt/models/__pycache__/token.cpython-312.pyc,sha256=HETJcEemd8gsaz4dLneFM2cqlaFHiXRixzt34_Ejzik,793
103
- ksxt/models/__pycache__/transaction.cpython-312.pyc,sha256=JBag20Aw6sx_-caWqi82Qxm7BgFJR0F4ME0vGugsxII,2821
104
- ksxt/parser/bithumb.py,sha256=wGt52wGgFDH7zkWyhhqOg3ABH-tv_YwsoZ3MWcozAQc,17203
105
- ksxt/parser/koreainvest.py,sha256=UzZGR6JgLrT9Z2lFH3V-6E-Uj_BnbSHqqHB0Pr7gaKQ,16684
106
- ksxt/parser/parser.py,sha256=Ic40whJb2osDWuctVBjeFLYSXItcONAtawKkFbhHySw,5694
107
- ksxt/parser/upbit.py,sha256=tDbt0Dhd6HG4qXe7OuzLks0zx8era3meSRafYRIGTWA,17746
108
- ksxt/parser/__pycache__/bithumb.cpython-312.pyc,sha256=O_9hCKXYGnmjfaJWwzlT0Sqs0sjNxyDmT9W_yADmgwA,21282
109
- ksxt/parser/__pycache__/koreainvest.cpython-312.pyc,sha256=PxFVti7Q-zhFwEmJxOPmDqyPH7pOHYsfi-Yy3nckL-c,20111
110
- ksxt/parser/__pycache__/parser.cpython-312.pyc,sha256=U_FtyOVWAAeCUsH1QU41Yw2u6bu06sqF72Tv_tBJWpU,8910
111
- ksxt/parser/__pycache__/upbit.cpython-312.pyc,sha256=NOtBxO5IHbzIH6S5octbpqU4T0J9CpOw2VSJjHA-eOs,22384
112
- ksxt/sample/symbol_sync.ipynb,sha256=dnUOgEKdUuEkDo_6LZjmDtVuNh4PPmCN4Ht7Pz-0L9Y,640081
113
- ksxt/utils/safer.py,sha256=tlXDU9KDxrrM0HT2bv45hkblIgbEYr02NygdYS0jj6c,1289
114
- ksxt/utils/sorter.py,sha256=j7eN1Qy7Wx3cXcWyRWyO1fVq-M24TrXvcfewPR5axF4,227
115
- ksxt/utils/timer.py,sha256=4_rhXdQDFkKshS5utWrgTteIe71tVSTL1zNW-IjOngM,1228
116
- ksxt/utils/__pycache__/safer.cpython-312.pyc,sha256=oPbGln-szGLBGYR0JVFxjE5v3jbzsSvGhqbmFSIcJQE,1989
117
- ksxt/utils/__pycache__/sorter.cpython-312.pyc,sha256=4vNlq0bWtItRlsRjXANLnBuThidmM6m_0YY_-PLA2Go,624
118
- ksxt/utils/__pycache__/timer.cpython-312.pyc,sha256=IXsQV8yPC92ExFaWgvwn-MgEfiLZxSP5pjU6xqYx8Sw,2003
119
- ksxt-1.0.5.dist-info/LICENSE.txt,sha256=vyuXQcPOZ9BriMQz3h1k3jQTrKGsAjohf8WQHHf6xqo,1080
120
- ksxt-1.0.5.dist-info/METADATA,sha256=ha9_CoiYs1RP85pPFK69W1o7y1cHZPnlRtm6csp7Pec,1649
121
- ksxt-1.0.5.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
122
- ksxt-1.0.5.dist-info/top_level.txt,sha256=XLUhkZCur5Pe0BPUV3J0syngIPz7jBb2YlQR4epo5kI,5
123
- ksxt-1.0.5.dist-info/RECORD,,
File without changes